(svn r9445) [NoAI] -Change: changed from sq_createslot to sq_newslot (first is deprecated)
-Add: allow consts to be registered to an SQ class (so we can now tell about enums)
--- a/src/ai/api/ai_order.hpp Sun Mar 25 13:50:19 2007 +0000
+++ b/src/ai/api/ai_order.hpp Sun Mar 25 13:55:31 2007 +0000
@@ -169,6 +169,15 @@
DefSQClass <AIOrder> SQAIOrder("AIOrder");
SQAIOrder.PreRegister(engine);
SQAIOrder.AddConstructor(engine);
+
+ SQAIOrder.DefSQConst(engine, AIOrder::AIOF_NONE, "AIOF_NONE");
+ SQAIOrder.DefSQConst(engine, AIOrder::AIOF_TRANSFER, "AIOF_TRANSFER");
+ SQAIOrder.DefSQConst(engine, AIOrder::AIOF_UNLOAD, "AIOF_UNLOAD");
+ SQAIOrder.DefSQConst(engine, AIOrder::AIOF_FULL_LOAD, "AIOF_FULL_LOAD");
+ SQAIOrder.DefSQConst(engine, AIOrder::AIOF_SERVICE_IF_NEEDED, "AIOF_SERVICE_IF_NEEDED");
+ SQAIOrder.DefSQConst(engine, AIOrder::AIOF_NON_STOP, "AIOF_NON_STOP");
+ SQAIOrder.DefSQConst(engine, AIOrder::AIOF_INVALID, "AIOF_INVALID");
+
SQAIOrder.DefSQFunction(engine, &AIOrder::IsValidVehicleOrder, "IsValidVehicleOrder");
SQAIOrder.DefSQFunction(engine, &AIOrder::AreOrderFlagsValid, "AreOrderFlagsValid");
SQAIOrder.DefSQFunction(engine, &AIOrder::GetNumberOfOrders, "GetNumberOfOrders");
--- a/src/squirrel.cpp Sun Mar 25 13:50:19 2007 +0000
+++ b/src/squirrel.cpp Sun Mar 25 13:55:31 2007 +0000
@@ -52,7 +52,7 @@
sq_newclosure(this->vm, proc, 0);
sq_setparamscheck(this->vm, nparam, OTTD2FS(params));
sq_setnativeclosurename(this->vm, -1, OTTD2FS(method_name));
- sq_createslot(this->vm, -3);
+ sq_newslot(this->vm, -3, SQFalse);
}
void Squirrel::AddMethod(const char *method_name, SQFUNCTION proc)
@@ -60,7 +60,7 @@
sq_pushstring(this->vm, OTTD2FS(method_name), -1);
sq_newclosure(this->vm, proc, 0);
sq_setnativeclosurename(this->vm, -1, OTTD2FS(method_name));
- sq_createslot(this->vm, -3);
+ sq_newslot(this->vm, -3, SQFalse);
}
void Squirrel::AddMethod(const char *method_name, SQFUNCTION proc, void *userdata, int size)
@@ -73,7 +73,14 @@
sq_newclosure(this->vm, proc, 1);
sq_setnativeclosurename(this->vm, -1, OTTD2FS(method_name));
- sq_createslot(this->vm, -3);
+ sq_newslot(this->vm, -3, SQFalse);
+}
+
+void Squirrel::AddConst(const char *var_name, int value)
+{
+ sq_pushstring(this->vm, OTTD2FS(var_name), -1);
+ sq_pushinteger(this->vm, value);
+ sq_newslot(this->vm, -3, SQTrue);
}
void Squirrel::AddClassBegin(const char *class_name)
@@ -85,7 +92,7 @@
void Squirrel::AddClassEnd()
{
- sq_createslot(vm, -3);
+ sq_newslot(vm, -3, SQFalse);
}
bool Squirrel::MethodExists(HSQOBJECT instance, const char *method_name)
--- a/src/squirrel.hpp Sun Mar 25 13:50:19 2007 +0000
+++ b/src/squirrel.hpp Sun Mar 25 13:55:31 2007 +0000
@@ -50,6 +50,12 @@
void AddMethod(const char *method_name, SQFUNCTION proc, void *userdata, int size);
/**
+ * Adds a const to the stack. Depending on the current state this means
+ * either a const to a class or to the global space.
+ */
+ void AddConst(const char *var_name, int value);
+
+ /**
* Adds a class to the global scope. Make sure to call AddClassEnd when you
* are done adding methods.
*/
--- a/src/squirrel_class.hpp Sun Mar 25 13:50:19 2007 +0000
+++ b/src/squirrel_class.hpp Sun Mar 25 13:55:31 2007 +0000
@@ -51,6 +51,12 @@
engine->AddMethod(function_name, SQConvert::DefSQCallback<CL, Func>, &function_proc, sizeof(function_proc));
}
+ template <typename Var>
+ void DefSQConst(Squirrel *engine, Var value, const char *var_name)
+ {
+ engine->AddConst(var_name, value);
+ }
+
void PreRegister(Squirrel *engine)
{
engine->AddClassBegin(this->classname);