diff --git a/OpenRA.Game/Traits/Health.cs b/OpenRA.Game/Traits/Health.cs index 3b8f01dccf..81d4d3b83f 100644 --- a/OpenRA.Game/Traits/Health.cs +++ b/OpenRA.Game/Traits/Health.cs @@ -110,6 +110,7 @@ namespace OpenRA.Traits Attacker = attacker, Damage = damage, DamageState = this.DamageState, + PreviousDamageState = oldState, DamageStateChanged = this.DamageState != oldState, Warhead = warhead }); diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index 2f0194bef6..eb4b06fda9 100644 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -26,6 +26,7 @@ namespace OpenRA.Traits public WarheadInfo Warhead; public int Damage; public DamageState DamageState; + public DamageState PreviousDamageState; public bool DamageStateChanged; } diff --git a/OpenRA.Mods.RA/Render/RenderBuilding.cs b/OpenRA.Mods.RA/Render/RenderBuilding.cs index adb7a9d429..942d44c839 100644 --- a/OpenRA.Mods.RA/Render/RenderBuilding.cs +++ b/OpenRA.Mods.RA/Render/RenderBuilding.cs @@ -63,12 +63,12 @@ namespace OpenRA.Mods.RA.Render if (e.DamageState == DamageState.Dead) self.World.AddFrameEndTask(w => w.Add(new Explosion(w, self.CenterLocation.ToInt2(), "building", false))); - else if (e.DamageState >= DamageState.Heavy) + else if (e.DamageState >= DamageState.Heavy && e.PreviousDamageState < DamageState.Heavy) { anim.ReplaceAnim("damaged-idle"); Sound.Play(self.Info.Traits.Get().DamagedSound, self.CenterLocation); } - else + else if (e.DamageState < DamageState.Heavy) anim.ReplaceAnim("idle"); } diff --git a/OpenRA.Mods.RA/Render/RenderBuildingTurreted.cs b/OpenRA.Mods.RA/Render/RenderBuildingTurreted.cs index ba89f7dd69..065b61f487 100644 --- a/OpenRA.Mods.RA/Render/RenderBuildingTurreted.cs +++ b/OpenRA.Mods.RA/Render/RenderBuildingTurreted.cs @@ -33,12 +33,12 @@ namespace OpenRA.Mods.RA.Render { if (!e.DamageStateChanged) return; - if (e.DamageState >= DamageState.Heavy) + if (e.DamageState >= DamageState.Heavy && e.PreviousDamageState < DamageState.Heavy) { anim.ReplaceAnim("damaged-idle"); Sound.Play(self.Info.Traits.Get().DamagedSound, self.CenterLocation); } - else + else if (e.DamageState < DamageState.Heavy) anim.ReplaceAnim("idle"); } }