From 1c8a56d19752f0b98ae57c80b705ecb29b11efe0 Mon Sep 17 00:00:00 2001 From: Oliver Brakmann Date: Sun, 17 Aug 2014 15:47:21 +0200 Subject: [PATCH] Make ScriptContext available in Actor- and PlayerProperty classes Needed to return non-native types to Lua --- OpenRA.Game/Scripting/ScriptActorInterface.cs | 4 ++-- OpenRA.Game/Scripting/ScriptContext.cs | 14 ++++++++++++-- OpenRA.Game/Scripting/ScriptPlayerInterface.cs | 4 ++-- .../Scripting/Properties/ChronosphereProperties.cs | 4 ++-- .../Scripting/Properties/CombatProperties.cs | 5 +++-- .../Scripting/Properties/GeneralProperties.cs | 5 +++-- .../Scripting/Properties/GuardProperties.cs | 4 ++-- .../Scripting/Properties/HealthProperties.cs | 8 ++++---- .../Properties/MissionObjectiveProperties.cs | 4 ++-- .../Scripting/Properties/MobileProperties.cs | 3 ++- .../Scripting/Properties/PlayerProperties.cs | 4 ++-- .../Scripting/Properties/ProductionProperties.cs | 4 ++-- .../Scripting/Properties/ResourceProperties.cs | 4 ++-- .../Scripting/Properties/TransportProperties.cs | 8 ++++---- 14 files changed, 44 insertions(+), 31 deletions(-) diff --git a/OpenRA.Game/Scripting/ScriptActorInterface.cs b/OpenRA.Game/Scripting/ScriptActorInterface.cs index 047f903849..c750850fa8 100644 --- a/OpenRA.Game/Scripting/ScriptActorInterface.cs +++ b/OpenRA.Game/Scripting/ScriptActorInterface.cs @@ -25,10 +25,10 @@ namespace OpenRA.Scripting { this.actor = actor; - var args = new [] { actor }; + var args = new object[] { context, actor }; var objects = context.ActorCommands[actor.Info].Select(cg => { - var groupCtor = cg.GetConstructor(new Type[] { typeof(Actor) }); + var groupCtor = cg.GetConstructor(new Type[] { typeof(ScriptContext), typeof(Actor) }); return groupCtor.Invoke(args); }); diff --git a/OpenRA.Game/Scripting/ScriptContext.cs b/OpenRA.Game/Scripting/ScriptContext.cs index b947f2237f..d737adfb02 100644 --- a/OpenRA.Game/Scripting/ScriptContext.cs +++ b/OpenRA.Game/Scripting/ScriptContext.cs @@ -44,13 +44,23 @@ namespace OpenRA.Scripting public abstract class ScriptActorProperties { protected readonly Actor self; - public ScriptActorProperties(Actor self) { this.self = self; } + protected readonly ScriptContext context; + public ScriptActorProperties(ScriptContext context, Actor self) + { + this.self = self; + this.context = context; + } } public abstract class ScriptPlayerProperties { protected readonly Player player; - public ScriptPlayerProperties(Player player) { this.player = player; } + protected readonly ScriptContext context; + public ScriptPlayerProperties(ScriptContext context, Player player) + { + this.player = player; + this.context = context; + } } // For global-level bindings diff --git a/OpenRA.Game/Scripting/ScriptPlayerInterface.cs b/OpenRA.Game/Scripting/ScriptPlayerInterface.cs index 4cc418ec12..8593b12262 100644 --- a/OpenRA.Game/Scripting/ScriptPlayerInterface.cs +++ b/OpenRA.Game/Scripting/ScriptPlayerInterface.cs @@ -25,10 +25,10 @@ namespace OpenRA.Scripting { this.player = player; - var args = new [] { player }; + var args = new object[] { context, player }; var objects = context.PlayerCommands.Select(cg => { - var groupCtor = cg.GetConstructor(new Type[] { typeof(Player) }); + var groupCtor = cg.GetConstructor(new Type[] { typeof(ScriptContext), typeof(Player) }); return groupCtor.Invoke(args); }); diff --git a/OpenRA.Mods.RA/Scripting/Properties/ChronosphereProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/ChronosphereProperties.cs index f0257dd320..66b46aa92e 100644 --- a/OpenRA.Mods.RA/Scripting/Properties/ChronosphereProperties.cs +++ b/OpenRA.Mods.RA/Scripting/Properties/ChronosphereProperties.cs @@ -17,8 +17,8 @@ namespace OpenRA.Mods.RA.Scripting [ScriptPropertyGroup("Support Powers")] public class ChronsphereProperties : ScriptActorProperties, Requires { - public ChronsphereProperties(Actor self) - : base(self) { } + public ChronsphereProperties(ScriptContext context, Actor self) + : base(context, self) { } [Desc("Chronoshift a group of actors. A duration of 0 will teleport the actors permanently.")] public void Chronoshift(LuaTable unitLocationPairs, int duration = 0, bool killCargo = false) diff --git a/OpenRA.Mods.RA/Scripting/Properties/CombatProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/CombatProperties.cs index 46a678bb88..20b9fad366 100644 --- a/OpenRA.Mods.RA/Scripting/Properties/CombatProperties.cs +++ b/OpenRA.Mods.RA/Scripting/Properties/CombatProperties.cs @@ -17,7 +17,8 @@ namespace OpenRA.Mods.RA.Scripting [ScriptPropertyGroup("Combat")] public class CombatProperties : ScriptActorProperties, Requires, Requires { - public CombatProperties(Actor self) : base(self) { } + public CombatProperties(ScriptContext context, Actor self) + : base(context, self) { } [ScriptActorPropertyActivity] [Desc("Seek out and attack nearby targets.")] @@ -35,4 +36,4 @@ namespace OpenRA.Mods.RA.Scripting self.QueueActivity(new AttackMove.AttackMoveActivity(self, new Move.Move(cell, WRange.FromCells(closeEnough)))); } } -} \ No newline at end of file +} diff --git a/OpenRA.Mods.RA/Scripting/Properties/GeneralProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/GeneralProperties.cs index 0ab242684b..ca49084cc2 100644 --- a/OpenRA.Mods.RA/Scripting/Properties/GeneralProperties.cs +++ b/OpenRA.Mods.RA/Scripting/Properties/GeneralProperties.cs @@ -21,7 +21,8 @@ namespace OpenRA.Mods.RA.Scripting readonly IFacing facing; readonly AutoTarget autotarget; - public GeneralProperties(Actor self) : base(self) + public GeneralProperties(ScriptContext context, Actor self) + : base(context, self) { facing = self.TraitOrDefault(); autotarget = self.TraitOrDefault(); @@ -135,4 +136,4 @@ namespace OpenRA.Mods.RA.Scripting return self.HasScriptProperty(name); } } -} \ No newline at end of file +} diff --git a/OpenRA.Mods.RA/Scripting/Properties/GuardProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/GuardProperties.cs index 30f6c8b6dd..fd1e744b98 100644 --- a/OpenRA.Mods.RA/Scripting/Properties/GuardProperties.cs +++ b/OpenRA.Mods.RA/Scripting/Properties/GuardProperties.cs @@ -17,8 +17,8 @@ namespace OpenRA.Mods.RA.Scripting public class GuardProperties : ScriptActorProperties, Requires, Requires { Guard guard; - public GuardProperties(Actor self) - : base(self) + public GuardProperties(ScriptContext context, Actor self) + : base(context, self) { guard = self.Trait(); } diff --git a/OpenRA.Mods.RA/Scripting/Properties/HealthProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/HealthProperties.cs index 27620af598..fc80b5762e 100644 --- a/OpenRA.Mods.RA/Scripting/Properties/HealthProperties.cs +++ b/OpenRA.Mods.RA/Scripting/Properties/HealthProperties.cs @@ -17,8 +17,8 @@ namespace OpenRA.Mods.RA.Scripting public class HealthProperties : ScriptActorProperties, Requires { Health health; - public HealthProperties(Actor self) - : base(self) + public HealthProperties(ScriptContext context, Actor self) + : base(context, self) { health = self.Trait(); } @@ -41,8 +41,8 @@ namespace OpenRA.Mods.RA.Scripting public class InvulnerableProperties : ScriptActorProperties, Requires { ScriptInvulnerable invulnerable; - public InvulnerableProperties(Actor self) - : base(self) + public InvulnerableProperties(ScriptContext context, Actor self) + : base(context, self) { invulnerable = self.Trait(); } diff --git a/OpenRA.Mods.RA/Scripting/Properties/MissionObjectiveProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/MissionObjectiveProperties.cs index b11a6b6af4..89a14e9b14 100644 --- a/OpenRA.Mods.RA/Scripting/Properties/MissionObjectiveProperties.cs +++ b/OpenRA.Mods.RA/Scripting/Properties/MissionObjectiveProperties.cs @@ -20,8 +20,8 @@ namespace OpenRA.Mods.RA.Scripting { readonly MissionObjectives mo; - public MissionObjectiveProperties(Player player) - : base(player) + public MissionObjectiveProperties(ScriptContext context, Player player) + : base(context, player) { mo = player.PlayerActor.Trait(); } diff --git a/OpenRA.Mods.RA/Scripting/Properties/MobileProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/MobileProperties.cs index fd990dec55..511aad91ff 100644 --- a/OpenRA.Mods.RA/Scripting/Properties/MobileProperties.cs +++ b/OpenRA.Mods.RA/Scripting/Properties/MobileProperties.cs @@ -17,7 +17,8 @@ namespace OpenRA.Mods.RA.Scripting [ScriptPropertyGroup("Movement")] public class MobileProperties : ScriptActorProperties, Requires { - public MobileProperties(Actor self) : base(self) { } + public MobileProperties(ScriptContext context, Actor self) + : base(context, self) { } [ScriptActorPropertyActivity] [Desc("Moves within the cell grid. closeEnough defines an optional range " + diff --git a/OpenRA.Mods.RA/Scripting/Properties/PlayerProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/PlayerProperties.cs index 538b611c1f..707990fbd8 100644 --- a/OpenRA.Mods.RA/Scripting/Properties/PlayerProperties.cs +++ b/OpenRA.Mods.RA/Scripting/Properties/PlayerProperties.cs @@ -18,8 +18,8 @@ namespace OpenRA.Mods.RA.Scripting { readonly Player p; - public PlayerProperties(Player player) - : base(player) + public PlayerProperties(ScriptContext context, Player player) + : base(context, player) { p = player; } diff --git a/OpenRA.Mods.RA/Scripting/Properties/ProductionProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/ProductionProperties.cs index d51c43bdd8..6b8596b6a1 100644 --- a/OpenRA.Mods.RA/Scripting/Properties/ProductionProperties.cs +++ b/OpenRA.Mods.RA/Scripting/Properties/ProductionProperties.cs @@ -20,8 +20,8 @@ namespace OpenRA.Mods.RA.Scripting { readonly Production p; - public ProductionProperties(Actor self) - : base(self) + public ProductionProperties(ScriptContext context, Actor self) + : base(context, self) { p = self.Trait(); } diff --git a/OpenRA.Mods.RA/Scripting/Properties/ResourceProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/ResourceProperties.cs index bfe54bda15..377d0bce17 100644 --- a/OpenRA.Mods.RA/Scripting/Properties/ResourceProperties.cs +++ b/OpenRA.Mods.RA/Scripting/Properties/ResourceProperties.cs @@ -19,8 +19,8 @@ namespace OpenRA.Mods.RA.Scripting { readonly PlayerResources pr; - public ResourceProperties(Player player) - : base(player) + public ResourceProperties(ScriptContext context, Player player) + : base(context, player) { pr = player.PlayerActor.Trait(); } diff --git a/OpenRA.Mods.RA/Scripting/Properties/TransportProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/TransportProperties.cs index 58d87dc5bc..ff826ed717 100644 --- a/OpenRA.Mods.RA/Scripting/Properties/TransportProperties.cs +++ b/OpenRA.Mods.RA/Scripting/Properties/TransportProperties.cs @@ -21,8 +21,8 @@ namespace OpenRA.Mods.RA.Scripting { readonly Cargo cargo; - public TransportProperties(Actor self) - : base(self) + public TransportProperties(ScriptContext context, Actor self) + : base(context, self) { cargo = self.Trait(); } @@ -46,8 +46,8 @@ namespace OpenRA.Mods.RA.Scripting { readonly ParaDrop paradrop; - public ParadropPowers(Actor self) - : base(self) + public ParadropPowers(ScriptContext context, Actor self) + : base(context, self) { paradrop = self.Trait(); }