コード例 #1
0
 void Regene()
 {
     if (m_isDead)
     {
         return;
     }
     m_HP += m_HPRegene * Time.deltaTime;
     m_HP  = Mathf.Clamp(m_HP, 0f, m_MaxHP);
     m_OnHPChanged.Invoke(m_HP);
 }
コード例 #2
0
    void FixedUpdate()
    {
        if (!m_HitBox.enabled)
        {
            return;
        }

        // Determine if the Damager is overlapping a Damagable object.
        Vector2 scale      = transform.lossyScale;
        Vector2 scaledSize = Vector2.Scale(m_HitBox.size, scale);

        Vector2 pointA = (Vector2)m_HitBox.bounds.center - scaledSize * 0.5f;
        Vector2 pointB = pointA + scaledSize;

        int hitCount = Physics2D.OverlapArea(pointA, pointB, attackContactFilter, attackOverlapResults);

        for (int i = 0; i < hitCount; i++)
        {
            lastHit = attackOverlapResults[i];
            Damageable damageable = lastHit.GetComponent <Damageable>();

            if (damageable)
            {
                OnDamageableHit.Invoke(this, damageable);
                damageable.TakeDamage(this);
            }
            else
            {
                OnNonDamageableHit.Invoke(this);
            }
        }
    }
コード例 #3
0
 private void OnTriggerEnter2D(Collider2D collision)
 {
     var Damageable = collision.GetComponent<Damageable>();
     if(Damageable)
     {
         Damageable.TakeDamage(this);
         OnDamageable.Invoke(this, Damageable);
     }
 }
コード例 #4
0
ファイル: Damageable.cs プロジェクト: watabu/Liblary
 public void TakeHeal(int health)
 {
     if (!activeFlag || IsDead())
     {
         return;
     }
     Health += health;
     OnTakeHeal.Invoke((int)health);
 }
コード例 #5
0
 private void ToDamage(Damageable damageable)
 {
     if (damageable)
     {
         _delayBetweenDamage = startDelayBetweenDamage;
         OnDamageableHit?.Invoke(this, damageable);
         damageable.TakeDamage(this);
     }
     else
     {
         OnNonDamageableHit?.Invoke(this);
     }
 }
コード例 #6
0
ファイル: Damageable.cs プロジェクト: watabu/Liblary
 public void TakeDamage(Damager damager)//ダメージを受ける
 {
     if (!activeFlag || !m_damageFlag || IsDead())
     {
         return;
     }
     Debug.Log("take damage:" + damager.damage, gameObject);
     Health -= damager.damage;
     OnTakeDamage.Invoke(damager.damage);
     if (IsDead())//もしHPが0以下になったら死んだときのイベントを呼び出す
     {
         OnDead.Invoke();
     }
     m_damageFlag = false;
 }
コード例 #7
0
ファイル: Damager.cs プロジェクト: jasninus/ProjectTimeLord
    private void FixedUpdate()
    {
        if (!canDamage)
        {
            return;
        }

        Vector2 scale = damagerTransform.lossyScale;

        Vector2 facingOffset = Vector2.Scale(offset, scale);

        if (offsetBasedOnSpriteFacing && spriteRenderer != null && spriteRenderer.flipX != spriteOriginallyFlipped)
        {
            facingOffset = new Vector2(-offset.x * scale.x, offset.y * scale.y);
        }

        Vector2 scaledSize = Vector2.Scale(size, scale);

        Vector2 pointA = (Vector2)damagerTransform.position + facingOffset - scaledSize * 0.5f;
        Vector2 pointB = pointA + scaledSize;

        int hitCount = Physics2D.OverlapArea(pointA, pointB, attackContactFilter, attackOverlapResults);

        for (int i = 0; i < hitCount; i++)
        {
            lastHit = attackOverlapResults[i];
            Damageable damageable = lastHit.GetComponent <Damageable>();
            if (lastHit.GetComponent <CompositeCollider2D>())
            {
                damageable = lastHit.GetComponentInChildren <Damageable>();
            }

            if (damageable)
            {
                OnDamageableHit.Invoke(this, damageable);
                damageable.TakeDamage(this, ignoreInvincibility);
                if (disableDamageAfterHit)
                {
                    DisableDamage();
                }
            }
            else
            {
                OnNonDamageableHit.Invoke(this);
            }
        }
    }
コード例 #8
0
ファイル: Damager.cs プロジェクト: Plimsky/Stigmus-Arena
        private void FixedUpdate()
        {
            if (!m_canDamage)
            {
                return;
            }

            Vector2 scale        = m_damagerTransform.lossyScale;
            Vector2 facingOffset = Vector2.Scale(Offset, scale);

            if (OffsetBasedOnSpriteFacing && m_isSpriteRendererNotNull && SpriteRenderer.flipX != m_spriteOriginallyFlipped)
            {
                facingOffset = new Vector2(-Offset.x * scale.x, Offset.y * scale.y);
            }

            Vector2 scaledSize = Vector2.Scale(Size, scale);
            Vector2 pointA     = (Vector2)m_damagerTransform.position + facingOffset - scaledSize * 0.5f;
            Vector2 pointB     = pointA + scaledSize;

            int hitCount = Physics2D.OverlapArea(pointA, pointB, m_attackContactFilter, m_attackOverlapResults);

            for (int i = 0; i < hitCount; ++i)
            {
                m_lastHit = m_attackOverlapResults[i];
                Damageable damageable = m_lastHit.GetComponent <Damageable>();

                if (damageable != null)
                {
                    OnDamageableHit?.Invoke(this, damageable);
                    damageable.TakeDamage(this, IgnoreInvincibility);
                    if (DisableDamageAfterHit)
                    {
                        DisableDamage();
                    }
                }
                else
                {
                    OnNonDamageableHit?.Invoke(this);
                }
            }
        }