public void BlockDamage(float damageTaken, Vector2 directionHit, bool knockAway = false, float stunTime = 0) { Debug.Assert(blockable != null); blockable.BlockDamage(damageTaken, directionHit, knockAway, stunTime); }
// 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); } }