(svn r9445) [NoAI] -Change: changed from sq_createslot to sq_newslot (first is deprecated) noai
authortruelight
Sun, 25 Mar 2007 13:55:31 +0000
branchnoai
changeset 9525 1d6c509b56ee
parent 9524 283d23931bb4
child 9526 a4ad60ba03be
(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)
src/ai/api/ai_order.hpp
src/squirrel.cpp
src/squirrel.hpp
src/squirrel_class.hpp
--- 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);