From e74bcba69471fe03df06298a676b4905affd06f7 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Tue, 5 Jan 2010 12:47:20 +1300 Subject: [PATCH] cargo: support for actors being removed from the world, but not dying --- OpenRa.Game/Actor.cs | 2 ++ OpenRa.Game/Orders/UnitOrderGenerator.cs | 2 +- OpenRa.Game/World.cs | 5 ++++- 3 files changed, 7 insertions(+), 2 deletions(-) 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); }