// defines the damage done and does attack public void Attack(CharacterBattle targetCharacterBattle, Action onAttackComplete) { Vector3 slideTargetPosition = targetCharacterBattle.GetPosition() + (GetPosition() - targetCharacterBattle.GetPosition()).normalized * 10f; Vector3 startingPosition = GetPosition(); // Slide to Target SlideToPosition(slideTargetPosition, () => { // Arrived at Target, attack him state = State.Busy; Vector3 attackDir = (targetCharacterBattle.GetPosition() - GetPosition()).normalized; characterBase.PlayAnimAttack(attackDir, () => { // Target hit int crit = UnityEngine.Random.Range(1, 100); if (crit < 95) { int damageAmount = 1 + upgradedamagevalue; targetCharacterBattle.Damage(this, damageAmount); } else { int damageAmount = UnityEngine.Random.Range(7, 8) + upgradedamagevalue; targetCharacterBattle.Damage(this, damageAmount); } // targetCharacterBattle.Damage(this, damageAmount); }, () => { // Attack completed, slide back SlideToPosition(startingPosition, () => { // Slide back completed, back to idle state = State.Idle; characterBase.PlayAnimIdle(attackDir); onAttackComplete(); }); }); }); }