From ae809ce39fa1b13a080fa7b2a0e09c80a1564081 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Thu, 13 Jun 2013 09:44:50 +1200 Subject: [PATCH] Use actor/target generations to invalidate targets on ownership change --- OpenRA.Game/Actor.cs | 1 + OpenRA.Game/Traits/Target.cs | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/OpenRA.Game/Actor.cs b/OpenRA.Game/Actor.cs index 00105153eb..47bfa08aca 100755 --- a/OpenRA.Game/Actor.cs +++ b/OpenRA.Game/Actor.cs @@ -273,6 +273,7 @@ namespace OpenRA // momentarily remove from world so the ownership queries don't get confused w.Remove(this); Owner = newOwner; + Generation++; w.Add(this); foreach (var t in this.TraitsImplementing()) diff --git a/OpenRA.Game/Traits/Target.cs b/OpenRA.Game/Traits/Target.cs index 4af8de64bb..33456afd5c 100644 --- a/OpenRA.Game/Traits/Target.cs +++ b/OpenRA.Game/Traits/Target.cs @@ -15,7 +15,6 @@ namespace OpenRA.Traits public static Target[] NoTargets = {}; Actor actor; - Player owner; PPos pos; bool valid; int generation; @@ -26,7 +25,6 @@ namespace OpenRA.Traits { actor = a, valid = (a != null), - owner = (a != null) ? a.Owner : null, generation = a.Generation, }; } @@ -41,7 +39,7 @@ namespace OpenRA.Traits public static readonly Target None = new Target(); - public bool IsValid { get { return valid && (actor == null || (actor.IsInWorld && !actor.IsDead() && actor.Owner == owner && actor.Generation == generation)); } } + public bool IsValid { get { return valid && (actor == null || (actor.IsInWorld && !actor.IsDead() && actor.Generation == generation)); } } public PPos PxPosition { get { return IsActor ? actor.Trait().PxPosition : pos; } } public PPos CenterLocation { get { return PxPosition; } }