truelight@9654: /* $Id$ */ truelight@9654: truebrain@9833: /** @file ai_airport.cpp Implementation of AIAirport. */ rubidium@9820: truelight@9654: #include "ai_airport.hpp" rubidium@9866: #include "ai_error.hpp" rubidium@9837: #include "../../openttd.h" truelight@9670: #include "../../variables.h" truelight@9654: #include "../../station_map.h" rubidium@9724: #include "../../player_func.h" rubidium@9724: #include "../../settings_type.h" truelight@9654: truelight@9670: /* static */ bool AIAirport::IsHangarTile(TileIndex tile) truelight@9654: { truebrain@9801: if (!::IsValidTile(tile)) return false; truelight@9654: truelight@9654: return ::IsTileType(tile, MP_STATION) && ::IsHangar(tile); truelight@9654: } truelight@9654: truelight@9670: /* static */ bool AIAirport::IsAirportTile(TileIndex tile) truelight@9654: { truebrain@9801: if (!::IsValidTile(tile)) return false; truelight@9654: truelight@9654: return ::IsTileType(tile, MP_STATION) && ::IsAirport(tile); truelight@9654: } truelight@9654: truebrain@9773: /* static */ bool AIAirport::AirportAvailable(AirportType type) truelight@9654: { truebrain@10194: if (type > AT_HELISTATION) return false; rubidium@9722: return HasBit(::GetValidAirports(), type); truelight@9654: } truelight@9654: truelight@9670: /* static */ int32 AIAirport::GetAirportWidth(AirportType type) truelight@9670: { truebrain@10194: if (type > AT_HELISTATION) return -1; truebrain@9736: return ::GetAirport(type)->size_x; truelight@9670: } truelight@9670: truelight@9670: /* static */ int32 AIAirport::GetAirportHeight(AirportType type) truelight@9670: { truebrain@10194: if (type > AT_HELISTATION) return -1; truebrain@9736: return ::GetAirport(type)->size_y; truelight@9670: } truelight@9670: truelight@9670: /* static */ int32 AIAirport::GetAirportCoverageRadius(AirportType type) truelight@9670: { truebrain@10194: if (type > AT_HELISTATION) return -1; truebrain@9736: return _patches.modified_catchment ? ::GetAirport(type)->catchment : (uint)CA_UNMODIFIED; truelight@9670: } truelight@9670: truebrain@9737: /* static */ bool AIAirport::BuildAirport(TileIndex tile, AirportType type) truelight@9654: { rubidium@9868: EnforcePrecondition(false, ::IsValidTile(tile)); rubidium@9868: EnforcePrecondition(false, type <= AT_HELISTATION); truebrain@9737: return AIObject::DoCommand(tile, type, 0, CMD_BUILD_AIRPORT); truelight@9654: } truelight@9654: truebrain@9737: /* static */ bool AIAirport::RemoveAirport(TileIndex tile) truelight@9654: { rubidium@9868: EnforcePrecondition(false, ::IsValidTile(tile)) rubidium@9868: EnforcePrecondition(false, IsAirportTile(tile) || IsHangarTile(tile)); truebrain@9737: return AIObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR); truelight@9654: } truelight@9654: truebrain@9737: /* static */ TileIndex AIAirport::GetHangarOfAirport(TileIndex tile) truelight@9654: { truebrain@9736: if (!::IsTileType(tile, MP_STATION)) return INVALID_TILE; truelight@9654: truebrain@9736: const Station *st = ::GetStationByTile(tile); truelight@9654: if (st->owner != _current_player) return INVALID_TILE; truelight@9654: truebrain@9736: return ::ToTileIndexDiff(st->Airport()->airport_depots[0]) + st->xy; truelight@9654: }