(svn r12284) [NoAI] -Add: added AICargoList_v(IsFreight|CargoIncomes) (Morloth) noai
authortruebrain
Tue, 26 Feb 2008 23:47:37 +0000
branchnoai
changeset 9788 e9dbd4ec1784
parent 9787 959f15f96a1c
child 9789 33d3214a2fce
(svn r12284) [NoAI] -Add: added AICargoList_v(IsFreight|CargoIncomes) (Morloth)
bin/ai/regression/regression.nut
bin/ai/regression/regression.txt
projects/openttd_vs80.vcproj
projects/openttd_vs90.vcproj
source.list
src/ai/ai_squirrel.cpp
src/ai/api/ai_cargolist_valuator.cpp
src/ai/api/ai_cargolist_valuator.hpp
src/ai/api/ai_cargolist_valuator.hpp.sq
--- a/bin/ai/regression/regression.nut	Tue Feb 26 23:04:44 2008 +0000
+++ b/bin/ai/regression/regression.nut	Tue Feb 26 23:47:37 2008 +0000
@@ -104,9 +104,16 @@
 	print("");
 	print("--CargoList--");
 	print("  Count():            " + list.Count());
+	list.Valuate(AICargoList_vIsFreight());
+	print("  IsFreight ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
-		print("  Cargo " + i);
-		print("  GetCargoLabel():     " + AICargo.GetCargoLabel(i));
+		print("    " + i + " => " + list.GetValue(i));
+	}
+
+	list.Valuate(AICargoList_vCargoIncomes(100, 100));
+	print("  CargoIncomes(100, 100) ListDump:");
+	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
+		print("    " + i + " => " + list.GetValue(i));
 	}
 }
 
--- a/bin/ai/regression/regression.txt	Tue Feb 26 23:04:44 2008 +0000
+++ b/bin/ai/regression/regression.txt	Tue Feb 26 23:47:37 2008 +0000
@@ -471,28 +471,30 @@
 
 --CargoList--
   Count():            11
-  Cargo 10
-  GetCargoLabel():     VALU
-  Cargo 9
-  GetCargoLabel():     STEL
-  Cargo 8
-  GetCargoLabel():     IORE
-  Cargo 7
-  GetCargoLabel():     WOOD
-  Cargo 6
-  GetCargoLabel():     GRAI
-  Cargo 5
-  GetCargoLabel():     GOOD
-  Cargo 4
-  GetCargoLabel():     LVST
-  Cargo 3
-  GetCargoLabel():     OIL_
-  Cargo 2
-  GetCargoLabel():     MAIL
-  Cargo 1
-  GetCargoLabel():     COAL
-  Cargo 0
-  GetCargoLabel():     PASS
+  IsFreight ListDump:
+    10 => 1
+    9 => 1
+    8 => 1
+    7 => 1
+    6 => 1
+    5 => 1
+    4 => 1
+    3 => 1
+    1 => 1
+    2 => 0
+    0 => 0
+  CargoIncomes(100, 100) ListDump:
+    1 => 45
+    9 => 43
+    8 => 40
+    7 => 40
+    3 => 38
+    2 => 37
+    10 => 31
+    5 => 27
+    6 => 23
+    4 => 16
+    0 => 11
 
 --Company--
   SetCompanyName():     true
--- a/projects/openttd_vs80.vcproj	Tue Feb 26 23:04:44 2008 +0000
+++ b/projects/openttd_vs80.vcproj	Tue Feb 26 23:47:37 2008 +0000
@@ -1952,6 +1952,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\ai\api\ai_cargolist_valuator.hpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\ai\api\ai_company.hpp"
 				>
 			</File>
@@ -2124,6 +2128,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\ai\api\ai_cargolist_valuator.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\ai\api\ai_company.cpp"
 				>
 			</File>
--- a/projects/openttd_vs90.vcproj	Tue Feb 26 23:04:44 2008 +0000
+++ b/projects/openttd_vs90.vcproj	Tue Feb 26 23:47:37 2008 +0000
@@ -1949,6 +1949,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\ai\api\ai_cargolist_valuator.hpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\ai\api\ai_company.hpp"
 				>
 			</File>
