(svn r10941) [NoAI] -Add: added AITile::GetHeight and AITileList valuator Height
--- 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; }