diff --git a/OpenRA.Game/Traits/Health.cs b/OpenRA.Game/Traits/Health.cs index b82d29e5de..06cd1c769b 100755 --- a/OpenRA.Game/Traits/Health.cs +++ b/OpenRA.Game/Traits/Health.cs @@ -170,7 +170,8 @@ namespace OpenRA.Traits { public static bool IsDead(this Actor self) { - if (self.Destroyed) return true; + if (self.Destroyed) + return true; var health = self.TraitOrDefault(); return (health == null) ? false : health.IsDead; @@ -178,7 +179,8 @@ namespace OpenRA.Traits public static DamageState GetDamageState(this Actor self) { - if (self.Destroyed) return DamageState.Dead; + if (self.Destroyed) + return DamageState.Dead; var health = self.TraitOrDefault(); return (health == null) ? DamageState.Undamaged : health.DamageState; diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index f0d05088ac..013d00bdfb 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -181,7 +181,7 @@ namespace OpenRA public void Add(IEffect b) { effects.Add(b); } public void Remove(IEffect b) { effects.Remove(b); } - public void AddFrameEndTask( Action a ) { frameEndActions.Enqueue( a ); } + public void AddFrameEndTask(Action a) { frameEndActions.Enqueue(a); } public event Action ActorAdded = _ => { }; public event Action ActorRemoved = _ => { }; diff --git a/OpenRA.Mods.RA/Effects/Rank.cs b/OpenRA.Mods.RA/Effects/Rank.cs index f263d5e688..1a5d05561b 100644 --- a/OpenRA.Mods.RA/Effects/Rank.cs +++ b/OpenRA.Mods.RA/Effects/Rank.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using OpenRA.Effects; using OpenRA.Graphics; +using OpenRA.Traits; namespace OpenRA.Mods.RA.Effects { @@ -18,20 +19,19 @@ namespace OpenRA.Mods.RA.Effects { Actor self; Animation anim = new Animation("rank"); - GainsExperience xp; public Rank(Actor self) { this.self = self; - xp = self.Trait(); + var xp = self.Trait(); anim.PlayRepeating("rank"); - anim.PlayFetchIndex("rank", () => xp.Level - 1); + anim.PlayFetchIndex("rank", () => xp.Level == 0 ? 0 : xp.Level - 1); } public void Tick(World world) { - if (self.Destroyed) + if (self.IsDead()) world.AddFrameEndTask(w => w.Remove(this)); else anim.Tick(); @@ -42,10 +42,7 @@ namespace OpenRA.Mods.RA.Effects if (!self.IsInWorld) yield break; - if (self.Destroyed) - yield break; - - if (xp.Level < 1) + if (self.IsDead()) yield break; if (!self.Owner.IsAlliedWith(self.World.RenderPlayer)) diff --git a/OpenRA.Mods.RA/GainsExperience.cs b/OpenRA.Mods.RA/GainsExperience.cs index c1dd5d3931..dd3ee8f93d 100644 --- a/OpenRA.Mods.RA/GainsExperience.cs +++ b/OpenRA.Mods.RA/GainsExperience.cs @@ -76,8 +76,12 @@ namespace OpenRA.Mods.RA Sound.PlayNotification(self.Owner, "Sounds", "LevelUp", self.Owner.Country.Race); self.World.AddFrameEndTask(w => w.Add(new CrateEffect(self, "levelup"))); - if (Level == 1 && !self.Destroyed) - self.World.AddFrameEndTask(w => w.Add(new Rank(self))); + if (Level == 1) + self.World.AddFrameEndTask(w => + { + if (!self.IsDead()) + w.Add(new Rank(self)); + }); } }