diff --git a/OpenRa.Game/Actor.cs b/OpenRa.Game/Actor.cs index 83b1ece4c6..e8a2e177ca 100755 --- a/OpenRa.Game/Actor.cs +++ b/OpenRa.Game/Actor.cs @@ -36,6 +36,7 @@ namespace OpenRa.Game Location = location; CenterLocation = Traits.Util.CenterOfCell(Location); Owner = owner; + IsInWorld = true; if (Info == null) return; @@ -123,6 +124,7 @@ namespace OpenRa.Game } public bool IsDead { get { return Health <= 0; } } + public bool IsInWorld { get; set; } public DamageState GetDamageState() { diff --git a/OpenRa.Game/Orders/UnitOrderGenerator.cs b/OpenRa.Game/Orders/UnitOrderGenerator.cs index ec64b5e9c6..9a35fca5d4 100644 --- a/OpenRa.Game/Orders/UnitOrderGenerator.cs +++ b/OpenRa.Game/Orders/UnitOrderGenerator.cs @@ -27,7 +27,7 @@ namespace OpenRa.Game.Orders public void Tick() { - selection.RemoveAll(a => a.IsDead); + selection.RemoveAll(a => !a.IsInWorld); } public void Render() diff --git a/OpenRa.Game/World.cs b/OpenRa.Game/World.cs index dc55e86213..53dcfc9e37 100644 --- a/OpenRa.Game/World.cs +++ b/OpenRa.Game/World.cs @@ -11,7 +11,10 @@ namespace OpenRa.Game List> frameEndActions = new List>(); public void Add(Actor a) { actors.Add(a); ActorAdded(a); } - public void Remove(Actor a) { actors.Remove(a); ActorRemoved(a); } + public void Remove(Actor a) + { + a.IsInWorld = false; actors.Remove(a); ActorRemoved(a); + } public void Add(IEffect b) { effects.Add(b); } public void Remove(IEffect b) { effects.Remove(b); }