public void DoAttack(UnitClass atk, UnitClass def) { atk.OP -= atk.Weapon.OP_cost; var Damage = (int)Math.Round(Sim.RNG.Next(atk.Weapon.MinDamage, atk.Weapon.MaxDamage + 1) * (1 + atk.MeleeDamageMod)); var AtkRoll = Sim.RNG.Next(0, 100); var Hit = AtkRoll >= def.DodgeChange * 100; Damage = Hit ? Damage : 0; if (Hit) { def.HP -= Damage; Sim.Vis.RenderAll(); } Sim.Vis.RenderAttack(atk, def, Damage); Log.debug($"Attacking {def.ToString()}, Damage: {Damage}, Chance to dodge: {def.DodgeChange * 100}, Rolled: {AtkRoll} - {(Hit ? "HIT" : "MISS")}"); if (!def.Alive) { Log.info($"Unit Killed: " + def.ToString()); } }
public bool MoveToAttack(UnitClass unit, UnitClass enemy) { bool Madeit = true; var MoveTo = FindAttackSpot(unit, enemy); if (MoveTo.isValid) { Log.debug($"Moving to engage {enemy.ToString()}"); } else { Log.debug($"Too far: Approaching {enemy.ToString()}"); MoveTo = FindNearestSpot(unit, enemy); Madeit = false; } MoveToSpot(unit, MoveTo.X, MoveTo.Y); return(Madeit); }