From 09b694095c7d96d8e81a6e6d580d55701f9eb3cc Mon Sep 17 00:00:00 2001 From: ScottNZ Date: Fri, 20 Dec 2013 19:05:24 +1300 Subject: [PATCH] Add Map.GetNamedActor for map actor lookup --- OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs | 11 ++++++++++- mods/common/lua/map.lua | 4 ++++ mods/ra/maps/allies-01-classic/mission.lua | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs b/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs index f47ee46e0b..61979cc596 100644 --- a/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs +++ b/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs @@ -10,6 +10,7 @@ using System; using System.Collections; +using System.Collections.Generic; using System.Linq; using NLua; using OpenRA.Effects; @@ -34,6 +35,7 @@ namespace OpenRA.Mods.RA.Scripting public class LuaScriptInterface : IWorldLoaded, ITick { World world; + Dictionary mapActors; readonly LuaScriptContext context = new LuaScriptContext(); readonly LuaScriptInterfaceInfo info; @@ -45,6 +47,7 @@ namespace OpenRA.Mods.RA.Scripting public void WorldLoaded(World w, WorldRenderer wr) { world = w; + mapActors = world.WorldActor.Trait().Actors; context.Lua["World"] = w; context.Lua["WorldRenderer"] = wr; @@ -72,7 +75,7 @@ namespace OpenRA.Mods.RA.Scripting void AddMapActorGlobals() { - foreach (var kv in world.WorldActor.Trait().Actors) + foreach (var kv in mapActors) { if (context.Lua[kv.Key] != null) context.ShowErrorMessage("{0}: The global name '{1}' is reserved and may not be used by map actor {2}".F(GetType().Name, kv.Key, kv.Value), null); @@ -315,5 +318,11 @@ namespace OpenRA.Mods.RA.Scripting { return world.ChooseRandomEdgeCell(); } + + [LuaGlobal] + public Actor GetNamedActor(string actorName) + { + return mapActors[actorName]; + } } } diff --git a/mods/common/lua/map.lua b/mods/common/lua/map.lua index ae53c5fcd2..1b587cf780 100644 --- a/mods/common/lua/map.lua +++ b/mods/common/lua/map.lua @@ -12,6 +12,10 @@ Map.GetRandomEdgeCell = function() return Internal.GetRandomEdgeCell() end +Map.GetNamedActor = function(actorName) + return Internal.GetNamedActor(actorName) +end + CPos.New = function(x, y) return OpenRA.New("CPos", { { x, "Int32" }, { y, "Int32" } }) end diff --git a/mods/ra/maps/allies-01-classic/mission.lua b/mods/ra/maps/allies-01-classic/mission.lua index 86e0198865..2b4aeff727 100644 --- a/mods/ra/maps/allies-01-classic/mission.lua +++ b/mods/ra/maps/allies-01-classic/mission.lua @@ -72,7 +72,7 @@ end SendCruisers = function() for i, cruiser in ipairs(Cruisers) do local ca = Actor.Create(cruiser, { Owner = england, Location = SouthReinforcementsPoint.Location }) - Actor.Move(ca, _G["CruiserPoint" .. i].Location) + Actor.Move(ca, Map.GetNamedActor("CruiserPoint" .. i).Location) end end