@@ -2121,6 +2125,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\ai\api\ai_cargolist_valuator.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\ai\api\ai_company.cpp"
 				>
 			</File>
--- a/source.list	Tue Feb 26 23:04:44 2008 +0000
+++ b/source.list	Tue Feb 26 23:47:37 2008 +0000
@@ -404,6 +404,7 @@
 ai/api/ai_base.hpp
 ai/api/ai_cargo.hpp
 ai/api/ai_cargolist.hpp
+ai/api/ai_cargolist_valuator.hpp
 ai/api/ai_company.hpp
 ai/api/ai_controller.hpp
 ai/api/ai_engine.hpp
@@ -448,6 +449,7 @@
 ai/api/ai_base.cpp
 ai/api/ai_cargo.cpp
 ai/api/ai_cargolist.cpp
+ai/api/ai_cargolist_valuator.cpp
 ai/api/ai_company.cpp
 ai/api/ai_controller.cpp
 ai/api/ai_engine.cpp
--- a/src/ai/ai_squirrel.cpp	Tue Feb 26 23:04:44 2008 +0000
+++ b/src/ai/ai_squirrel.cpp	Tue Feb 26 23:47:37 2008 +0000
@@ -28,6 +28,7 @@
 #include "api/ai_base.hpp.sq"
 #include "api/ai_cargo.hpp.sq"
 #include "api/ai_cargolist.hpp.sq"
+#include "api/ai_cargolist_valuator.hpp.sq"
 #include "api/ai_company.hpp.sq"
 #include "api/ai_controller.hpp.sq"
 #include "api/ai_engine.hpp.sq"
@@ -221,6 +222,8 @@
 	SQAIBase_Register(this->engine);
 	SQAICargo_Register(this->engine);
 	SQAICargoList_Register(this->engine);
+	SQAICargoList_vCargoIncomes_Register(this->engine);
+	SQAICargoList_vIsFreight_Register(this->engine);
 	SQAICompany_Register(this->engine);
 	SQAIController_Register(this->engine);
 	SQAIEngine_Register(this->engine);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ai/api/ai_cargolist_valuator.cpp	Tue Feb 26 23:47:37 2008 +0000
