changeset 11994:d42dfab64f2c draft

(svn r16400) -Add [NoAI]: add AISignList that can be used to get a list of valid signs. This makes AISign::GetMaxSignID obsolete.
author yexo <yexo@openttd.org>
date Sat, 23 May 2009 14:54:55 +0000
parents 540445a84043
children fb8b74f42d88
files bin/ai/regression/regression.nut bin/ai/regression/regression.txt projects/openttd_vs80.vcproj projects/openttd_vs90.vcproj src/ai/ai_instance.cpp src/ai/api/ai_sign.hpp src/ai/api/ai_signlist.cpp src/ai/api/ai_signlist.hpp src/ai/api/ai_signlist.hpp.sq
diffstat 9 files changed, 79 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/bin/ai/regression/regression.nut
+++ b/bin/ai/regression/regression.nut
@@ -1077,9 +1077,10 @@
 	print("  BuildSign(33409, 'Some other Sign'): " + sign_id);
 	print("  RemoveSign(" + sign_id + "):                       " + AISign.RemoveSign(sign_id));
 	print("");
-	print("  GetMaxSignID():    " + AISign.GetMaxSignID());
-	for (local i = -1; i < AISign.GetMaxSignID() + 1; i++) {
-		if (AISign.IsValidSign(i)) j++;
+	local list = AISignList();
+	list.Sort(AIAbstractList.SORT_BY_ITEM, true);
+	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
+		j++;
 		print("  Sign " + i);
 		print("    IsValidSign():   " + AISign.IsValidSign(i));
 		print("    GetName():       " + AISign.GetName(i));
--- a/bin/ai/regression/regression.txt
+++ b/bin/ai/regression/regression.txt
@@ -7242,11 +7242,6 @@
   BuildSign(33409, 'Some other Sign'): 2
   RemoveSign(2):                       true
 
-  GetMaxSignID():    3
-  Sign -1
-    IsValidSign():   false
-    GetName():       (null : 0x00000000)
-    GetLocation():   -1
   Sign 0
     IsValidSign():   true
     GetName():       Some Sign
@@ -7255,14 +7250,6 @@
     IsValidSign():   true
     GetName():       Test2
     GetLocation():   33411
-  Sign 2
-    IsValidSign():   false
-    GetName():       (null : 0x00000000)
-    GetLocation():   -1
-  Sign 3
-    IsValidSign():   false
-    GetName():       (null : 0x00000000)
-    GetLocation():   -1
   Valid Signs:       2
 
 --Station--
--- a/projects/openttd_vs80.vcproj
+++ b/projects/openttd_vs80.vcproj
@@ -2692,6 +2692,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\ai\api\ai_signlist.hpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\ai\api\ai_station.hpp"
 				>
 			</File>
@@ -2896,6 +2900,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\ai\api\ai_signlist.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\ai\api\ai_station.cpp"
 				>
 			</File>
--- a/projects/openttd_vs90.vcproj
+++ b/projects/openttd_vs90.vcproj
@@ -2689,6 +2689,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\ai\api\ai_signlist.hpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\ai\api\ai_station.hpp"
 				>
 			</File>
@@ -2893,6 +2897,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\ai\api\ai_signlist.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\ai\api\ai_station.cpp"
 				>
 			</File>
--- a/src/ai/ai_instance.cpp
+++ b/src/ai/ai_instance.cpp
@@ -60,6 +60,7 @@
 #include "api/ai_railtypelist.hpp.sq"
 #include "api/ai_road.hpp.sq"
 #include "api/ai_sign.hpp.sq"
+#include "api/ai_signlist.hpp.sq"
 #include "api/ai_station.hpp.sq"
 #include "api/ai_stationlist.hpp.sq"
 #include "api/ai_subsidy.hpp.sq"
@@ -212,6 +213,7 @@
 	SQAIRailTypeList_Register(this->engine);
 	SQAIRoad_Register(this->engine);
 	SQAISign_Register(this->engine);
+	SQAISignList_Register(this->engine);
 	SQAIStation_Register(this->engine);
 	SQAIStationList_Register(this->engine);
 	SQAIStationList_Vehicle_Register(this->engine);
--- a/src/ai/api/ai_sign.hpp
+++ b/src/ai/api/ai_sign.hpp
@@ -30,6 +30,7 @@
 
 	/**
 	 * Gets the maximum sign index; there are no valid signs with a higher index.
+	 * @deprecated This function is deprecated and might be removed in future versions of the API. Use AISignList() instead.
 	 * @return The maximum sign index.
 	 * @post Return value is always non-negative.
 	 */
new file mode 100644
--- /dev/null
+++ b/src/ai/api/ai_signlist.cpp
@@ -0,0 +1,15 @@
+/* $Id$ */
+
+/** @file ai_signlist.cpp Implementation of AISignList and friends. */
+
+#include "ai_signlist.hpp"
+#include "ai_sign.hpp"
+#include "../../signs_base.h"
+
+AISignList::AISignList()
+{
+	Sign *s;
+	FOR_ALL_SIGNS(s) {
+		if (AISign::IsValidSign(s->index)) this->AddItem(s->index);
+	}
+}
new file mode 100644
--- /dev/null
+++ b/src/ai/api/ai_signlist.hpp
@@ -0,0 +1,20 @@
+/* $Id$ */
+
+/** @file ai_signlist.hpp List all the signs of your company. */
+
+#ifndef AI_SIGNLIST_HPP
+#define AI_SIGNLIST_HPP
+
+#include "ai_abstractlist.hpp"
+
+/**
+ * Create a list of signs your company has created.
+ * @ingroup AIList
+ */
+class AISignList : public AIAbstractList {
+public:
+	static const char *GetClassName() { return "AISignList"; }
+	AISignList();
+};
+
+#endif /* AI_SIGNLIST_HPP */
new file mode 100644
--- /dev/null
+++ b/src/ai/api/ai_signlist.hpp.sq
@@ -0,0 +1,21 @@
+/* $Id$ */
+/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */
+
+#include "ai_signlist.hpp"
+
+namespace SQConvert {
+	/* Allow AISignList to be used as Squirrel parameter */
+	template <> AISignList *GetParam(ForceType<AISignList *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AISignList *)instance; }
+	template <> AISignList &GetParam(ForceType<AISignList &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AISignList *)instance; }
+	template <> const AISignList *GetParam(ForceType<const AISignList *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AISignList *)instance; }
+	template <> const AISignList &GetParam(ForceType<const AISignList &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AISignList *)instance; }
+	template <> int Return<AISignList *>(HSQUIRRELVM vm, AISignList *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AISignList", res, NULL, DefSQDestructorCallback<AISignList>); return 1; }
+}; // namespace SQConvert
+
+void SQAISignList_Register(Squirrel *engine) {
+	DefSQClass <AISignList> SQAISignList("AISignList");
+	SQAISignList.PreRegister(engine, "AIAbstractList");
+	SQAISignList.AddConstructor<void (AISignList::*)(), 1>(engine, "x");
+
+	SQAISignList.PostRegister(engine);
+}