private static IEnumerator _Attack(Offensive offensive) { if (offensive.Attacker.Weapon.uses <= 0) { yield break; } if (GameSettings.DoBattleAnimation) { yield return(BattleAnimController.WaitForBattleAnimation(offensive)); } if (offensive.Hit) { offensive.Defender.Damage(offensive.Damage); Debug.Log(offensive.Attacker.Unit.name + " attacked " + offensive.Defender.Unit.name + " for " + offensive.Damage + " damage \n" + offensive.Defender.Unit.name + " hp: " + offensive.Defender.CurrentHP + "/" + offensive.Defender.Unit.stats.hp); } else { Debug.Log(offensive.Attacker.Unit.name + " missed " + offensive.Defender.Unit.name); } if (!offensive.Attacker.Weapon.unbreakable) { offensive.Attacker.Weapon.uses--; } if (offensive.Defender == offensive.Attacker.LastTarget && offensive.Attacker.LastTarget != null) { offensive.Attacker.RepeatedTarget++; } else { offensive.Attacker.LastTarget = offensive.Defender; offensive.Attacker.RepeatedTarget = 1; } if (offensive.Attacker.CurrentHP <= 0) { UnitManager.Kill(offensive.Attacker); } if (offensive.Defender.CurrentHP <= 0) { UnitManager.Kill(offensive.Defender); } offensive.Attacker.AddEXP( StatsCalc.EXPGain_Damage( offensive.Attacker.Unit.stats.level, offensive.Defender.Unit.stats.level, offensive.Attacker.RepeatedTarget, offensive.Defender == null || offensive.Defender.CurrentHP <= 0, false ) ); while (GameSettings.DoBattleAnimation && BattleAnimController.IsAnimating) { yield return(null); } yield return(new WaitForSeconds(0.5f)); }