From ae8540f5e080adebca3e54c69aa7cd85a87e550b Mon Sep 17 00:00:00 2001 From: truebrain Date: Tue, 29 Nov 2011 23:21:42 +0000 Subject: (svn r23361) -Codechange: move multiplayer DoCommand callback code so other script users can call their own --- src/ai/ai_core.cpp | 13 ------------- src/ai/ai_instance.cpp | 18 ++++++++++++++++++ src/ai/ai_instance.hpp | 1 + src/command_func.h | 2 +- src/script/api/script_object.cpp | 2 +- src/script/script_instance.hpp | 7 +++++++ 6 files changed, 28 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index ddab1efc3..462dac0e6 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -244,19 +244,6 @@ event->Release(); } -/** - * DoCommand callback function for all commands executed by AIs. - * @param result The result of the command. - * @param tile The tile on which the command was executed. - * @param p1 p1 as given to DoCommandPInternal. - * @param p2 p2 as given to DoCommandPInternal. - */ -void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2) -{ - Company::Get(_current_company)->ai_instance->DoCommandCallback(result, tile, p1, p2); - Company::Get(_current_company)->ai_instance->Continue(); -} - /* static */ void AI::Save(CompanyID company) { if (!_networking || _network_server) { diff --git a/src/ai/ai_instance.cpp b/src/ai/ai_instance.cpp index bf6af96f3..940ba4eb3 100644 --- a/src/ai/ai_instance.cpp +++ b/src/ai/ai_instance.cpp @@ -227,3 +227,21 @@ void AIInstance::Died() } } } + +/** + * DoCommand callback function for all commands executed by AIs. + * @param result The result of the command. + * @param tile The tile on which the command was executed. + * @param p1 p1 as given to DoCommandPInternal. + * @param p2 p2 as given to DoCommandPInternal. + */ +void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2) +{ + Company::Get(_current_company)->ai_instance->DoCommandCallback(result, tile, p1, p2); + Company::Get(_current_company)->ai_instance->Continue(); +} + +CommandCallback *AIInstance::GetDoCommandCallback() +{ + return &CcAI; +} diff --git a/src/ai/ai_instance.hpp b/src/ai/ai_instance.hpp index 560155b2c..f0b66997e 100644 --- a/src/ai/ai_instance.hpp +++ b/src/ai/ai_instance.hpp @@ -31,6 +31,7 @@ private: /* virtual */ void RegisterAPI(); /* virtual */ void Died(); + /* virtual */ CommandCallback *GetDoCommandCallback(); /** * Load squirrel scripts to emulate an older API. diff --git a/src/command_func.h b/src/command_func.h index ef7971a0b..a4304de0d 100644 --- a/src/command_func.h +++ b/src/command_func.h @@ -70,7 +70,7 @@ static inline DoCommandFlag CommandFlagsToDCFlags(CommandFlags cmd_flags) /*** All command callbacks that exist ***/ -/* ai/ai_core.cpp */ +/* ai/ai_instance.cpp */ CommandCallback CcAI; /* airport_gui.cpp */ diff --git a/src/script/api/script_object.cpp b/src/script/api/script_object.cpp index 5afe76beb..d5b512152 100644 --- a/src/script/api/script_object.cpp +++ b/src/script/api/script_object.cpp @@ -243,7 +243,7 @@ ScriptObject::ActiveInstance::~ActiveInstance() #endif /* Try to perform the command. */ - CommandCost res = ::DoCommandPInternal(tile, p1, p2, cmd, _networking ? CcAI : NULL, text, false, estimate_only); + CommandCost res = ::DoCommandPInternal(tile, p1, p2, cmd, _networking ? ScriptObject::GetActiveInstance()->GetDoCommandCallback() : NULL, text, false, estimate_only); /* We failed; set the error and bail out */ if (res.Failed()) { diff --git a/src/script/script_instance.hpp b/src/script/script_instance.hpp index 232218912..21edf981a 100644 --- a/src/script/script_instance.hpp +++ b/src/script/script_instance.hpp @@ -15,6 +15,8 @@ #include #include "script_suspend.hpp" +#include "../command_type.h" + /** Runtime information about a script like a pointer to the squirrel vm and the current state. */ class ScriptInstance { public: @@ -155,6 +157,11 @@ protected: */ virtual void Died(); + /** + * Get the callback handling DoCommands in case of networking. + */ + virtual CommandCallback *GetDoCommandCallback() = 0; + private: class ScriptController *controller; ///< The script main class. class ScriptStorage *storage; ///< Some global information for each running script. -- cgit v1.2.3-70-g09d2