Add generation counting to Actor and Target
This allows us to invalidate targets based on arbitrary conditions, just by bumping the actor's generation number. The next patches will use this.
This commit is contained in:
@@ -72,6 +72,7 @@ namespace OpenRA
|
||||
|
||||
Activity currentActivity;
|
||||
public Group Group;
|
||||
public int Generation;
|
||||
|
||||
internal Actor(World world, string name, TypeDictionary initDict )
|
||||
{
|
||||
|
||||
@@ -18,6 +18,7 @@ namespace OpenRA.Traits
|
||||
Player owner;
|
||||
PPos pos;
|
||||
bool valid;
|
||||
int generation;
|
||||
|
||||
public static Target FromActor(Actor a)
|
||||
{
|
||||
@@ -25,7 +26,8 @@ namespace OpenRA.Traits
|
||||
{
|
||||
actor = a,
|
||||
valid = (a != null),
|
||||
owner = (a != null) ? a.Owner : null
|
||||
owner = (a != null) ? a.Owner : null,
|
||||
generation = a.Generation,
|
||||
};
|
||||
}
|
||||
public static Target FromPos(PPos p) { return new Target { pos = p, valid = true }; }
|
||||
@@ -39,7 +41,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)); } }
|
||||
public bool IsValid { get { return valid && (actor == null || (actor.IsInWorld && !actor.IsDead() && actor.Owner == owner && actor.Generation == generation)); } }
|
||||
public PPos PxPosition { get { return IsActor ? actor.Trait<IHasLocation>().PxPosition : pos; } }
|
||||
public PPos CenterLocation { get { return PxPosition; } }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user