(svn r10941) [NoAI] -Add: added AITile::GetHeight and AITileList valuator Height noai
authortruelight
Sun, 19 Aug 2007 14:04:13 +0000
branchnoai
changeset 9700 e442ce398e83
parent 9699 e1b5f29cc6f9
child 9701 d1ac22c62f64
(svn r10941) [NoAI] -Add: added AITile::GetHeight and AITileList valuator Height
bin/ai/regression/regression.nut
bin/ai/regression/regression.txt
src/ai/ai_squirrel.cpp
src/ai/api/ai_tile.cpp
src/ai/api/ai_tile.hpp
src/ai/api/ai_tile.hpp.sq
src/ai/api/ai_tilelist_valuator.cpp
src/ai/api/ai_tilelist_valuator.hpp
src/ai/api/ai_tilelist_valuator.hpp.sq
--- a/bin/ai/regression/regression.nut	Sun Aug 19 13:43:59 2007 +0000
+++ b/bin/ai/regression/regression.nut	Sun Aug 19 14:04:13 2007 +0000
@@ -625,6 +625,14 @@
 	list.AddRectangle(41895 - 256 * 2, 256 * 2 + 41895 + 8);
 	print("  Count():             " + list.Count());
 
+	list.Valuate(AITileListHeight());
+	print("  Height():            done");
+	print("  Count():             " + list.Count());
+	print("  ListDump:");
+	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
+		print("    " + i + " => " + list.GetValue(i));
+	}
+
 	list.Valuate(AITileListSlope());
 	list.KeepValue(0);
 	print("  Slope():             done");
--- a/bin/ai/regression/regression.txt	Sun Aug 19 13:43:59 2007 +0000
+++ b/bin/ai/regression/regression.txt	Sun Aug 19 14:04:13 2007 +0000
@@ -1211,6 +1211,54 @@
 --TileList--
   Count():             0
   Count():             45
+  Height():            done
+  Count():             45
+  ListDump:
+    42411 => 2
+    42410 => 2
+    42409 => 2
+    42408 => 2
+    42407 => 2
+    42154 => 2
+    42153 => 2
+    42152 => 2
+    42151 => 2
+    41898 => 2
+    41897 => 2
+    41896 => 2
+    41895 => 2
+    41642 => 2
+    41641 => 2
+    41640 => 2
+    41639 => 2
+    41386 => 2
+    41385 => 2
+    41384 => 2
+    41383 => 2
+    42415 => 1
+    42414 => 1
+    42413 => 1
+    42412 => 1
+    42159 => 1
+    42158 => 1
+    42157 => 1
+    42156 => 1
+    42155 => 1
+    41903 => 1
+    41902 => 1
+    41901 => 1
+    41900 => 1
+    41899 => 1
+    41647 => 1
+    41646 => 1
+    41645 => 1
+    41644 => 1
+    41643 => 1
+    41391 => 1
+    41390 => 1
+    41389 => 1
+    41388 => 1
+    41387 => 1
   Slope():             done
   KeepValue(0):        done
   Count():             38
--- a/src/ai/ai_squirrel.cpp	Sun Aug 19 13:43:59 2007 +0000
+++ b/src/ai/ai_squirrel.cpp	Sun Aug 19 14:04:13 2007 +0000
@@ -252,6 +252,7 @@
 	SQAITileListCargoAcceptanceRegister(this->engine);
 	SQAITileListDistanceManhattanToTileRegister(this->engine);
 	SQAITileListDistanceSquareToTileRegister(this->engine);
+	SQAITileListHeightRegister(this->engine);
 	SQAITileListNeighbourRoadCountRegister(this->engine);
 	SQAITileListRegister(this->engine);
 	SQAITileListRoadTileRegister(this->engine);
--- a/src/ai/api/ai_tile.cpp	Sun Aug 19 13:43:59 2007 +0000
+++ b/src/ai/api/ai_tile.cpp	Sun Aug 19 14:04:13 2007 +0000
@@ -36,7 +36,15 @@
 	/* Outside of the map */
 	if (tile >= ::MapSize()) return 0;
 
-	return GetTileSlope(tile, NULL);
+	return ::GetTileSlope(tile, NULL);
+}
+
+int32 AITile::GetHeight(TileIndex tile)
+{
+	/* Outside of the map */
+	if (tile >= ::MapSize()) return 0;
+
+	return ::TileHeight(tile);
 }
 
 int32 AITile::GetCargoAcceptance(TileIndex tile, CargoID cargo_type, uint width, uint height, uint rad)
