Index: binaries/data/mods/public/maps/random/survivalofthefittest_triggers.js =================================================================== --- binaries/data/mods/public/maps/random/survivalofthefittest_triggers.js +++ binaries/data/mods/public/maps/random/survivalofthefittest_triggers.js @@ -137,10 +137,7 @@ Trigger.prototype.SetDisableTemplates = function() { for (let i = 1; i < TriggerHelper.GetNumberOfPlayers(); ++i) - { - let cmpPlayer = QueryPlayerIDInterface(i); - cmpPlayer.SetDisabledTemplates(disabledTemplates(cmpPlayer.GetCiv())); - } + QueryPlayerIDInterface(i).SetDisabledTemplates(disabledTemplates(QueryPlayerIDInterface(i, IID_Identity).GetCiv())); }; /** Index: binaries/data/mods/public/maps/scripts/Regicide.js =================================================================== --- binaries/data/mods/public/maps/scripts/Regicide.js +++ binaries/data/mods/public/maps/scripts/Regicide.js @@ -5,7 +5,7 @@ let playersCivs = []; for (let playerID = 1; playerID < TriggerHelper.GetNumberOfPlayers(); ++playerID) - playersCivs[playerID] = QueryPlayerIDInterface(playerID).GetCiv(); + playersCivs[playerID] = QueryPlayerIDInterface(playerID, IID_Identity).GetCiv(); // Get all hero templates of these civs let heroTemplates = {}; Index: binaries/data/mods/public/simulation/ai/common-api/shared.js =================================================================== --- binaries/data/mods/public/simulation/ai/common-api/shared.js +++ binaries/data/mods/public/simulation/ai/common-api/shared.js @@ -52,7 +52,7 @@ m.SharedScript.prototype.GetTemplate = function(name) { if (this._templates[name] === undefined) - this._templates[name] = Engine.GetTemplate(name) || null; + this._templates[name] = SimEngine.GetTemplate(name) || null; return this._templates[name]; }; Index: source/gui/Scripting/JSInterface_GUIManager.h =================================================================== --- source/gui/Scripting/JSInterface_GUIManager.h +++ source/gui/Scripting/JSInterface_GUIManager.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2020 Wildfire Games. +/* Copyright (C) 2022 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -23,6 +23,7 @@ namespace JSI_GUIManager { void RegisterScriptFunctions(const ScriptRequest& rq); + void RegisterScriptFunctions_GUI(const ScriptRequest& rq); } #endif // INCLUDED_JSI_GUIMANAGER Index: source/gui/Scripting/JSInterface_GUIManager.cpp =================================================================== --- source/gui/Scripting/JSInterface_GUIManager.cpp +++ source/gui/Scripting/JSInterface_GUIManager.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2021 Wildfire Games. +/* Copyright (C) 2022 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -82,10 +82,14 @@ ScriptFunction::Register<&SetCursor>(rq, "SetCursor"); ScriptFunction::Register<&ResetCursor>(rq, "ResetCursor"); ScriptFunction::Register<&TemplateExists>(rq, "TemplateExists"); - ScriptFunction::Register<&GetTemplate>(rq, "GetTemplate"); ScriptFunction::Register<&CGUI::FindObjectByName, &ScriptInterface::ObjectFromCBData>(rq, "GetGUIObjectByName"); ScriptFunction::Register<&CGUI::SetGlobalHotkey, &ScriptInterface::ObjectFromCBData>(rq, "SetGlobalHotkey"); ScriptFunction::Register<&CGUI::UnsetGlobalHotkey, &ScriptInterface::ObjectFromCBData>(rq, "UnsetGlobalHotkey"); } + +void RegisterScriptFunctions_GUI(const ScriptRequest& rq) +{ + ScriptFunction::Register<&GetTemplate>(rq, "GetTemplate"); +} } Index: source/gui/Scripting/ScriptFunctions.cpp =================================================================== --- source/gui/Scripting/ScriptFunctions.cpp +++ source/gui/Scripting/ScriptFunctions.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2021 Wildfire Games. +/* Copyright (C) 2022 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -57,6 +57,7 @@ JSI_Console::RegisterScriptFunctions(rq); JSI_Debug::RegisterScriptFunctions(rq); JSI_GUIManager::RegisterScriptFunctions(rq); + JSI_GUIManager::RegisterScriptFunctions_GUI(rq); JSI_Game::RegisterScriptFunctions(rq); JSI_GameView::RegisterScriptFunctions(rq); JSI_Hotkey::RegisterScriptFunctions(rq); Index: source/simulation2/components/CCmpAIManager.cpp =================================================================== --- source/simulation2/components/CCmpAIManager.cpp +++ source/simulation2/components/CCmpAIManager.cpp @@ -30,7 +30,6 @@ #include "ps/Filesystem.h" #include "ps/Profile.h" #include "ps/scripting/JSInterface_VFS.h" -#include "ps/TemplateLoader.h" #include "ps/Util.h" #include "scriptinterface/FunctionWrapper.h" #include "scriptinterface/ScriptContext.h" @@ -266,7 +265,6 @@ REGISTER_FUNC_NAME(ComputePathScript, "ComputePath"); REGISTER_FUNC_NAME(DumpImage, "DumpImage"); - REGISTER_FUNC_NAME(GetTemplate, "GetTemplate"); #undef REGISTER_FUNC_NAME @@ -350,13 +348,6 @@ waypoints.emplace_back(wp.x, wp.z); } - CParamNode GetTemplate(const std::string& name) - { - if (!m_TemplateLoader.TemplateExists(name)) - return CParamNode(false); - return m_TemplateLoader.GetTemplateFileData(name).GetChild("Entity"); - } - /** * Debug function for AI scripts to dump 2D array data (e.g. terrain tile weights). */ @@ -859,8 +850,6 @@ LongPathfinder m_LongPathfinder; bool m_CommandsComputed; - - CTemplateLoader m_TemplateLoader; }; Index: source/simulation2/components/CCmpTemplateManager.cpp =================================================================== --- source/simulation2/components/CCmpTemplateManager.cpp +++ source/simulation2/components/CCmpTemplateManager.cpp @@ -152,7 +152,10 @@ { const CParamNode& fileData = m_templateLoader.GetTemplateFileData(templateName); if (!fileData.IsOk()) + { + LOGERROR("Invalid file data for template '%s'.", templateName.c_str()); return NULL; + } if (!m_DisableValidation) { Index: source/simulation2/scripting/JSInterface_Simulation.h =================================================================== --- source/simulation2/scripting/JSInterface_Simulation.h +++ source/simulation2/scripting/JSInterface_Simulation.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2020 Wildfire Games. +/* Copyright (C) 2022 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -23,6 +23,7 @@ namespace JSI_Simulation { void RegisterScriptFunctions(const ScriptRequest& rq); + void RegisterScriptFunctions_Simulation(const ScriptRequest& rq); } #endif // INCLUDED_JSI_SIMULATION Index: source/simulation2/scripting/JSInterface_Simulation.cpp =================================================================== --- source/simulation2/scripting/JSInterface_Simulation.cpp +++ source/simulation2/scripting/JSInterface_Simulation.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2021 Wildfire Games. +/* Copyright (C) 2022 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -32,10 +32,12 @@ #include "simulation2/components/ICmpObstruction.h" #include "simulation2/components/ICmpPosition.h" #include "simulation2/components/ICmpSelectable.h" +#include "simulation2/components/ICmpTemplateManager.h" #include "simulation2/helpers/Geometry.h" #include "simulation2/helpers/Selection.h" #include "simulation2/Simulation2.h" #include "simulation2/system/Entity.h" +#include "simulation2/system/ParamNode.h" #include #include @@ -87,6 +89,21 @@ g_Game->GetSimulation2()->DumpDebugState(file); } +CParamNode GetTemplate(const std::string& templateName) +{ + if (!g_Game) + return CParamNode(false); + + CSimulation2* sim = g_Game->GetSimulation2(); + ENSURE(sim); + + CmpPtr cmpTemplateManager(*sim, SYSTEM_ENTITY); + if (!cmpTemplateManager) + return CParamNode(false); + + return *cmpTemplateManager->GetTemplate(templateName); +} + entity_id_t PickEntityAtPoint(int x, int y) { return EntitySelection::PickEntityAtPoint(*g_Game->GetSimulation2(), *g_Game->GetView()->GetCamera(), x, y, g_Game->GetViewedPlayerID(), false); @@ -220,4 +237,9 @@ ScriptFunction::Register<&PickSimilarPlayerEntities>(rq, "PickSimilarPlayerEntities"); ScriptFunction::Register<&SetBoundingBoxDebugOverlay>(rq, "SetBoundingBoxDebugOverlay"); } + +void RegisterScriptFunctions_Simulation(const ScriptRequest& rq) +{ + ScriptFunction::Register<&GetTemplate>(rq, "GetTemplate"); +} } Index: source/simulation2/system/ComponentManager.cpp =================================================================== --- source/simulation2/system/ComponentManager.cpp +++ source/simulation2/system/ComponentManager.cpp @@ -27,6 +27,7 @@ #include "scriptinterface/FunctionWrapper.h" #include "simulation2/components/ICmpTemplateManager.h" #include "simulation2/MessageTypes.h" +#include "simulation2/scripting/JSInterface_Simulation.h" #include "simulation2/system/DynamicSubscription.h" #include "simulation2/system/IComponent.h" #include "simulation2/system/ParamNode.h" @@ -68,6 +69,7 @@ // these functions, so we skip registering them here in those cases if (!skipScriptFunctions) { + JSI_Simulation::RegisterScriptFunctions_Simulation(m_ScriptInterface); JSI_VFS::RegisterScriptFunctions_Simulation(m_ScriptInterface); ScriptRequest rq(m_ScriptInterface); constexpr ScriptFunction::ObjectGetter Getter = &ScriptInterface::ObjectFromCBData;