Replace Spy* with Disguise* for certain classes

This commit is contained in:
Curtis Shmyr
2014-03-15 14:20:57 -06:00
parent 8576c24988
commit f8f60e52bc
8 changed files with 115 additions and 97 deletions

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
@@ -16,69 +16,73 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA
{
class SpyToolTipInfo : TooltipInfo, Requires<SpyInfo>
class DisguiseToolTipInfo : TooltipInfo, Requires<DisguiseInfo>
{
public override object Create (ActorInitializer init) { return new SpyToolTip(init.self, this); }
public override object Create (ActorInitializer init) { return new DisguiseToolTip(init.self, this); }
}
class SpyToolTip : IToolTip
class DisguiseToolTip : IToolTip
{
Actor self;
TooltipInfo Info;
Spy spy;
TooltipInfo info;
Disguise disguise;
public DisguiseToolTip(Actor self, TooltipInfo info)
{
this.self = self;
this.info = info;
disguise = self.Trait<Disguise>();
}
public string Name()
{
if (spy.Disguised)
if (disguise.Disguised)
{
if (self.Owner == self.World.LocalPlayer)
return "{0} ({1})".F(Info.Name, spy.disguisedAsName);
return spy.disguisedAsName;
return "{0} ({1})".F(info.Name, disguise.AsName);
return disguise.AsName;
}
return Info.Name;
return info.Name;
}
public Player Owner()
{
if (spy.Disguised)
if (disguise.Disguised)
{
if (self.Owner == self.World.LocalPlayer)
return self.Owner;
return spy.disguisedAsPlayer;
return disguise.AsPlayer;
}
return self.Owner;
}
public SpyToolTip( Actor self, TooltipInfo info )
{
this.self = self;
Info = info;
spy = self.Trait<Spy>();
}
}
class DisguiseInfo : TraitInfo<Disguise> { }
class SpyInfo : TraitInfo<Spy> { }
class Spy : IIssueOrder, IResolveOrder, IOrderVoice, IRadarColorModifier, INotifyAttack
class Disguise : IEffectiveOwner, IIssueOrder, IResolveOrder, IOrderVoice, IRadarColorModifier, INotifyAttack
{
public Player disguisedAsPlayer;
public string disguisedAsSprite, disguisedAsName;
public Player AsPlayer;
public string AsSprite;
public string AsName;
public bool Disguised { get { return disguisedAsPlayer != null; } }
public bool Disguised { get { return AsPlayer != null; } }
public Player Owner { get { return AsPlayer; } }
public IEnumerable<IOrderTargeter> Orders
{
get
{
yield return new TargetTypeOrderTargeter("Disguise", "Disguise", 7, "ability", true, true) { ForceAttack=false };
yield return new TargetTypeOrderTargeter("Disguise", "Disguise", 7, "ability", true, true) { ForceAttack = false };
}
}
public Order IssueOrder( Actor self, IOrderTargeter order, Target target, bool queued )
{
if( order.OrderID == "Disguise" )
if (order.OrderID == "Disguise")
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
return null;
}
@@ -97,7 +101,7 @@ namespace OpenRA.Mods.RA
public string VoicePhraseForOrder(Actor self, Order order)
{
return (order.OrderString == "Disguise") ? "Attack" : null;
return order.OrderString == "Disguise" ? "Attack" : null;
}
public Color RadarColorOverride(Actor self)
@@ -105,25 +109,24 @@ namespace OpenRA.Mods.RA
if (!Disguised || self.Owner.IsAlliedWith(self.World.RenderPlayer))
return self.Owner.Color.RGB;
return disguisedAsPlayer.Color.RGB;
return AsPlayer.Color.RGB;
}
void DisguiseAs(Actor target)
{
var tooltip = target.TraitsImplementing<IToolTip>().FirstOrDefault();
disguisedAsName = tooltip.Name();
disguisedAsPlayer = tooltip.Owner();
disguisedAsSprite = target.Trait<RenderSprites>().GetImage(target);
AsName = tooltip.Name();
AsPlayer = tooltip.Owner();
AsSprite = target.Trait<RenderSprites>().GetImage(target);
}
void DropDisguise()
{
disguisedAsName = null;
disguisedAsPlayer = null;
disguisedAsSprite = null;
AsName = null;
AsPlayer = null;
AsSprite = null;
}
/* lose our disguise if we attack anything */
public void Attacking(Actor self, Target target, Armament a, Barrel barrel) { DropDisguise(); }
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
@@ -35,7 +35,7 @@ namespace OpenRA.Mods.RA.Effects
Lazy<HiddenUnderFog> huf;
Lazy<FrozenUnderFog> fuf;
Lazy<Spy> spy;
Lazy<Disguise> disguise;
Lazy<Cloak> cloak;
Cache<Player, GpsWatcher> watcher;
Cache<Player, FrozenActorLayer> frozen;
@@ -53,7 +53,7 @@ namespace OpenRA.Mods.RA.Effects
huf = Lazy.New(() => self.TraitOrDefault<HiddenUnderFog>());
fuf = Lazy.New(() => self.TraitOrDefault<FrozenUnderFog>());
spy = Lazy.New(() => self.TraitOrDefault<Spy>());
disguise = Lazy.New(() => self.TraitOrDefault<Disguise>());
cloak = Lazy.New(() => self.TraitOrDefault<Cloak>());
watcher = new Cache<Player, GpsWatcher>(p => p.PlayerActor.Trait<GpsWatcher>());
@@ -65,7 +65,7 @@ namespace OpenRA.Mods.RA.Effects
if (cloak.Value != null && cloak.Value.Cloaked)
return false;
if (spy.Value != null && spy.Value.Disguised)
if (disguise.Value != null && disguise.Value.Disguised)
return false;
if (huf.Value != null && !huf.Value.IsVisible(self, self.World.RenderPlayer))

View File

@@ -320,7 +320,7 @@
<Compile Include="Render\RenderHarvester.cs" />
<Compile Include="Render\RenderInfantry.cs" />
<Compile Include="Render\RenderInfantryPanic.cs" />
<Compile Include="Render\RenderSpy.cs" />
<Compile Include="Render\RenderDisguise.cs" />
<Compile Include="Render\RenderLandingCraft.cs" />
<Compile Include="Render\RenderUnit.cs" />
<Compile Include="Render\RenderUnitReload.cs" />
@@ -348,7 +348,7 @@
<Compile Include="SmokeTrailWhenDamaged.cs" />
<Compile Include="SpawnMPUnits.cs" />
<Compile Include="SpawnMapActors.cs" />
<Compile Include="Spy.cs" />
<Compile Include="Disguise.cs" />
<Compile Include="StoresOre.cs" />
<Compile Include="StrategicVictoryConditions.cs" />
<Compile Include="SupplyTruck.cs" />

View File

@@ -0,0 +1,50 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
namespace OpenRA.Mods.RA.Render
{
class RenderDisguiseInfo : RenderInfantryProneInfo
{
public override object Create(ActorInitializer init) { return new RenderDisguise(init.self, this); }
}
class RenderDisguise : RenderInfantryProne
{
RenderDisguiseInfo info;
string intendedSprite;
Disguise disguise;
public RenderDisguise(Actor self, RenderDisguiseInfo info)
: base(self, info)
{
this.info = info;
disguise = self.Trait<Disguise>();
intendedSprite = disguise.AsSprite;
}
protected override string PaletteName(Actor self)
{
var player = disguise.AsPlayer ?? self.Owner;
return info.Palette ?? info.PlayerPalette + player.InternalName;
}
public override void Tick(Actor self)
{
if (disguise.AsSprite != intendedSprite)
{
intendedSprite = disguise.AsSprite;
anim.ChangeImage(intendedSprite ?? GetImage(self), info.StandAnimations.Random(Game.CosmeticRandom));
UpdatePalette();
}
base.Tick(self);
}
}
}

View File

@@ -1,48 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
namespace OpenRA.Mods.RA.Render
{
class RenderSpyInfo : RenderInfantryProneInfo
{
public override object Create(ActorInitializer init) { return new RenderSpy(init.self, this); }
}
class RenderSpy : RenderInfantryProne
{
RenderSpyInfo info;
string disguisedAsSprite;
Spy spy;
public RenderSpy(Actor self, RenderSpyInfo info) : base(self, info)
{
this.info = info;
spy = self.Trait<Spy>();
disguisedAsSprite = spy.disguisedAsSprite;
}
protected override string PaletteName(Actor self)
{
var player = spy.disguisedAsPlayer ?? self.Owner;
return info.Palette ?? info.PlayerPalette + player.InternalName;
}
public override void Tick(Actor self)
{
if (spy.disguisedAsSprite != disguisedAsSprite)
{
disguisedAsSprite = spy.disguisedAsSprite;
anim.ChangeImage(disguisedAsSprite ?? GetImage(self), info.StandAnimations.Random(Game.CosmeticRandom));
UpdatePalette();
}
base.Tick(self);
}
}
}

View File

@@ -150,6 +150,19 @@ namespace OpenRA.Utility
node.Key = "Immobile";
}
// Spy was renamed to Disguise
if (engineVersion < 20140314)
{
if (depth == 1 && node.Key == "Spy")
node.Key = "Disguise";
if (depth == 1 && node.Key == "SpyToolTip")
node.Key = "DisguiseToolTip";
if (depth == 1 && node.Key == "RenderSpy")
node.Key = "RenderDisguise";
}
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
}
}

