diff --git a/OpenRa.Game/Controller.cs b/OpenRa.Game/Controller.cs index 1fb4404fc8..16dccdf954 100644 --- a/OpenRa.Game/Controller.cs +++ b/OpenRa.Game/Controller.cs @@ -71,6 +71,9 @@ namespace OpenRa.Game { var uog = orderGenerator as UnitOrderGenerator; + if (uog != null) + uog.selection.RemoveAll(a => a.IsDead); + if (uog != null && uog.selection.Count > 0 && uog.selection.Any(a => a.traits.Contains()) && uog.selection.All( a => a.Owner == Game.LocalPlayer )) diff --git a/OpenRa.Game/Graphics/WorldRenderer.cs b/OpenRa.Game/Graphics/WorldRenderer.cs index e784d6c730..0bc924cc22 100644 --- a/OpenRa.Game/Graphics/WorldRenderer.cs +++ b/OpenRa.Game/Graphics/WorldRenderer.cs @@ -77,9 +77,9 @@ namespace OpenRa.Game.Graphics DrawSelectionBox(u, Color.Yellow, false); } - var selection = Game.controller.orderGenerator as UnitOrderGenerator; - if (selection != null) - foreach( var a in Game.world.Actors.Intersect(selection.selection) ) + var uog = Game.controller.orderGenerator as UnitOrderGenerator; + if (uog != null) + foreach( var a in uog.selection ) DrawSelectionBox(a, Color.White, true); lineRenderer.Flush(); diff --git a/OpenRa.Game/World.cs b/OpenRa.Game/World.cs index 8ffdbf739d..59daaf976d 100644 --- a/OpenRa.Game/World.cs +++ b/OpenRa.Game/World.cs @@ -13,7 +13,7 @@ namespace OpenRa.Game int lastTime = Environment.TickCount; const int timestep = 40; - public void Add(Actor a) { actors.Add(a); ActorAdded(a); } + public void Add(Actor a) { actors.Add(a); ActorAdded(a); } public void Remove(Actor a) { actors.Remove(a); ActorRemoved(a); } public void Add(IEffect b) { effects.Add(b); } @@ -21,8 +21,8 @@ namespace OpenRa.Game public void AddFrameEndTask( Action a ) { frameEndActions.Add( a ); } - public event Action ActorAdded = _ => { }; - public event Action ActorRemoved = _ => { }; + public event Action ActorAdded = _ => { }; + public event Action ActorRemoved = a => { a.Health = 0; }; /* make sure everyone sees it as dead */ public void ResetTimer() {