(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.
--- 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>