Merge pull request #8662 from atlimit8/UpgradableTargetableUnit

Upgradable TargetableUnit & apply to Allies 03
This commit is contained in:
abcdefg30
2015-07-13 15:40:28 +02:00
5 changed files with 21 additions and 36 deletions

View File

@@ -35,8 +35,8 @@ namespace OpenRA.Mods.Common.Traits
{ {
get get
{ {
return (self.CenterPosition.Z > 0) ? info.TargetTypes return IsTraitDisabled ? None
: info.GroundedTargetTypes; : (self.CenterPosition.Z > 0 ? info.TargetTypes : info.GroundedTargetTypes);
} }
} }
} }

View File

@@ -14,7 +14,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits namespace OpenRA.Mods.Common.Traits
{ {
[Desc("Actor can be targeted.")] [Desc("Actor can be targeted.")]
public class TargetableUnitInfo : ITraitInfo, ITargetableInfo public class TargetableUnitInfo : UpgradableTraitInfo, ITargetableInfo
{ {
[Desc("Target type. Used for filtering (in)valid targets.")] [Desc("Target type. Used for filtering (in)valid targets.")]
public readonly string[] TargetTypes = { }; public readonly string[] TargetTypes = { };
@@ -22,35 +22,37 @@ namespace OpenRA.Mods.Common.Traits
public bool RequiresForceFire = false; public bool RequiresForceFire = false;
public virtual object Create(ActorInitializer init) { return new TargetableUnit(init.Self, this); } public override object Create(ActorInitializer init) { return new TargetableUnit(init.Self, this); }
} }
public class TargetableUnit : ITargetable public class TargetableUnit : UpgradableTrait<TargetableUnitInfo>, ITargetable
{ {
readonly TargetableUnitInfo info; protected static readonly string[] None = new string[] { };
protected Cloak cloak; protected Cloak cloak;
public TargetableUnit(Actor self, TargetableUnitInfo info) public TargetableUnit(Actor self, TargetableUnitInfo info)
: base(info)
{ {
this.info = info;
cloak = self.TraitOrDefault<Cloak>(); cloak = self.TraitOrDefault<Cloak>();
} }
public virtual bool TargetableBy(Actor self, Actor viewer) public virtual bool TargetableBy(Actor self, Actor viewer)
{ {
if (IsTraitDisabled)
return false;
if (cloak == null || (!viewer.IsDead && viewer.HasTrait<IgnoresCloak>())) if (cloak == null || (!viewer.IsDead && viewer.HasTrait<IgnoresCloak>()))
return true; return true;
return cloak.IsVisible(self, viewer.Owner); return cloak.IsVisible(self, viewer.Owner);
} }
public virtual string[] TargetTypes { get { return info.TargetTypes; } } public virtual string[] TargetTypes { get { return IsTraitDisabled ? None : Info.TargetTypes; } }
public virtual IEnumerable<WPos> TargetablePositions(Actor self) public virtual IEnumerable<WPos> TargetablePositions(Actor self)
{ {
yield return self.CenterPosition; yield return self.CenterPosition;
} }
public bool RequiresForceFire { get { return info.RequiresForceFire; } } public bool RequiresForceFire { get { return Info.RequiresForceFire; } }
} }
} }

View File

@@ -34,7 +34,8 @@ namespace OpenRA.Mods.RA.Traits
{ {
get get
{ {
return cloak.Cloaked ? info.CloakedTargetTypes : info.TargetTypes; return IsTraitDisabled ? None
: (cloak.Cloaked ? info.CloakedTargetTypes : info.TargetTypes);
} }
} }
} }

View File

@@ -1382,21 +1382,15 @@ Rules:
-ExternalCaptures: -ExternalCaptures:
Captures: Captures:
CaptureTypes: building CaptureTypes: building
Cloak@JAIL: TargetableUnit:
UpgradeTypes: jail UpgradeTypes: jail
UpgradeMinEnabledLevel: 1 UpgradeMaxEnabledLevel: 0
InitialDelay: 0
CloakDelay: 0
Palette:
RenderSprites: RenderSprites:
Image: E6 Image: E6
MEDI: MEDI:
Cloak@JAIL: TargetableUnit:
UpgradeTypes: jail UpgradeTypes: jail
UpgradeMinEnabledLevel: 1 UpgradeMaxEnabledLevel: 0
InitialDelay: 0
CloakDelay: 0
Palette:
E7.noautotarget: E7.noautotarget:
Inherits: E7 Inherits: E7
AutoTarget: AutoTarget:

View File

@@ -1278,21 +1278,15 @@ Rules:
Captures: Captures:
CaptureTypes: building CaptureTypes: building
WithInfantryBody: WithInfantryBody:
Cloak@JAIL: TargetableUnit:
UpgradeTypes: jail UpgradeTypes: jail
UpgradeMinEnabledLevel: 1 UpgradeMaxEnabledLevel: 0
InitialDelay: 0
CloakDelay: 0
Palette:
RenderSprites: RenderSprites:
Image: E6 Image: E6
MEDI: MEDI:
Cloak@JAIL: TargetableUnit:
UpgradeTypes: jail UpgradeTypes: jail
UpgradeMinEnabledLevel: 1 UpgradeMaxEnabledLevel: 0
InitialDelay: 0
CloakDelay: 0
Palette:
E7.noautotarget: E7.noautotarget:
Inherits: E7 Inherits: E7
AutoTarget: AutoTarget:
@@ -1312,12 +1306,6 @@ Rules:
CAMERA: CAMERA:
RevealsShroud: RevealsShroud:
Range: 8c5 Range: 8c5
FTUR:
DetectCloaked:
Range: 0
DOME:
DetectCloaked:
Range: 0
CAMERA.VeryLarge: CAMERA.VeryLarge:
Inherits: CAMERA Inherits: CAMERA
RevealsShroud: RevealsShroud: