(svn r9461) [NoAI] -Add: allow to set the amount of params that SQ should expect in the SQ define lines. Script to automated this are coming up next. noai
authortruelight
Sun, 25 Mar 2007 21:52:16 +0000
branchnoai
changeset 9539 7416d0694d3a
parent 9538 dc2378f254a5
child 9540 505fcc067ade
(svn r9461) [NoAI] -Add: allow to set the amount of params that SQ should expect in the SQ define lines. Script to automated this are coming up next.
src/ai/api/ai_accounting.hpp
src/ai/api/ai_vehicle.hpp
src/squirrel.cpp
src/squirrel.hpp
src/squirrel_class.hpp
--- a/src/ai/api/ai_accounting.hpp	Sun Mar 25 21:34:29 2007 +0000
+++ b/src/ai/api/ai_accounting.hpp	Sun Mar 25 21:52:16 2007 +0000
@@ -64,8 +64,8 @@
 
 	SQAIAccounting.DefSQStaticMethod(engine, &AIAccounting::GetClassName, "GetClassName");
 
-	SQAIAccounting.DefSQMethod(engine, &AIAccounting::GetCosts,   "GetCosts");
-	SQAIAccounting.DefSQMethod(engine, &AIAccounting::ResetCosts, "ResetCosts");
+	SQAIAccounting.DefSQMethod(engine, &AIAccounting::GetCosts,   "GetCosts", 1, "x");
+	SQAIAccounting.DefSQMethod(engine, &AIAccounting::ResetCosts, "ResetCosts", 1, "x");
 
 	SQAIAccounting.PostRegister(engine);
 }
--- a/src/ai/api/ai_vehicle.hpp	Sun Mar 25 21:34:29 2007 +0000
+++ b/src/ai/api/ai_vehicle.hpp	Sun Mar 25 21:52:16 2007 +0000
@@ -131,8 +131,8 @@
 	SQAIVehicle.AddConstructor(engine);
 
 	SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetClassName,   "GetClassName");
-	SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::IsValidEngine,  "IsValidEngine");
-	SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::IsValidVehicle, "IsValidVehicle");
+	SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::IsValidEngine,  "IsValidEngine", 2, "xi");
+	SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::IsValidVehicle, "IsValidVehicle", 2, "xi");
 
 	SQAIVehicle.DefSQMethod(engine, &AIVehicle::FindBestRoadVehicle, "FindBestRoadVehicle");
 	SQAIVehicle.DefSQMethod(engine, &AIVehicle::BuildVehicle,        "BuildVehicle");
--- a/src/squirrel.cpp	Sun Mar 25 21:34:29 2007 +0000
+++ b/src/squirrel.cpp	Sun Mar 25 21:52:16 2007 +0000
@@ -47,32 +47,18 @@
 	printf("\n");
 }
 
-void Squirrel::AddMethod(const char *method_name, SQFUNCTION proc, uint nparam, const char *params)
-{
-	sq_pushstring(this->vm, OTTD2FS(method_name), -1);
-	sq_newclosure(this->vm, proc, 0);
-	sq_setparamscheck(this->vm, nparam, OTTD2FS(params));
-	sq_setnativeclosurename(this->vm, -1, OTTD2FS(method_name));
-	sq_newslot(this->vm, -3, SQFalse);
-}
-
-void Squirrel::AddMethod(const char *method_name, SQFUNCTION proc)
-{
-	sq_pushstring(this->vm, OTTD2FS(method_name), -1);
-	sq_newclosure(this->vm, proc, 0);
-	sq_setnativeclosurename(this->vm, -1, OTTD2FS(method_name));
-	sq_newslot(this->vm, -3, SQFalse);
-}
-
-void Squirrel::AddMethod(const char *method_name, SQFUNCTION proc, void *userdata, int size)
+void Squirrel::AddMethod(const char *method_name, SQFUNCTION proc, uint nparam, const char *params, void *userdata, int size)
 {
 	sq_pushstring(this->vm, OTTD2FS(method_name), -1);
 
-	void *ptr;
-	ptr = sq_newuserdata(vm, size);
-	memcpy(ptr, userdata, size);
+	if (size != 0) {
+		void *ptr;
+		ptr = sq_newuserdata(vm, size);
+		memcpy(ptr, userdata, size);
+	}
 
-	sq_newclosure(this->vm, proc, 1);
+	sq_newclosure(this->vm, proc, size != 0 ? 1 : 0);
+	if (nparam != 0) sq_setparamscheck(this->vm, nparam, OTTD2FS(params));
 	sq_setnativeclosurename(this->vm, -1, OTTD2FS(method_name));
 	sq_newslot(this->vm, -3, SQFalse);
 }
--- a/src/squirrel.hpp	Sun Mar 25 21:34:29 2007 +0000
+++ b/src/squirrel.hpp	Sun Mar 25 21:52:16 2007 +0000
@@ -45,9 +45,7 @@
 	 * Adds a function to the stack. Depending on the current state this means
 	 *  either a method or a global function.
 	 */
-	void AddMethod(const char *method_name, SQFUNCTION proc, uint nparam, const char *params);
-	void AddMethod(const char *method_name, SQFUNCTION proc);
-	void AddMethod(const char *method_name, SQFUNCTION proc, void *userdata, int size);
+	void AddMethod(const char *method_name, SQFUNCTION proc, uint nparam = 0, const char *params = NULL, void *userdata = NULL, int size = 0);
 
 	/**
 	 * Adds a const to the stack. Depending on the current state this means
--- a/src/squirrel_class.hpp	Sun Mar 25 21:34:29 2007 +0000
+++ b/src/squirrel_class.hpp	Sun Mar 25 21:52:16 2007 +0000
@@ -48,7 +48,16 @@
 	template <typename Func>
 	void DefSQMethod(Squirrel *engine, Func function_proc, const char *function_name)
 	{
-		engine->AddMethod(function_name, SQConvert::DefSQNonStaticCallback<CL, Func>, &function_proc, sizeof(function_proc));
+		engine->AddMethod(function_name, SQConvert::DefSQNonStaticCallback<CL, Func>, 0, NULL, &function_proc, sizeof(function_proc));
+	}
+
+	/**
+	 * This defines a method inside a class for Squirrel with defined the params.
+	 */
+	template <typename Func>
+	void DefSQMethod(Squirrel *engine, Func function_proc, const char *function_name, int nparam, const char *params)
+	{
+		engine->AddMethod(function_name, SQConvert::DefSQNonStaticCallback<CL, Func>, nparam, params, &function_proc, sizeof(function_proc));
 	}
 
 	/**
@@ -57,7 +66,16 @@
 	template <typename Func>
 	void DefSQStaticMethod(Squirrel *engine, Func function_proc, const char *function_name)
 	{
-		engine->AddMethod(function_name, SQConvert::DefSQStaticCallback<CL, Func>, &function_proc, sizeof(function_proc));
+		engine->AddMethod(function_name, SQConvert::DefSQStaticCallback<CL, Func>, 0, NULL, &function_proc, sizeof(function_proc));
+	}
+
+	/**
+	 * This defines a static method inside a class for Squirrel whit defined the params.
+	 */
+	template <typename Func>
+	void DefSQStaticMethod(Squirrel *engine, Func function_proc, const char *function_name, int nparam, const char *params)
+	{
+		engine->AddMethod(function_name, SQConvert::DefSQStaticCallback<CL, Func>, nparam, params, &function_proc, sizeof(function_proc));
 	}
 
 	template <typename Var>