From dd501b2a5aae52a981a5ede5fb5be3f2f3bf8e9a Mon Sep 17 00:00:00 2001 From: Ykkrosh Date: Wed, 12 Jan 2011 12:29:00 +0000 Subject: [PATCH] # Add initial basic player AI framework. Support direct access to serializer streams, so serializers can be nested. Make component script "this.template" read-only. Stop globally-subscribed component scripts receiving messages posted to local components, to reduce out-of-sync risks. Move pathfinder data out of entity template directory. Fix GuiInterface deserialization. This was SVN commit r8865. --- .../simulation/components/test-param.js | 6 +- .../special => data}/pathfinder.xml | 0 .../data/mods/public/gui/aiconfig/aiconfig.js | 43 ++ .../mods/public/gui/aiconfig/aiconfig.xml | 59 ++ .../mods/public/gui/gamesetup/gamesetup.js | 48 +- .../mods/public/gui/gamesetup/gamesetup.xml | 8 +- .../data/mods/public/gui/page_aiconfig.xml | 7 + .../public/gui/session/utility_functions.js | 11 + .../maps/scenarios/Combat_demo_(huge).xml | 4 +- .../mods/public/maps/scenarios/Units_demo.xml | 4 +- .../public/simulation/ai/scaredybot/data.json | 5 + .../simulation/ai/scaredybot/scaredybot.js | 32 ++ .../simulation/components/AIInterface.js | 63 +++ .../public/simulation/components/AIProxy.js | 20 + .../simulation/components/GuiInterface.js | 18 +- .../special => data}/pathfinder.xml | 0 .../public/simulation/helpers/InitGame.js | 13 +- .../mods/public/simulation/helpers/Player.js | 4 +- .../mods/public/simulation/helpers/Setup.js | 1 - .../templates/template_entity_full.xml | 15 +- .../templates/template_entity_quasi.xml | 13 +- source/gui/scripting/ScriptFunctions.cpp | 11 +- source/ps/Game.cpp | 23 +- source/ps/Game.h | 12 +- source/ps/GameSetup/GameSetup.cpp | 28 +- source/scriptinterface/ScriptConversions.cpp | 37 +- source/scriptinterface/ScriptInterface.cpp | 137 ++++- source/scriptinterface/ScriptInterface.h | 71 ++- source/scriptinterface/ScriptVal.h | 8 + source/simulation2/Simulation2.cpp | 30 +- source/simulation2/Simulation2.h | 7 +- source/simulation2/TypeList.h | 9 + .../simulation2/components/CCmpAIManager.cpp | 511 ++++++++++++++++++ .../components/CCmpCommandQueue.cpp | 2 +- .../simulation2/components/CCmpPathfinder.cpp | 2 +- .../components/CCmpTemplateManager.cpp | 23 +- .../components/ICmpAIInterface.cpp | 39 ++ .../simulation2/components/ICmpAIInterface.h | 35 ++ .../simulation2/components/ICmpAIManager.cpp | 73 +++ source/simulation2/components/ICmpAIManager.h | 56 ++ source/simulation2/components/ICmpAIProxy.cpp | 39 ++ source/simulation2/components/ICmpAIProxy.h | 35 ++ .../components/ICmpCommandQueue.cpp | 2 +- .../simulation2/components/ICmpCommandQueue.h | 2 +- .../components/ICmpTemplateManager.cpp | 2 +- .../components/ICmpTemplateManager.h | 2 +- .../simulation2/helpers/SimulationCommand.h | 3 +- .../scripting/EngineScriptConversions.cpp | 60 +- .../simulation2/scripting/ScriptComponent.cpp | 31 +- .../simulation2/scripting/ScriptComponent.h | 1 + .../serialization/BinarySerializer.h | 38 +- .../serialization/DebugSerializer.cpp | 5 + .../serialization/DebugSerializer.h | 1 + .../simulation2/serialization/IDeserializer.h | 7 + .../simulation2/serialization/ISerializer.h | 7 + .../serialization/SerializeTemplates.h | 17 +- .../serialization/StdDeserializer.cpp | 7 +- .../serialization/StdDeserializer.h | 4 +- .../serialization/StdSerializer.cpp | 7 +- .../simulation2/serialization/StdSerializer.h | 9 +- .../simulation2/system/ComponentManager.cpp | 52 +- source/simulation2/system/ComponentManager.h | 5 +- source/simulation2/system/ParamNode.cpp | 58 +- source/simulation2/system/ParamNode.h | 32 +- source/simulation2/system/SimContext.cpp | 2 +- source/simulation2/system/SimContext.h | 2 +- .../tests/test_CmpTemplateManager.h | 8 +- .../simulation2/tests/test_ComponentManager.h | 2 +- source/simulation2/tests/test_Simulation2.h | 6 +- .../GameInterface/Handlers/ObjectHandlers.cpp | 14 +- 70 files changed, 1681 insertions(+), 267 deletions(-) rename binaries/data/mods/_test.sim/simulation/{templates/special => data}/pathfinder.xml (100%) create mode 100644 binaries/data/mods/public/gui/aiconfig/aiconfig.js create mode 100644 binaries/data/mods/public/gui/aiconfig/aiconfig.xml create mode 100644 binaries/data/mods/public/gui/page_aiconfig.xml create mode 100644 binaries/data/mods/public/simulation/ai/scaredybot/data.json create mode 100644 binaries/data/mods/public/simulation/ai/scaredybot/scaredybot.js create mode 100644 binaries/data/mods/public/simulation/components/AIInterface.js create mode 100644 binaries/data/mods/public/simulation/components/AIProxy.js rename binaries/data/mods/public/simulation/{templates/special => data}/pathfinder.xml (100%) create mode 100644 source/simulation2/components/CCmpAIManager.cpp create mode 100644 source/simulation2/components/ICmpAIInterface.cpp create mode 100644 source/simulation2/components/ICmpAIInterface.h create mode 100644 source/simulation2/components/ICmpAIManager.cpp create mode 100644 source/simulation2/components/ICmpAIManager.h create mode 100644 source/simulation2/components/ICmpAIProxy.cpp create mode 100644 source/simulation2/components/ICmpAIProxy.h diff --git a/binaries/data/mods/_test.sim/simulation/components/test-param.js b/binaries/data/mods/_test.sim/simulation/components/test-param.js index de3bb1e2ca..ec3e0173ae 100644 --- a/binaries/data/mods/_test.sim/simulation/components/test-param.js +++ b/binaries/data/mods/_test.sim/simulation/components/test-param.js @@ -20,9 +20,9 @@ Engine.RegisterComponentType(IID_Test1, "TestScript1_Init", TestScript1_Init); function TestScript1_readonly() {} TestScript1_readonly.prototype.GetX = function() { - this.template = null; - delete this.template; - try { this.template.x += 1000; } catch(e) { } + try { this.template = null; } catch(e) { } + try { delete this.template; } catch(e) { } + try { this.template.x += 1000; } catch(e) { } try { delete this.template.x; } catch(e) { } try { this.template.y = 2000; } catch(e) { } return +(this.template.x || 1) + +(this.template.y || 2); diff --git a/binaries/data/mods/_test.sim/simulation/templates/special/pathfinder.xml b/binaries/data/mods/_test.sim/simulation/data/pathfinder.xml similarity index 100% rename from binaries/data/mods/_test.sim/simulation/templates/special/pathfinder.xml rename to binaries/data/mods/_test.sim/simulation/data/pathfinder.xml diff --git a/binaries/data/mods/public/gui/aiconfig/aiconfig.js b/binaries/data/mods/public/gui/aiconfig/aiconfig.js new file mode 100644 index 0000000000..a6a063e255 --- /dev/null +++ b/binaries/data/mods/public/gui/aiconfig/aiconfig.js @@ -0,0 +1,43 @@ +var g_AIs; // [ {"id": ..., "data": {"name": ..., "description": ..., ...} }, ... ] +var g_Callback; // for the OK button + +function init(settings) +{ + g_Callback = settings.callback; + + g_AIs = [ + {id: "", data: {name: "None", description: "AI will be disabled for this player."}} + ].concat(settings.ais); + + var aiSelection = getGUIObjectByName("aiSelection"); + aiSelection.list = [ ai.data.name for each (ai in g_AIs) ]; + + var selected = 0; + for (var i = 0; i < g_AIs.length; ++i) + { + if (g_AIs[i].id == settings.id) + { + selected = i; + break; + } + } + aiSelection.selected = selected; +} + +function selectAI(idx) +{ + var id = g_AIs[idx].id; + var name = g_AIs[idx].data.name; + var description = g_AIs[idx].data.description; + + getGUIObjectByName("aiDescription").caption = description; +} + +function returnAI() +{ + var aiSelection = getGUIObjectByName("aiSelection"); + var idx = aiSelection.selected; + var id = g_AIs[idx].id; + var name = g_AIs[idx].data.name; + g_Callback({"id": id, "name": name}); +} diff --git a/binaries/data/mods/public/gui/aiconfig/aiconfig.xml b/binaries/data/mods/public/gui/aiconfig/aiconfig.xml new file mode 100644 index 0000000000..7c54e3fc62 --- /dev/null +++ b/binaries/data/mods/public/gui/aiconfig/aiconfig.xml @@ -0,0 +1,59 @@ + + + + +