diff --git a/OpenRA.Game/Orders/UnitOrderGenerator.cs b/OpenRA.Game/Orders/UnitOrderGenerator.cs index e55b293aad..4c8e0027cc 100644 --- a/OpenRA.Game/Orders/UnitOrderGenerator.cs +++ b/OpenRA.Game/Orders/UnitOrderGenerator.cs @@ -56,8 +56,8 @@ namespace OpenRA.Orders public string GetCursor( World world, int2 xy, MouseInput mi ) { var c = Order(world, xy, mi) - .Select(o => o.Subject.traits.WithInterface() - .Select(pc => pc.CursorForOrderString(o.OrderString, o.Subject, o.TargetLocation)).FirstOrDefault(a => a != null)) + .Select(o => o.Subject.traits.WithInterface() + .Select(pc => pc.CursorForOrder(o.Subject, o)).FirstOrDefault(a => a != null)) .FirstOrDefault(a => a != null); return c ?? diff --git a/OpenRA.Game/Traits/Mobile.cs b/OpenRA.Game/Traits/Mobile.cs index 58dfafaaa7..95b11fafe8 100644 --- a/OpenRA.Game/Traits/Mobile.cs +++ b/OpenRA.Game/Traits/Mobile.cs @@ -27,7 +27,7 @@ namespace OpenRA.Traits public virtual object Create(ActorInitializer init) { return new Mobile(init, this); } } - public class Mobile : IIssueOrder, IResolveOrder, IOccupySpace, IMove, IProvideCursor, INudge + public class Mobile : IIssueOrder, IResolveOrder, IOccupySpace, IMove, IOrderCursor, INudge { public readonly Actor self; public readonly MobileInfo Info; @@ -112,12 +112,12 @@ namespace OpenRA.Traits } } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - if (s != "Move") + if (order.OrderString != "Move") return null; - return (CanEnterCell(location)) ? "move" : "move-blocked"; + return (CanEnterCell(order.TargetLocation)) ? "move" : "move-blocked"; } public int2 TopLeft { get { return toCell; } } diff --git a/OpenRA.Game/Traits/Production.cs b/OpenRA.Game/Traits/Production.cs index 73f4b34ba0..d8a7deebae 100755 --- a/OpenRA.Game/Traits/Production.cs +++ b/OpenRA.Game/Traits/Production.cs @@ -22,7 +22,7 @@ namespace OpenRA.Traits public readonly string[] Produces = { }; } - public class Production : IIssueOrder, IResolveOrder, ITags, IProvideCursor + public class Production : IIssueOrder, IResolveOrder, ITags, IOrderCursor { public virtual int2? CreationLocation( Actor self, ActorInfo producee ) { @@ -99,9 +99,9 @@ namespace OpenRA.Traits return null; } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - return (s == "Deploy") ? "deploy" : null; + return (order.OrderString == "Deploy") ? "deploy" : null; } public void ResolveOrder(Actor self, Order order) diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index b314185508..ff80f9de55 100644 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -35,7 +35,7 @@ namespace OpenRA.Traits public interface IRender { IEnumerable Render(Actor self); } public interface IIssueOrder { Order IssueOrder( Actor self, int2 xy, MouseInput mi, Actor underCursor ); } public interface IResolveOrder { void ResolveOrder(Actor self, Order order); } - public interface IProvideCursor { string CursorForOrderString(string s, Actor a, int2 location); } + public interface IOrderCursor { string CursorForOrder(Actor self, Order order); } public interface INotifySold { void Selling( Actor self ); void Sold( Actor self ); } public interface INotifyDamage { void Damaged(Actor self, AttackInfo e); } diff --git a/OpenRA.Mods.Aftermath/ChronoshiftDeploy.cs b/OpenRA.Mods.Aftermath/ChronoshiftDeploy.cs index 5e9d6921da..aa0e9a5621 100644 --- a/OpenRA.Mods.Aftermath/ChronoshiftDeploy.cs +++ b/OpenRA.Mods.Aftermath/ChronoshiftDeploy.cs @@ -21,7 +21,7 @@ namespace OpenRA.Mods.Aftermath public readonly int ChargeTime = 120; // Seconds } - class ChronoshiftDeploy : IIssueOrder, IResolveOrder, ITick, IPips, IProvideCursor + class ChronoshiftDeploy : IIssueOrder, IResolveOrder, ITick, IPips, IOrderCursor { // Recharge logic [Sync] @@ -67,9 +67,9 @@ namespace OpenRA.Mods.Aftermath } } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - return (s == "Deploy") ? "deploy" : null; + return (order.OrderString == "Deploy") ? "deploy" : null; } // Display 5 pips indicating the current charge status diff --git a/OpenRA.Mods.RA/Activities/CaptureBuilding.cs b/OpenRA.Mods.RA/Activities/CaptureBuilding.cs index 2d5e72086e..5884b3b1e2 100644 --- a/OpenRA.Mods.RA/Activities/CaptureBuilding.cs +++ b/OpenRA.Mods.RA/Activities/CaptureBuilding.cs @@ -23,32 +23,25 @@ namespace OpenRA.Mods.RA.Activities public IActivity Tick(Actor self) { if (target == null || target.IsDead) return NextActivity; - var damage = -self.Info.Traits.Get().EngineerDamage; - if (self.Owner.Stances[ target.Owner ] == Stance.Ally) + var damage = self.Info.Traits.Get().EngineerDamage; + + if (target.Health - damage <= 0) { - if (target.Health == target.Info.Traits.Get().HP) - return NextActivity; - target.InflictDamage(self, damage, null); + target.World.AddFrameEndTask(w => + { + // momentarily remove from world so the ownership queries don't get confused + w.Remove(target); + target.Owner = self.Owner; + w.Add(target); + + foreach (var t in target.traits.WithInterface()) + t.OnCapture(target, self); + }); + + target.InflictDamage(self, target.Health - damage, null); } else - { - if (target.Health - damage <= 0) - { - target.World.AddFrameEndTask(w => - { // momentarily remove from world so the ownership queries don't get confused - w.Remove(target); - target.Owner = self.Owner; - w.Add(target); - - foreach (var t in target.traits.WithInterface()) - t.OnCapture(target, self); - }); - - target.InflictDamage(self, target.Health - damage, null); - } - else - target.InflictDamage(self, damage, null); - } + target.InflictDamage(self, damage, null); // the engineer is sacrificed. self.World.AddFrameEndTask(w => w.Remove(self)); diff --git a/OpenRA.Mods.RA/Activities/RepairBuilding.cs b/OpenRA.Mods.RA/Activities/RepairBuilding.cs new file mode 100644 index 0000000000..49dfa30eb5 --- /dev/null +++ b/OpenRA.Mods.RA/Activities/RepairBuilding.cs @@ -0,0 +1,37 @@ +#region Copyright & License Information +/* + * Copyright 2007-2010 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 LICENSE. + */ +#endregion + +using OpenRA.Traits; + +namespace OpenRA.Mods.RA.Activities +{ + class RepairBuilding : IActivity + { + Actor target; + + public RepairBuilding(Actor target) { this.target = target; } + + public IActivity NextActivity { get; set; } + + public IActivity Tick(Actor self) + { + if (target == null || target.IsDead) return NextActivity; + if (target.Health == target.GetMaxHP()) + return NextActivity; + + target.InflictDamage(self, -target.GetMaxHP(), null); + self.World.AddFrameEndTask(w => w.Remove(self)); + + return NextActivity; + } + + public void Cancel(Actor self) { target = null; NextActivity = null; } + } +} diff --git a/OpenRA.Mods.RA/AttackBase.cs b/OpenRA.Mods.RA/AttackBase.cs index 05f1943a18..9cd5ad80e4 100755 --- a/OpenRA.Mods.RA/AttackBase.cs +++ b/OpenRA.Mods.RA/AttackBase.cs @@ -35,7 +35,7 @@ namespace OpenRA.Mods.RA public virtual object Create(ActorInitializer init) { return new AttackBase(init.self); } } - public class AttackBase : IIssueOrder, IResolveOrder, ITick, IExplodeModifier, IProvideCursor + public class AttackBase : IIssueOrder, IResolveOrder, ITick, IExplodeModifier, IOrderCursor { public Target target; @@ -253,9 +253,9 @@ namespace OpenRA.Mods.RA target = Target.None; } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - switch (s) + switch (order.OrderString) { case "Attack": return "attack"; case "Heal": return "heal"; diff --git a/OpenRA.Mods.RA/C4Demolition.cs b/OpenRA.Mods.RA/C4Demolition.cs index e05d91d5d5..b44775b1a2 100644 --- a/OpenRA.Mods.RA/C4Demolition.cs +++ b/OpenRA.Mods.RA/C4Demolition.cs @@ -19,7 +19,7 @@ namespace OpenRA.Mods.RA public readonly float C4Delay = 0; } - class C4Demolition : IIssueOrder, IResolveOrder, IProvideCursor + class C4Demolition : IIssueOrder, IResolveOrder, IOrderCursor { public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor) { @@ -42,9 +42,9 @@ namespace OpenRA.Mods.RA } } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - return (s == "C4") ? "c4" : null; + return (order.OrderString == "C4") ? "c4" : null; } } } diff --git a/OpenRA.Mods.RA/Cargo.cs b/OpenRA.Mods.RA/Cargo.cs index 67e30271d3..b68c9574ac 100644 --- a/OpenRA.Mods.RA/Cargo.cs +++ b/OpenRA.Mods.RA/Cargo.cs @@ -21,7 +21,7 @@ namespace OpenRA.Mods.RA public readonly int UnloadFacing = 0; } - public class Cargo : IPips, IIssueOrder, IResolveOrder, IProvideCursor + public class Cargo : IPips, IIssueOrder, IResolveOrder, IOrderCursor { List cargo = new List(); @@ -49,9 +49,9 @@ namespace OpenRA.Mods.RA } } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - return (s == "Deploy") ? "deploy" : null; + return (order.OrderString == "Deploy") ? "deploy" : null; } public bool IsFull(Actor self) diff --git a/OpenRA.Mods.RA/ConstructionYard.cs b/OpenRA.Mods.RA/ConstructionYard.cs index 3421136898..d953e339b9 100755 --- a/OpenRA.Mods.RA/ConstructionYard.cs +++ b/OpenRA.Mods.RA/ConstructionYard.cs @@ -15,7 +15,7 @@ namespace OpenRA.Mods.RA { class ConstructionYardInfo : TraitInfo { } - public class ConstructionYard : IIssueOrder, IResolveOrder, IProvideCursor + public class ConstructionYard : IIssueOrder, IResolveOrder, IOrderCursor { public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor) { @@ -27,9 +27,9 @@ namespace OpenRA.Mods.RA return null; } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - return (s == "Deploy") ? "deploy" : null; + return (order.OrderString == "Deploy") ? "deploy" : null; } public void ResolveOrder(Actor self, Order order) diff --git a/OpenRA.Mods.RA/EngineerCapture.cs b/OpenRA.Mods.RA/EngineerCapture.cs index 6459410831..32a6437caa 100644 --- a/OpenRA.Mods.RA/EngineerCapture.cs +++ b/OpenRA.Mods.RA/EngineerCapture.cs @@ -19,37 +19,30 @@ namespace OpenRA.Mods.RA public readonly int EngineerDamage = 300; } - class EngineerCapture : IIssueOrder, IResolveOrder, IProvideCursor + class EngineerCapture : IIssueOrder, IResolveOrder, IOrderCursor { public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor) { if (mi.Button != MouseButton.Right) return null; if (underCursor == null) return null; + if (self.Owner.Stances[underCursor.Owner] != Stance.Enemy) return null; if (!underCursor.traits.Contains()) return null; - - // todo: other bits - if (underCursor.Owner == null) return null; // don't allow capturing of bridges, etc. + var isCapture = underCursor.Health <= self.Info.Traits.Get().EngineerDamage; - var isCapture = underCursor.Health <= self.Info.Traits.Get().EngineerDamage && - self.Owner.Stances[underCursor.Owner] != Stance.Ally; - - var isHeal = self.Owner.Stances[underCursor.Owner] == Stance.Ally; - return new Order(isCapture ? "Capture" : - isHeal ? "Repair" : "Infiltrate", + return new Order(isCapture ? "Capture" : "Infiltrate", self, underCursor); } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - return (s == "Infiltrate") ? "enter" : - (s == "Repair") ? "goldwrench" : - (s == "Capture") ? "capture" : null; + return (order.OrderString == "Infiltrate") ? "enter" : + (order.OrderString == "Capture") ? "capture" : null; } public void ResolveOrder(Actor self, Order order) { - if (order.OrderString == "Infiltrate" || order.OrderString == "Capture" || order.OrderString == "Repair") + if (order.OrderString == "Infiltrate" || order.OrderString == "Capture") { self.CancelActivity(); self.QueueActivity(new Move(order.TargetActor, 1)); diff --git a/OpenRA.Mods.RA/EngineerRepair.cs b/OpenRA.Mods.RA/EngineerRepair.cs new file mode 100644 index 0000000000..51bae04d28 --- /dev/null +++ b/OpenRA.Mods.RA/EngineerRepair.cs @@ -0,0 +1,59 @@ +#region Copyright & License Information +/* + * Copyright 2007-2010 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 LICENSE. + */ +#endregion + +using OpenRA.Mods.RA.Activities; +using OpenRA.Traits; +using OpenRA.Traits.Activities; + +namespace OpenRA.Mods.RA +{ + class EngineerRepairInfo : TraitInfo + { + public readonly bool RepairsBridges = true; + } + + class EngineerRepair : IIssueOrder, IResolveOrder, IOrderCursor + { + public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor) + { + if (mi.Button != MouseButton.Right) return null; + if (underCursor == null) return null; + if (!CanRepair(self, underCursor)) return null; + + return new Order("EngineerRepair", self, underCursor); + } + + bool CanRepair(Actor self, Actor a) + { + if (!a.traits.Contains()) return false; + bool bridge = a.traits.Contains() && !self.Info.Traits.Get().RepairsBridges; + + return (bridge || self.Owner.Stances[a.Owner] == Stance.Ally); + } + + public string CursorForOrder(Actor self, Order order) + { + if (order.OrderString != "EngineerRepair") return null; + if (order.TargetActor == null) return null; + + return (order.TargetActor.Health == order.TargetActor.GetMaxHP()) ? "goldwrench-blocked" : "goldwrench"; + } + + public void ResolveOrder(Actor self, Order order) + { + if (order.OrderString == "EngineerRepair" && order.TargetActor.Health < order.TargetActor.GetMaxHP()) + { + self.CancelActivity(); + self.QueueActivity(new Move(order.TargetActor, 1)); + self.QueueActivity(new RepairBuilding(order.TargetActor)); + } + } + } +} diff --git a/OpenRA.Mods.RA/Harvester.cs b/OpenRA.Mods.RA/Harvester.cs index 03681b236c..7aa006478d 100755 --- a/OpenRA.Mods.RA/Harvester.cs +++ b/OpenRA.Mods.RA/Harvester.cs @@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA public object Create(ActorInitializer init) { return new Harvester(init.self, this); } } - public class Harvester : IIssueOrder, IResolveOrder, INotifyDamage, IPips, IRenderModifier, IExplodeModifier, IProvideCursor + public class Harvester : IIssueOrder, IResolveOrder, INotifyDamage, IPips, IRenderModifier, IExplodeModifier, IOrderCursor { Dictionary contents = new Dictionary(); @@ -104,10 +104,10 @@ namespace OpenRA.Mods.RA return null; } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - return (s == "Deliver") ? "enter" : - (s == "Harvest") ? "attackmove" : null; + return (order.OrderString == "Deliver") ? "enter" : + (order.OrderString == "Harvest") ? "attackmove" : null; } public void ResolveOrder(Actor self, Order order) diff --git a/OpenRA.Mods.RA/Helicopter.cs b/OpenRA.Mods.RA/Helicopter.cs index 0e4272cec1..5182ab61cd 100644 --- a/OpenRA.Mods.RA/Helicopter.cs +++ b/OpenRA.Mods.RA/Helicopter.cs @@ -27,7 +27,7 @@ namespace OpenRA.Mods.RA public override object Create( ActorInitializer init ) { return new Helicopter( init ); } } - class Helicopter : Aircraft, ITick, IIssueOrder, IResolveOrder, IProvideCursor + class Helicopter : Aircraft, ITick, IIssueOrder, IResolveOrder, IOrderCursor { public IDisposable reservation; @@ -51,9 +51,9 @@ namespace OpenRA.Mods.RA return null; } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - return (s == "Enter") ? "enter" : null; + return (order.OrderString == "Enter") ? "enter" : null; } public void ResolveOrder(Actor self, Order order) diff --git a/OpenRA.Mods.RA/Minelayer.cs b/OpenRA.Mods.RA/Minelayer.cs index 85767dc596..16838990b4 100644 --- a/OpenRA.Mods.RA/Minelayer.cs +++ b/OpenRA.Mods.RA/Minelayer.cs @@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA public readonly string[] RearmBuildings = { "fix" }; } - class Minelayer : IIssueOrder, IResolveOrder, IProvideCursor + class Minelayer : IIssueOrder, IResolveOrder, IOrderCursor { /* [Sync] when sync can cope with arrays! */ public int2[] minefield = null; [Sync] int2 minefieldStart; @@ -39,9 +39,9 @@ namespace OpenRA.Mods.RA return null; } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - return (s == "BeginMinefield") ? "ability" : null; + return (order.OrderString == "BeginMinefield") ? "ability" : null; } public void ResolveOrder(Actor self, Order order) diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index e8df225b99..9863fcad59 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -209,6 +209,8 @@ + + diff --git a/OpenRA.Mods.RA/Passenger.cs b/OpenRA.Mods.RA/Passenger.cs index 8d91ba6544..d93120cce1 100644 --- a/OpenRA.Mods.RA/Passenger.cs +++ b/OpenRA.Mods.RA/Passenger.cs @@ -19,7 +19,7 @@ namespace OpenRA.Mods.RA public readonly PipType ColorOfCargoPip = PipType.Green; } - class Passenger : IIssueOrder, IResolveOrder, IProvideCursor + class Passenger : IIssueOrder, IResolveOrder, IOrderCursor { public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor) { @@ -41,9 +41,9 @@ namespace OpenRA.Mods.RA //return new Order("EnterTransport", self, underCursor); } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - return (s == "EnterTransport") ? "enter" : null; + return (order.OrderString == "EnterTransport") ? "enter" : null; } public void ResolveOrder(Actor self, Order order) diff --git a/OpenRA.Mods.RA/Plane.cs b/OpenRA.Mods.RA/Plane.cs index 0259d23ff8..305405e84c 100644 --- a/OpenRA.Mods.RA/Plane.cs +++ b/OpenRA.Mods.RA/Plane.cs @@ -20,7 +20,7 @@ namespace OpenRA.Mods.RA public override object Create( ActorInitializer init ) { return new Plane( init ); } } - public class Plane : Aircraft, IIssueOrder, IResolveOrder, IProvideCursor + public class Plane : Aircraft, IIssueOrder, IResolveOrder, IOrderCursor { public IDisposable reservation; @@ -41,9 +41,9 @@ namespace OpenRA.Mods.RA return null; } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - return (s == "Enter") ? "enter" : null; + return (order.OrderString == "Enter") ? "enter" : null; } public void ResolveOrder(Actor self, Order order) diff --git a/OpenRA.Mods.RA/Repairable.cs b/OpenRA.Mods.RA/Repairable.cs index 44e01ff5a0..bf4e634b97 100644 --- a/OpenRA.Mods.RA/Repairable.cs +++ b/OpenRA.Mods.RA/Repairable.cs @@ -17,7 +17,7 @@ namespace OpenRA.Mods.RA { class RepairableInfo : TraitInfo { public readonly string[] RepairBuildings = { "fix" }; } - class Repairable : IIssueOrder, IResolveOrder, IProvideCursor + class Repairable : IIssueOrder, IResolveOrder, IOrderCursor { public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor) { @@ -31,9 +31,9 @@ namespace OpenRA.Mods.RA return null; } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - return (s == "Enter") ? "enter" : null; + return (order.OrderString == "Enter") ? "enter" : null; } public void ResolveOrder(Actor self, Order order) diff --git a/OpenRA.Mods.RA/RepairableNear.cs b/OpenRA.Mods.RA/RepairableNear.cs index 05944ac6f2..b790f39aa4 100644 --- a/OpenRA.Mods.RA/RepairableNear.cs +++ b/OpenRA.Mods.RA/RepairableNear.cs @@ -21,7 +21,7 @@ namespace OpenRA.Mods.RA public readonly string[] Buildings = { "spen", "syrd" }; } - class RepairableNear : IIssueOrder, IResolveOrder, IProvideCursor + class RepairableNear : IIssueOrder, IResolveOrder, IOrderCursor { public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor) { @@ -36,9 +36,9 @@ namespace OpenRA.Mods.RA return null; } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - return (s == "Enter") ? "enter" : null; + return (order.OrderString == "Enter") ? "enter" : null; } public void ResolveOrder(Actor self, Order order) diff --git a/OpenRA.Mods.RA/Spy.cs b/OpenRA.Mods.RA/Spy.cs index 1bfecc396d..01a753c544 100644 --- a/OpenRA.Mods.RA/Spy.cs +++ b/OpenRA.Mods.RA/Spy.cs @@ -16,7 +16,7 @@ namespace OpenRA.Mods.RA { class SpyInfo : TraitInfo { } - class Spy : IIssueOrder, IResolveOrder, IProvideCursor + class Spy : IIssueOrder, IResolveOrder, IOrderCursor { public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor) { @@ -28,9 +28,9 @@ namespace OpenRA.Mods.RA return new Order("Infiltrate", self, underCursor); } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - return (s == "Infiltrate") ? "enter" : null; + return (order.OrderString == "Infiltrate") ? "enter" : null; } public void ResolveOrder(Actor self, Order order) diff --git a/OpenRA.Mods.RA/TransformsOnDeploy.cs b/OpenRA.Mods.RA/TransformsOnDeploy.cs index c915cba7f4..2db20bb49b 100644 --- a/OpenRA.Mods.RA/TransformsOnDeploy.cs +++ b/OpenRA.Mods.RA/TransformsOnDeploy.cs @@ -25,7 +25,7 @@ namespace OpenRA.Mods.RA public readonly string[] NoTransformSounds = null; } - class TransformsOnDeploy : IIssueOrder, IResolveOrder, IProvideCursor + class TransformsOnDeploy : IIssueOrder, IResolveOrder, IOrderCursor { public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor) { @@ -70,17 +70,17 @@ namespace OpenRA.Mods.RA } } - public string CursorForOrderString(string s, Actor a, int2 location) + public string CursorForOrder(Actor self, Order order) { - if (s != "DeployTransform") + if (order.OrderString != "DeployTransform") return null; - var depInfo = a.Info.Traits.Get(); + var depInfo = self.Info.Traits.Get(); var transInfo = Rules.Info[depInfo.TransformsInto]; if (transInfo.Traits.Contains()) { var bi = transInfo.Traits.Get(); - if (!a.World.CanPlaceBuilding(depInfo.TransformsInto, bi, a.Location + new int2(depInfo.Offset[0], depInfo.Offset[1]), a)) + if (!self.World.CanPlaceBuilding(depInfo.TransformsInto, bi, self.Location + new int2(depInfo.Offset[0], depInfo.Offset[1]), self)) return "deploy-blocked"; } return "deploy"; diff --git a/mods/cnc/infantry.yaml b/mods/cnc/infantry.yaml index c98a613a91..88c2ee01f7 100644 --- a/mods/cnc/infantry.yaml +++ b/mods/cnc/infantry.yaml @@ -123,6 +123,7 @@ E6: TakeCover: Passenger: ColorOfCargoPip: Yellow + EngineerRepair: EngineerCapture: EngineerDamage: 9999999 -AutoTarget: diff --git a/mods/ra/infantry.yaml b/mods/ra/infantry.yaml index 2ac4d608bc..dd3f54e6f8 100644 --- a/mods/ra/infantry.yaml +++ b/mods/ra/infantry.yaml @@ -119,6 +119,7 @@ E6: Speed: 4 Passenger: ColorOfCargoPip: Yellow + EngineerRepair: EngineerCapture: TakeCover: -AutoTarget: