private IEnumerator DealDelayedDamagedRoutine(AttackDirectionData attackData, float applyDamageDelay) { bool finished = false; ParticleSystem attackParticle = attackData.attackParticle; attackParticle.Play(); while (!finished) { yield return(new WaitForSeconds(applyDamageDelay)); //Collider2D[] detectedDamageables = Physics2D.OverlapCircleAll(damageColliderPos.position, attackRange, enemyFilter); Collider2D[] detectedDamageables = Physics2D.OverlapBoxAll(attackData.attackLocation.position, attackData.attackDirectionColliderSize, enemyFilter); if (detectedDamageables.Length > 0) { for (int i = 0; i < detectedDamageables.Length; i++) { if (detectedDamageables[i].gameObject != gameObject) { IDamageable damageable = detectedDamageables[i].GetComponent <IDamageable>(); if (damageable != null) { damageable.TakeDamage(this.gameObject.transform, damageAmount); } } } } finished = true; yield return(null); } }
private AttackDirectionData GetAttackData() { float attackDirection = characterBase.FacingDirection; AttackDirectionData attackData = attackDirectionData[(int)attackDirection]; nextAttackDirection = attackData; return(attackData); }
private void DealDamage() { AttackDirectionData attackData = GetAttackData(); StartCoroutine(DealDelayedDamagedRoutine(attackData, dashAttackDamageDelay)); }