changeset 18517:3dc74f255217 draft

(svn r23361) -Codechange: move multiplayer DoCommand callback code so other script users can call their own
author truebrain <truebrain@openttd.org>
date Tue, 29 Nov 2011 23:21:42 +0000
parents 3b52341f7976
children 928151e04253
files src/ai/ai_core.cpp src/ai/ai_instance.cpp src/ai/ai_instance.hpp src/command_func.h src/script/api/script_object.cpp src/script/script_instance.hpp
diffstat 6 files changed, 28 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- 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) {
--- a/src/ai/ai_instance.cpp
+++ b/src/ai/ai_instance.cpp
@@ -227,3 +227,21 @@
 		}
 	}
 }
+
+/**
+ * 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;
+}
--- a/src/ai/ai_instance.hpp
+++ b/src/ai/ai_instance.hpp
@@ -31,6 +31,7 @@
 
 	/* virtual */ void RegisterAPI();
 	/* virtual */ void Died();
+	/* virtual */ CommandCallback *GetDoCommandCallback();
 
 	/**
 	 * Load squirrel scripts to emulate an older API.
--- a/src/command_func.h
+++ b/src/command_func.h
@@ -70,7 +70,7 @@
 
 /*** All command callbacks that exist ***/
 
-/* ai/ai_core.cpp */
+/* ai/ai_instance.cpp */
 CommandCallback CcAI;
 
 /* airport_gui.cpp */
--- a/src/script/api/script_object.cpp
+++ b/src/script/api/script_object.cpp
@@ -243,7 +243,7 @@
 #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()) {
--- a/src/script/script_instance.hpp
+++ b/src/script/script_instance.hpp
@@ -15,6 +15,8 @@
 #include <squirrel.h>
 #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 @@
 	 */
 	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.