(svn r12284) [NoAI] -Add: added AICargoList_v(IsFreight|CargoIncomes) (Morloth)
--- 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);
+}