fixed bug where cloakable units were not targetable when uncloaked. removed ITargetable interface in favor of using the Targetable trait. fixed warnings in child classes of Targetable.
This commit is contained in:
@@ -20,15 +20,15 @@ namespace OpenRA.Traits
|
||||
public virtual object Create( ActorInitializer init ) { return new Targetable(this); }
|
||||
}
|
||||
|
||||
public class Targetable : ITargetable
|
||||
public class Targetable
|
||||
{
|
||||
TargetableInfo Info;
|
||||
protected TargetableInfo Info;
|
||||
public Targetable(TargetableInfo info)
|
||||
{
|
||||
Info = info;
|
||||
}
|
||||
|
||||
public string[] TargetTypes
|
||||
public virtual string[] TargetTypes
|
||||
{
|
||||
get { return Info.TargetTypes;}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,6 @@ namespace OpenRA.Traits
|
||||
public interface IResolveOrder { void ResolveOrder(Actor self, Order order); }
|
||||
public interface IOrderCursor { string CursorForOrder(Actor self, Order order); }
|
||||
public interface IOrderVoice { string VoicePhraseForOrder(Actor self, Order order); }
|
||||
public interface ITargetable { string[] TargetTypes { get; } }
|
||||
|
||||
public interface INotifySold { void Selling( Actor self ); void Sold( Actor self ); }
|
||||
public interface INotifyDamage { void Damaged(Actor self, AttackInfo e); }
|
||||
|
||||
@@ -163,7 +163,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
public static bool WeaponValidForTarget(WeaponInfo weapon, Actor target)
|
||||
{
|
||||
var targetable = target.TraitOrDefault<ITargetable>();
|
||||
var targetable = target.TraitOrDefault<Targetable>();
|
||||
if (targetable == null || !weapon.ValidTargets.Intersect(targetable.TargetTypes).Any())
|
||||
return false;
|
||||
|
||||
|
||||
@@ -15,25 +15,25 @@ using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA
|
||||
{
|
||||
public class TargetableAircraftInfo : TargetableInfo
|
||||
public class TargetableAircraftInfo : TargetableInfo, ITraitPrerequisite<AircraftInfo>
|
||||
{
|
||||
public readonly string[] GroundedTargetTypes = { };
|
||||
public override object Create(ActorInitializer init) { return new TargetableAircraft(init.self, this); }
|
||||
}
|
||||
|
||||
public class TargetableAircraft : ITargetable
|
||||
public class TargetableAircraft : Targetable
|
||||
{
|
||||
TargetableAircraftInfo Info;
|
||||
Aircraft Aircraft;
|
||||
public TargetableAircraft(Actor self, TargetableAircraftInfo info)
|
||||
: base(info)
|
||||
{
|
||||
Info = info;
|
||||
Aircraft = self.Trait<Aircraft>();
|
||||
}
|
||||
|
||||
public string[] TargetTypes
|
||||
public override string[] TargetTypes
|
||||
{
|
||||
get { return (Aircraft.Altitude > 0) ? Info.TargetTypes : Info.GroundedTargetTypes; }
|
||||
get { return (Aircraft.Altitude > 0) ? ((TargetableAircraftInfo)Info).TargetTypes
|
||||
: ((TargetableAircraftInfo)Info).GroundedTargetTypes; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,26 +12,25 @@ using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA
|
||||
{
|
||||
public class TargetableCloakedInfo : ITraitInfo, ITraitPrerequisite<CloakInfo>
|
||||
public class TargetableCloakedInfo : TargetableInfo, ITraitPrerequisite<CloakInfo>
|
||||
{
|
||||
public readonly string[] TargetTypes = {};
|
||||
public readonly string[] CloakedTargetTypes = {};
|
||||
public object Create( ActorInitializer init ) { return new TargetableCloaked(init.self, this); }
|
||||
public override object Create( ActorInitializer init ) { return new TargetableCloaked(init.self, this); }
|
||||
}
|
||||
|
||||
public class TargetableCloaked : ITargetable
|
||||
public class TargetableCloaked : Targetable
|
||||
{
|
||||
TargetableCloakedInfo Info;
|
||||
Cloak Cloak;
|
||||
public TargetableCloaked(Actor self, TargetableCloakedInfo info)
|
||||
: base(info)
|
||||
{
|
||||
Info = info;
|
||||
Cloak = self.Trait<Cloak>();
|
||||
}
|
||||
|
||||
public string[] TargetTypes
|
||||
public override string[] TargetTypes
|
||||
{
|
||||
get { return (Cloak.Cloaked) ? Info.CloakedTargetTypes : Info.TargetTypes;}
|
||||
get { return (Cloak.Cloaked) ? ((TargetableCloakedInfo)Info).CloakedTargetTypes
|
||||
: ((TargetableCloakedInfo)Info).TargetTypes;}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user