--- a/src/ai/api/ai_tile.hpp	Sun Aug 19 13:43:59 2007 +0000
+++ b/src/ai/api/ai_tile.hpp	Sun Aug 19 14:04:13 2007 +0000
@@ -43,6 +43,14 @@
 	static int32 GetSlope(TileIndex tile);
 
 	/**
+	 * Get the height of the tile.
+	 * @pre tile is always positive and smaller than AIMap::GetMapSize().
+	 * @param tile the tile to check on.
+	 * @return the height of the tile, ranging from 0 to 15.
+	 */
+	static int32 GetHeight(TileIndex tile);
+
+	/**
 	 * Check how much cargo this tile accepts.
 	 *  It creates a radius around the tile and adds up all acceptance of this
 	 *   cargo and returns that value.
--- a/src/ai/api/ai_tile.hpp.sq	Sun Aug 19 13:43:59 2007 +0000
+++ b/src/ai/api/ai_tile.hpp.sq	Sun Aug 19 14:04:13 2007 +0000
@@ -18,6 +18,7 @@
 	SQAITile.DefSQStaticMethod(engine, &AITile::IsBuildable,        "IsBuildable",        2, "xi");
 	SQAITile.DefSQStaticMethod(engine, &AITile::IsWater,            "IsWater",            2, "xi");
 	SQAITile.DefSQStaticMethod(engine, &AITile::GetSlope,           "GetSlope",           2, "xi");
+	SQAITile.DefSQStaticMethod(engine, &AITile::GetHeight,          "GetHeight",          2, "xi");
 	SQAITile.DefSQStaticMethod(engine, &AITile::GetCargoAcceptance, "GetCargoAcceptance", 6, "xiiiii");
 
 	SQAITile.PostRegister(engine);
--- a/src/ai/api/ai_tilelist_valuator.cpp	Sun Aug 19 13:43:59 2007 +0000
+++ b/src/ai/api/ai_tilelist_valuator.cpp	Sun Aug 19 14:04:13 2007 +0000
@@ -36,6 +36,11 @@
 	return AITile::GetSlope(tile);
 }
 
+int32 AITileListHeight::Valuate(int32 tile) const
+{
+	return AITile::GetHeight(tile);
+}
+
 int32 AITileListNeighbourRoadCount::Valuate(int32 tile) const
 {
 	return AIRoad::GetNeighbourRoadCount(tile);
--- a/src/ai/api/ai_tilelist_valuator.hpp	Sun Aug 19 13:43:59 2007 +0000
+++ b/src/ai/api/ai_tilelist_valuator.hpp	Sun Aug 19 14:04:13 2007 +0000
@@ -79,6 +79,22 @@
 };
 
 /**
+ * Check the height of the tiles in an AITileList instance.
+ * @note resulting items are of the type int32 (height, ranging from 0 to 15)
+ * @note the input items are of the type TileIndex
+ */
+class AITileListHeight : public AIAbstractList::Valuator {
+public:
+	/**
+	 * The name of the class, needed by several sub-processes.
+	 */
+	static const char *GetClassName() { return "AITileListHeight"; }
+
+private:
+	int32 Valuate(int32 tile) const;
+};
+
+/**
  * Count for each entry in AITileList the amount of neighbours that contain road.
  *   This is a value between 0 and 4, as it only check horizontal and vertical.
  * @note resulting items are of the type int32 (the amount of neighbour road tiles, value between 0 and 4)
--- a/src/ai/api/ai_tilelist_valuator.hpp.sq	Sun Aug 19 13:43:59 2007 +0000
+++ b/src/ai/api/ai_tilelist_valuator.hpp.sq	Sun Aug 19 14:04:13 2007 +0000
@@ -77,6 +77,25 @@
 }
 
 namespace SQConvert {
+	/* Allow AITileListHeight to be used as Squirrel parameter */
+	template <> AITileListHeight *GetParam(ForceType<AITileListHeight *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileListHeight *)instance; }
+	template <> AITileListHeight &GetParam(ForceType<AITileListHeight &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListHeight *)instance; }
+	template <> const AITileListHeight *GetParam(ForceType<const AITileListHeight *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileListHeight *)instance; }
+	template <> const AITileListHeight &GetParam(ForceType<const AITileListHeight &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListHeight *)instance; }
+	template <> int Return<AITileListHeight *>(HSQUIRRELVM vm, AITileListHeight *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITileListHeight", res, NULL, DefSQDestructorCallback<AITileListHeight>); return 1; }
+}; // namespace SQConvert
+
+void SQAITileListHeightRegister(Squirrel *engine) {
+	DefSQClass <AITileListHeight> SQAITileListHeight("AITileListHeight");
+	SQAITileListHeight.PreRegister(engine);
+	SQAITileListHeight.AddConstructor<void (AITileListHeight::*)(), 1>(engine, "x");
+
+	SQAITileListHeight.DefSQStaticMethod(engine, &AITileListHeight::GetClassName, "GetClassName", 1, "x");
+
+	SQAITileListHeight.PostRegister(engine);
+}
+
+namespace SQConvert {
 	/* Allow AITileListNeighbourRoadCount to be used as Squirrel parameter */
 	template <> AITileListNeighbourRoadCount *GetParam(ForceType<AITileListNeighbourRoadCount *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileListNeighbourRoadCount *)instance; }
 	template <> AITileListNeighbourRoadCount &GetParam(ForceType<AITileListNeighbourRoadCount &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListNeighbourRoadCount *)instance; }