# HG changeset patch # User truebrain # Date 2011-11-29 23:21:42 # Node ID a734d59183226d1af4accc210f545d133bd1fc66 # Parent b0c2bbd3245069c8fe212b83ce7b45cebdf76c0e (svn r23361) -Codechange: move multiplayer DoCommand callback code so other script users can call their own diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp --- 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 --- 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 --- 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 --- a/src/command_func.h +++ b/src/command_func.h @@ -70,7 +70,7 @@ static inline DoCommandFlag CommandFlags /*** 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 --- a/src/script/api/script_object.cpp +++ b/src/script/api/script_object.cpp @@ -243,7 +243,7 @@ ScriptObject::ActiveInstance::~ActiveIns #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 --- 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.