diff --git a/OpenRA.Game/Traits/Target.cs b/OpenRA.Game/Traits/Target.cs index a2b3845a56..50e17d9fab 100644 --- a/OpenRA.Game/Traits/Target.cs +++ b/OpenRA.Game/Traits/Target.cs @@ -38,11 +38,14 @@ namespace OpenRA.Traits public static Target FromActor(Actor a) { + if (a == null) + return Target.Invalid; + return new Target { actor = a, - targetable = a != null ? a.TraitOrDefault() : null, - type = a != null ? TargetType.Actor : TargetType.Invalid, + targetable = a.TraitOrDefault(), + type = TargetType.Actor, generation = a.Generation, }; } @@ -73,7 +76,7 @@ namespace OpenRA.Traits public bool IsValidFor(Actor targeter) { - if (Type == TargetType.Invalid) + if (targeter == null || Type == TargetType.Invalid) return false; if (targetable != null && !targetable.TargetableBy(actor, targeter)) diff --git a/OpenRA.Mods.RA/AI/HackyAI.cs b/OpenRA.Mods.RA/AI/HackyAI.cs index 7437b08734..7b64fa2795 100644 --- a/OpenRA.Mods.RA/AI/HackyAI.cs +++ b/OpenRA.Mods.RA/AI/HackyAI.cs @@ -99,7 +99,7 @@ namespace OpenRA.Mods.RA.AI HackyAI bot; XRandom random; - Actor target; + Target target; StateMachine fsm; //fuzzy @@ -113,7 +113,8 @@ namespace OpenRA.Mods.RA.AI this.world = bot.world; this.random = bot.random; this.type = type; - this.target = target; + this.target = Traits.Target.FromActor(target); + fsm = new StateMachine(this); switch (type) @@ -144,14 +145,13 @@ namespace OpenRA.Mods.RA.AI public Actor Target { - get { return target; } - set { target = value; } + get { return target.Actor; } + set { target = Traits.Target.FromActor(value); } } public bool TargetIsValid { - get { return (target != null && !target.IsDead() && !target.Destroyed - && target.IsInWorld && !target.HasTrait()); } + get { return target.IsValidFor(units.FirstOrDefault()) && !target.Actor.HasTrait(); } } //**********************************************************************************