View File

@@ -192,7 +192,7 @@ SPY:
Hotkey: p
Valued:
Cost: 500
SpyToolTip:
DisguiseToolTip:
Name: Spy
Description: Infiltrates enemy structures to gather \nintelligence. Exact effect depends on the \nbuilding infiltrated.\n Strong vs Nothing\n Weak vs Everything\n Special Ability: Disguised
Selectable:
@@ -207,12 +207,12 @@ SPY:
Passenger:
PipType: Yellow
TakeCover:
Spy:
Disguise:
Infiltrates:
Types: Cash, SupportPower, Exploration
-AutoTarget:
-RenderInfantry:
RenderSpy:
RenderDisguise:
IdleAnimations: idle1,idle2
StandAnimations: stand,stand2
Armament:

View File

@@ -273,7 +273,7 @@ CHAMSPY:
Hotkey: p
Valued:
Cost: 700
SpyToolTip:
DisguiseToolTip:
Name: Chameleon Spy
Description: Infiltrates enemy structures to gather \nintelligence. Exact effect depends on the \nbuilding infiltrated.\n Strong vs Nothing\n Weak vs Everything\n Special Ability: Disguised
Selectable:
@@ -287,12 +287,12 @@ CHAMSPY:
Range: 9c0
Passenger:
TakeCover:
Spy:
Disguise:
Infiltrates:
Types: Cash, SupportPower, Exploration
-AutoTarget:
-RenderInfantry:
RenderSpy:
RenderDisguise:
IdleAnimations: idle1,idle2
CYBORG: