truelight@9617: /* $Id$ */ truelight@9617: truebrain@9833: /** @file ai_tile.cpp Implementation of AITile. */ truelight@9617: truelight@9617: #include "ai_tile.hpp" truebrain@9814: #include "ai_map.hpp" rubidium@9723: #include "../../tile_map.h" rubidium@9723: #include "../../map_func.h" truelight@9617: #include "../../variables.h" rubidium@9837: #include "../../station_func.h" rubidium@9723: #include "../../command_type.h" rubidium@9724: #include "../../settings_type.h" truebrain@9769: #include "../../road_map.h" truelight@9617: truebrain@9737: /* static */ bool AITile::IsBuildable(TileIndex tile) truelight@9617: { truebrain@9801: if (!::IsValidTile(tile)) return false; truelight@9617: truelight@9617: switch (::GetTileType(tile)) { glx@9728: default: return true; truelight@9617: case MP_VOID: truelight@9617: case MP_HOUSE: truelight@9617: case MP_STATION: truelight@9617: case MP_INDUSTRY: truelight@9697: case MP_UNMOVABLE: glx@9728: case MP_WATER: return false; truebrain@9769: truebrain@9769: case MP_ROAD: truebrain@9769: /* Depots aren't considered buildable */ truebrain@9769: if (::GetRoadTileType(tile) == ROAD_TILE_DEPOT) return false; truebrain@9769: return true; truelight@9617: } truelight@9617: } truelight@9617: truebrain@9814: /* static */ bool AITile::IsBuildableRectangle(TileIndex tile, uint width, uint height) truebrain@9814: { truebrain@9814: uint tx, ty; truebrain@9814: truebrain@9814: tx = AIMap::GetTileX(tile); truebrain@9814: ty = AIMap::GetTileY(tile); truebrain@9814: truebrain@9814: for (uint x = tx; x < width + tx; x++) { truebrain@9814: for (uint y = ty; y < height + ty; y++) { truebrain@9814: if (!IsBuildable(AIMap::GetTileIndex(x, y))) return false; truebrain@9814: } truebrain@9814: } truebrain@9814: truebrain@9814: return true; truebrain@9814: } truebrain@9814: truebrain@9737: /* static */ bool AITile::IsWater(TileIndex tile) truelight@9698: { truebrain@9801: if (!::IsValidTile(tile)) return false; truelight@9698: truelight@9698: return ::GetTileType(tile) == MP_WATER; truelight@9698: } truelight@9698: truebrain@9737: /* static */ int32 AITile::GetSlope(TileIndex tile) truelight@9617: { truebrain@9801: if (!::IsValidTile(tile)) return false; truelight@9617: truelight@9700: return ::GetTileSlope(tile, NULL); truelight@9700: } truelight@9700: truebrain@9737: /* static */ int32 AITile::GetHeight(TileIndex tile) truelight@9700: { truebrain@9801: if (!::IsValidTile(tile)) return false; truelight@9700: truelight@9700: return ::TileHeight(tile); truelight@9617: } truelight@9617: truebrain@9737: /* static */ int32 AITile::GetCargoAcceptance(TileIndex tile, CargoID cargo_type, uint width, uint height, uint radius) truelight@9617: { truebrain@9801: if (!::IsValidTile(tile)) return false; truelight@9617: truelight@9617: AcceptedCargo accepts; truebrain@9736: ::GetAcceptanceAroundTiles(accepts, tile, width, height, _patches.modified_catchment ? radius : (uint)CA_UNMODIFIED); truelight@9617: return accepts[cargo_type]; truelight@9617: } truelight@9708: truebrain@9737: /* static */ int32 AITile::GetCargoProduction(TileIndex tile, CargoID cargo_type, uint width, uint height, uint radius) glx@9729: { truebrain@9801: if (!::IsValidTile(tile)) return false; glx@9729: glx@9729: AcceptedCargo produced; truebrain@9736: ::GetProductionAroundTiles(produced, tile, width, height, _patches.modified_catchment ? radius : (uint)CA_UNMODIFIED); glx@9729: return produced[cargo_type]; glx@9729: } glx@9729: truebrain@9834: /* static */ int32 AITile::GetDistanceManhattanToTile(TileIndex tile_from, TileIndex tile_to) truebrain@9834: { truebrain@9834: return AIMap::DistanceManhattan(tile_from, tile_to); truebrain@9834: } truebrain@9834: truebrain@9834: /* static */ int32 AITile::GetDistanceSquareToTile(TileIndex tile_from, TileIndex tile_to) truebrain@9834: { truebrain@9834: return AIMap::DistanceSquare(tile_from, tile_to); truebrain@9834: } truebrain@9834: truebrain@9737: /* static */ bool AITile::RaiseTile(TileIndex tile, int32 slope) truelight@9708: { truebrain@9801: if (!::IsValidTile(tile)) return false; truelight@9708: truebrain@9737: return AIObject::DoCommand(tile, slope, 1, CMD_TERRAFORM_LAND); truelight@9708: } truelight@9708: truebrain@9737: /* static */ bool AITile::LowerTile(TileIndex tile, int32 slope) truelight@9708: { truebrain@9801: if (!::IsValidTile(tile)) return false; truelight@9708: truebrain@9737: return AIObject::DoCommand(tile, slope, 0, CMD_TERRAFORM_LAND); truelight@9708: } truebrain@9814: truebrain@9834: /* static */ bool AITile::DemolishTile(TileIndex t) truebrain@9814: { truebrain@9834: return AIObject::DoCommand(t, 0, 0, CMD_LANDSCAPE_CLEAR); truebrain@9814: }