diff --git a/OpenRA.Game/Traits/Health.cs b/OpenRA.Game/Traits/Health.cs index 5360d6cf6b..19e565f3f7 100755 --- a/OpenRA.Game/Traits/Health.cs +++ b/OpenRA.Game/Traits/Health.cs @@ -77,12 +77,13 @@ namespace OpenRA.Traits var oldState = this.DamageState; /* apply the damage modifiers, if we have any. */ - var modifier = (float)self.TraitsImplementing().Concat(self.Owner.PlayerActor.TraitsImplementing()) + var modifier = (float)self.TraitsImplementing() + .Concat(self.Owner.PlayerActor.TraitsImplementing()) .Select(t => t.GetDamageModifier(attacker, warhead)).Product(); - damage = (int)(damage * modifier); + damage = (int)(damage * modifier); + hp = Exts.Clamp(hp - damage, 0, MaxHP); - hp -= damage; var ai = new AttackInfo { Attacker = attacker, @@ -91,8 +92,6 @@ namespace OpenRA.Traits PreviousDamageState = oldState, DamageStateChanged = this.DamageState != oldState, Warhead = warhead, - PreviousHealth = hp + damage < 0 ? 0 : hp + damage, - Health = hp }; foreach (var nd in self.TraitsImplementing() @@ -104,10 +103,8 @@ namespace OpenRA.Traits .Concat(attacker.Owner.PlayerActor.TraitsImplementing())) nd.AppliedDamage(attacker, self, ai); - if (hp <= 0) + if (hp == 0) { - hp = 0; - attacker.Owner.Kills++; self.Owner.Deaths++; @@ -116,8 +113,6 @@ namespace OpenRA.Traits Log.Write("debug", "{0} #{1} killed by {2} #{3}", self.Info.Name, self.ActorID, attacker.Info.Name, attacker.ActorID); } - - if (hp > MaxHP) hp = MaxHP; } public void Tick(Actor self) diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index af3e1e0bc7..1f19d67cc7 100755 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -6,15 +6,15 @@ * as published by the Free Software Foundation. For more information, * see COPYING. */ -#endregion - -using System.Collections.Generic; -using System.Drawing; -using OpenRA.FileFormats; -using OpenRA.GameRules; -using OpenRA.Graphics; +#endregion + +using System; +using System.Collections.Generic; +using System.Drawing; +using OpenRA.FileFormats; +using OpenRA.GameRules; +using OpenRA.Graphics; using OpenRA.Network; -using System; namespace OpenRA.Traits { @@ -31,8 +31,6 @@ namespace OpenRA.Traits public DamageState DamageState; public DamageState PreviousDamageState; public bool DamageStateChanged; - public int PreviousHealth; - public int Health; } public interface ITick { void Tick(Actor self); }