(svn r10543) [NoAI] -Add: added AIStationListCargoRating as valuator for a station list
--- a/bin/ai/regression/regression.nut Fri Jul 13 11:04:00 2007 +0000
+++ b/bin/ai/regression/regression.nut Fri Jul 13 13:49:39 2007 +0000
@@ -237,6 +237,11 @@
for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
+ list.Valuate(AIStationListCargoRating(1));
+ print(" CargoRating(1) ListDump:");
+ for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
+ print(" " + i + " => " + list.GetValue(i));
+ }
list = AIStationVehicleList(0);
--- a/bin/ai/regression/regression.txt Fri Jul 13 11:04:00 2007 +0000
+++ b/bin/ai/regression/regression.txt Fri Jul 13 13:49:39 2007 +0000
@@ -1664,6 +1664,9 @@
CargoWaiting(1) ListDump:
1 => 0
0 => 0
+ CargoRating(1) ListDump:
+ 1 => 69
+ 0 => 69
--StationVehicleList--
Count(): 1
--- a/src/ai/ai_squirrel.cpp Fri Jul 13 11:04:00 2007 +0000
+++ b/src/ai/ai_squirrel.cpp Fri Jul 13 13:49:39 2007 +0000
@@ -215,6 +215,7 @@
SQAIRoadRegister(this->engine);
SQAISettingsRegister(this->engine);
SQAISignRegister(this->engine);
+ SQAIStationListCargoRatingRegister(this->engine);
SQAIStationListCargoWaitingRegister(this->engine);
SQAIStationListLocationRegister(this->engine);
SQAIStationListRegister(this->engine);
--- a/src/ai/api/ai_station.cpp Fri Jul 13 11:04:00 2007 +0000
+++ b/src/ai/api/ai_station.cpp Fri Jul 13 13:49:39 2007 +0000
@@ -25,3 +25,11 @@
return ::GetStation(station_id)->goods[cargo_id].cargo.Count();
}
+
+/* static */ int32 AIStation::GetCargoRating(StationID station_id, CargoID cargo_id)
+{
+ if (!AIStation::IsValidStation(station_id)) return -1;
+ if (!AICargo::IsValidCargo(cargo_id)) return -1;
+
+ return ::GetStation(station_id)->goods[cargo_id].rating * 101 >> 8;
+}
--- a/src/ai/api/ai_station.hpp Fri Jul 13 11:04:00 2007 +0000
+++ b/src/ai/api/ai_station.hpp Fri Jul 13 13:49:39 2007 +0000
@@ -41,6 +41,16 @@
* @return the amount of units waiting at the station.
*/
static int32 GetCargoWaiting(StationID station_id, CargoID cargo_id);
+
+ /**
+ * See how high the rating is of a cargo on a station.
+ * @param station_id the station to get the cargo-rating of.
+ * @param cargo_id the cargo to get the cargo-rating of.
+ * @pre IsValidStation(station_id).
+ * @pre IsValidCargo(cargo_id).
+ * @return the rating in percent of the cargo on the station.
+ */
+ static int32 GetCargoRating(StationID station_id, CargoID cargo_id);
};
#endif /* AI_STATION_HPP */
--- a/src/ai/api/ai_station.hpp.sq Fri Jul 13 11:04:00 2007 +0000
+++ b/src/ai/api/ai_station.hpp.sq Fri Jul 13 13:49:39 2007 +0000
@@ -17,6 +17,7 @@
SQAIStation.DefSQStaticMethod(engine, &AIStation::IsValidStation, "IsValidStation", 2, "xi");
SQAIStation.DefSQStaticMethod(engine, &AIStation::GetLocation, "GetLocation", 2, "xi");
SQAIStation.DefSQStaticMethod(engine, &AIStation::GetCargoWaiting, "GetCargoWaiting", 3, "xii");
+ SQAIStation.DefSQStaticMethod(engine, &AIStation::GetCargoRating, "GetCargoRating", 3, "xii");
SQAIStation.PostRegister(engine);
}
--- a/src/ai/api/ai_stationlist_valuator.cpp Fri Jul 13 11:04:00 2007 +0000
+++ b/src/ai/api/ai_stationlist_valuator.cpp Fri Jul 13 13:49:39 2007 +0000
@@ -12,3 +12,8 @@
{
return AIStation::GetCargoWaiting(station, this->cargo_type);
}
+
+int32 AIStationListCargoRating::Valuate(int32 station) const
+{
+ return AIStation::GetCargoRating(station, this->cargo_type);
+}
--- a/src/ai/api/ai_stationlist_valuator.hpp Fri Jul 13 11:04:00 2007 +0000
+++ b/src/ai/api/ai_stationlist_valuator.hpp Fri Jul 13 13:49:39 2007 +0000
@@ -46,4 +46,27 @@
int32 Valuate(int32 station) const;
};
+/**
+ * Get the cargo rating for entries in an AIStationList instance.
+ * @note resulting items are of the type percent
+ * @note the input items are of the type StationID
+ */
+class AIStationListCargoRating : public AIAbstractList::Valuator {
+public:
+ /**
+ * The name of the class, needed by several sub-processes.
+ */
+ static const char *GetClassName() { return "AIStationListCargoRating"; }
+
+ /**
+ * Custom constructor, we want a cargo-type as parameter.
+ */
+ AIStationListCargoRating(CargoID cargo_type) { this->cargo_type = cargo_type; }
+
+private:
+ CargoID cargo_type;
+
+ int32 Valuate(int32 station) const;
+};
+
#endif /* AI_STATIONLIST_VALUATOR_HPP */
--- a/src/ai/api/ai_stationlist_valuator.hpp.sq Fri Jul 13 11:04:00 2007 +0000
+++ b/src/ai/api/ai_stationlist_valuator.hpp.sq Fri Jul 13 13:49:39 2007 +0000
@@ -35,3 +35,21 @@
SQAIStationListCargoWaiting.PostRegister(engine);
}
+
+namespace SQConvert {
+ /* Allow AIStationListCargoRating to be used as Squirrel parameter */
+ template <> AIStationListCargoRating *GetParam(ForceType<AIStationListCargoRating *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIStationListCargoRating *)instance; }
+ template <> AIStationListCargoRating &GetParam(ForceType<AIStationListCargoRating &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationListCargoRating *)instance; }
+ template <> const AIStationListCargoRating *GetParam(ForceType<const AIStationListCargoRating *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIStationListCargoRating *)instance; }
+ template <> const AIStationListCargoRating &GetParam(ForceType<const AIStationListCargoRating &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationListCargoRating *)instance; }
+}; // namespace SQConvert
+
+void SQAIStationListCargoRatingRegister(Squirrel *engine) {
+ DefSQClass <AIStationListCargoRating> SQAIStationListCargoRating("AIStationListCargoRating");
+ SQAIStationListCargoRating.PreRegister(engine);
+ SQAIStationListCargoRating.AddConstructor<void (AIStationListCargoRating::*)(CargoID cargo_type), 2>(engine, "xi");
+
+ SQAIStationListCargoRating.DefSQStaticMethod(engine, &AIStationListCargoRating::GetClassName, "GetClassName", 1, "x");
+
+ SQAIStationListCargoRating.PostRegister(engine);
+}