public void AttackEnemy(NpcBase defender, Action onAttackCompleted) { this.GetAnimator().SetBool("isWalking", true); if (this.AttackDamage() > defender.EvadeDamage()) { Vector3 slideTargetPosition = defender.transform.position; SlideToPosition(slideTargetPosition, () => { state = EState.Busy; defender.OnDamageReceived(this.AttackDamage() - stats.dexterity / 2); AnimAttack(() => { this.GetAnimator().SetBool("isAttacking", false); SlideToPosition(startPosition, () => { state = EState.Idle; this.GetAnimator().SetBool("isWalking", false); onAttackCompleted(); }); }); }); } else { Vector3 slideTargetPosition = defender.transform.position; SlideToPosition(slideTargetPosition, () => { state = EState.Busy; defender.GetAnimator().SetBool("Duck", true); print(this.stats.npcName + " Missed " + defender.stats.npcName + "!"); AnimAttack(() => { this.GetAnimator().SetBool("isAttacking", false); SlideToPosition(startPosition, () => { state = EState.Idle; defender.GetAnimator().SetBool("Duck", false); this.GetAnimator().SetBool("isWalking", false); onAttackCompleted(); }); }); }); } }