(svn r10543) [NoAI] -Add: added AIStationListCargoRating as valuator for a station list noai
authortruelight
Fri, 13 Jul 2007 13:49:39 +0000
branchnoai
changeset 9648 760b7b504e37
parent 9647 c17046b1b8a2
child 9649 bc8c06513f5b
(svn r10543) [NoAI] -Add: added AIStationListCargoRating as valuator for a station list
bin/ai/regression/regression.nut
bin/ai/regression/regression.txt
src/ai/ai_squirrel.cpp
src/ai/api/ai_station.cpp
src/ai/api/ai_station.hpp
src/ai/api/ai_station.hpp.sq
src/ai/api/ai_stationlist_valuator.cpp
src/ai/api/ai_stationlist_valuator.hpp
src/ai/api/ai_stationlist_valuator.hpp.sq
--- 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);
+}