Beispiel #1
0
    public void BlockDamage(float damageTaken, Vector2 directionHit, bool knockAway = false, float stunTime = 0)
    {
        Debug.Assert(blockable != null);

        blockable.BlockDamage(damageTaken, directionHit, knockAway, stunTime);
    }
Beispiel #2
0
    // Update is called once per frame
    void Update()
    {
        if (flaggedToDestroy)
        {
            return;
        }

        Collider2D[] colliders = getOverlapCollidersFunc();

        foreach (Collider2D c in colliders)
        {
            if (!oldOverlappedColliders.Contains(c) && damagedColliders.Contains(c))
            {
                damagedColliders.Remove(c);
            }

            if (!damagedColliders.Contains(c))
            {
                //if (!c.gameObject.activeSelf)
                //    continue;

                IParryable parryable = c.GetComponent <IParryable>();

                if (parryable != null)
                {
                    Vector2 dir = c.transform.position - collider.transform.position;
                    dir.Normalize();

                    parryable.ParryDamage(damage, dir, doesKnockAway, stunTime);

                    //add it to the list of damaged colliders, so it wont get called again
                    damagedColliders.Add(c);

                    if (OnParry != null)
                    {
                        OnParry(-dir);
                    }

                    //skip over damage check
                    break;
                }

                //if we've hit a block box
                IBlockable blockable = c.GetComponent <IBlockable>();

                if (blockable != null)
                {
                    Vector2 dir = c.transform.position - collider.transform.position;
                    dir.Normalize();

                    blockable.BlockDamage(damage, dir, doesKnockAway, stunTime);

                    //add it to the list of damaged colliders, so it wont get called again
                    damagedColliders.Add(c);

                    if (willDestroyOnBlock)
                    {
                        flaggedToDestroy = true;
                    }

                    //skip over damage check
                    break;
                }

                IDamagable damagable = c.GetComponent <IDamagable>();

                if (damagable != null)
                {
                    Vector2 dir = c.transform.position - collider.transform.position;
                    dir.Normalize();

                    damagable.TakeDamage(damage, dir, doesKnockAway, stunTime);
                    damagedColliders.Add(c);
                }
            }
        }

        oldOverlappedColliders = new HashSet <Collider2D>(colliders);

        if (flaggedToDestroy)
        {
            Destroy(gameObject);
        }
    }