@@ -0,0 +1,12 @@
+#include "ai_cargolist_valuator.hpp"
+#include "ai_cargo.hpp"
+
+int32 AICargoList_vIsFreight::Valuate(int32 cargoID) const
+{
+	return AICargo::IsFreight(cargoID);
+}
+
+int32 AICargoList_vCargoIncomes::Valuate(int32 cargoID) const
+{
+	return AICargo::GetCargoIncome(distance, days_in_transit, cargoID);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ai/api/ai_cargolist_valuator.hpp	Tue Feb 26 23:47:37 2008 +0000
@@ -0,0 +1,51 @@
+/** @file ai_cargolist_valuator.hpp all the valuators for AICargoList */
+
+#ifndef AI_CARGOLIST_VALUATOR_HPP
+#define AI_CARGOLIST_VALUATOR_HPP
+
+#include "ai_abstractlist.hpp"
+
+
+/**
+ * Checks if the given cargo is freight cargo, for all entries in an AICargoList.
+ * @note Resulting items are of the type uint32.
+ * @note Can only operate on a AICargoList.
+ * @ingroup AICargoList.
+ */
+class AICargoList_vIsFreight : public AIAbstractList::Valuator {
+public:
+	static const char *GetClassName() { return "AICargoList_vIsFreight"; }
+
+private:
+	const char *GetListName() const { return "AICargoList"; }
+	int32 Valuate(int32 cargo) const;
+};
+
+/**
+ * Get the income for transporting one unit of cargo over the given distance
+ *  within the specified time.
+ * @note Resulting items are of the type uint32.
+ * @note Can only operate on a AICargoList.
+ * @ingroup AICargoList.
+ */
+class AICargoList_vCargoIncomes : public AIAbstractList::Valuator {
+public:
+	static const char *GetClassName() { return "AICargoList_vCargoIncomes"; }
+
+	/**
+	 * @param distance The distance the cargo travels from begin to end.
+	 * @param days_in_transit Amount of (game)days the cargo is in transit.
+	 */
+	AICargoList_vCargoIncomes(uint32 distance, uint32 days_in_transit) :
+		distance(distance),
+		days_in_transit(days_in_transit)
+	{}
+
+private:
+	uint32 distance, days_in_transit;
+
+	const char *GetListName() const { return "AICargoList"; }
+	int32 Valuate(int32 cargo) const;
+};
+
+#endif // AI_CARGOLIST_VALUATOR_HPP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ai/api/ai_cargolist_valuator.hpp.sq	Tue Feb 26 23:47:37 2008 +0000
@@ -0,0 +1,39 @@
+#include "ai_cargolist_valuator.hpp"
+
+namespace SQConvert {
+	/* Allow AICargoList_vIsFreight to be used as Squirrel parameter */
+	template <> AICargoList_vIsFreight *GetParam(ForceType<AICargoList_vIsFreight *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AICargoList_vIsFreight *)instance; }
+	template <> AICargoList_vIsFreight &GetParam(ForceType<AICargoList_vIsFreight &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICargoList_vIsFreight *)instance; }
+	template <> const AICargoList_vIsFreight *GetParam(ForceType<const AICargoList_vIsFreight *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AICargoList_vIsFreight *)instance; }
+	template <> const AICargoList_vIsFreight &GetParam(ForceType<const AICargoList_vIsFreight &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICargoList_vIsFreight *)instance; }
+	template <> int Return<AICargoList_vIsFreight *>(HSQUIRRELVM vm, AICargoList_vIsFreight *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AICargoList_vIsFreight", res, NULL, DefSQDestructorCallback<AICargoList_vIsFreight>); return 1; }
+}; // namespace SQConvert
+
+void SQAICargoList_vIsFreight_Register(Squirrel *engine) {
+	DefSQClass <AICargoList_vIsFreight> SQAICargoList_vIsFreight("AICargoList_vIsFreight");
+	SQAICargoList_vIsFreight.PreRegister(engine);
+	SQAICargoList_vIsFreight.AddConstructor<void (AICargoList_vIsFreight::*)(), 1>(engine, "x");
+
+	SQAICargoList_vIsFreight.DefSQStaticMethod(engine, &AICargoList_vIsFreight::GetClassName, "GetClassName", 1, "x");
+
+	SQAICargoList_vIsFreight.PostRegister(engine);
+}
+
+namespace SQConvert {
+	/* Allow AICargoList_vCargoIncomes to be used as Squirrel parameter */
+	template <> AICargoList_vCargoIncomes *GetParam(ForceType<AICargoList_vCargoIncomes *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AICargoList_vCargoIncomes *)instance; }
+	template <> AICargoList_vCargoIncomes &GetParam(ForceType<AICargoList_vCargoIncomes &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICargoList_vCargoIncomes *)instance; }
+	template <> const AICargoList_vCargoIncomes *GetParam(ForceType<const AICargoList_vCargoIncomes *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AICargoList_vCargoIncomes *)instance; }
+	template <> const AICargoList_vCargoIncomes &GetParam(ForceType<const AICargoList_vCargoIncomes &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICargoList_vCargoIncomes *)instance; }
+	template <> int Return<AICargoList_vCargoIncomes *>(HSQUIRRELVM vm, AICargoList_vCargoIncomes *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AICargoList_vCargoIncomes", res, NULL, DefSQDestructorCallback<AICargoList_vCargoIncomes>); return 1; }
+}; // namespace SQConvert
+
+void SQAICargoList_vCargoIncomes_Register(Squirrel *engine) {
+	DefSQClass <AICargoList_vCargoIncomes> SQAICargoList_vCargoIncomes("AICargoList_vCargoIncomes");
+	SQAICargoList_vCargoIncomes.PreRegister(engine);
+	SQAICargoList_vCargoIncomes.AddConstructor<void (AICargoList_vCargoIncomes::*)(uint32 dis, uint32 days), 3>(engine, "xii");
+
+	SQAICargoList_vCargoIncomes.DefSQStaticMethod(engine, &AICargoList_vCargoIncomes::GetClassName, "GetClassName", 1, "x");
+
+	SQAICargoList_vCargoIncomes.PostRegister(engine);
+}