public virtual void TakeDamage(IActor attacker, int damage, bool strike = false) { AttackResultType result = AttributeTools.CalcAttackResult(attacker.Attrbute, this.Attrbute); if (result == AttackResultType.Parry) { ShowFlyword(FlyWordType.Parry, 0); return; } else if (result == AttackResultType.Miss) { ShowFlyword(FlyWordType.Miss, 0); return; } ShowFlyword(strike ? FlyWordType.CritHurt : FlyWordType.NormalHurt, damage); int curHp = Attrbute.GetValue(AttributeType.Hp); if (curHp > damage) { Attrbute.UpdateValue(AttributeType.Hp, curHp - damage); } else { Attrbute.UpdateValue(AttributeType.Hp, 0); } UpdateHealth(); if (curHp <= 0) { ExecuteCommand(new DeadCommand(ActorDeadType.Normal)); } }
public ShipTypes SunkShip; //Filled in if ResultType is Sunk public AttackResult(int playerIndex, Position position, AttackResultType attackResultType = AttackResultType.Miss, ShipTypes sunkShip = ShipTypes.None) { PlayerIndex = playerIndex; Position = position; ResultType = attackResultType; SunkShip = sunkShip; }