truelight@9638: /* $Id$ */ truelight@9638: truebrain@9833: /** @file ai_station.cpp Implementation of AIStation. */ truelight@9638: truelight@9638: #include "ai_station.hpp" truelight@9638: #include "ai_cargo.hpp" truebrain@9814: #include "ai_map.hpp" truelight@9670: #include "../../debug.h" truelight@9666: #include "../../station_map.h" truelight@9670: #include "../../variables.h" rubidium@9723: #include "../../strings_func.h" rubidium@9723: #include "../../core/alloc_func.hpp" rubidium@9724: #include "../../player_func.h" rubidium@9724: #include "../../settings_type.h" truelight@9696: #include "table/strings.h" truelight@9638: truelight@9638: /* static */ bool AIStation::IsValidStation(StationID station_id) truelight@9638: { truelight@9638: return ::IsValidStationID(station_id) && ::GetStation(station_id)->owner == _current_player; truelight@9638: } truelight@9638: truelight@9666: /* static */ StationID AIStation::GetStationID(TileIndex tile) truelight@9666: { truelight@9666: if (!::IsTileType(tile, MP_STATION)) return INVALID_STATION; truelight@9666: return ::GetStationIndex(tile); truelight@9666: } truelight@9666: truelight@9696: /* static */ char *AIStation::GetName(StationID station_id) truelight@9696: { truebrain@9736: if (!IsValidStation(station_id)) return NULL; truelight@9696: truelight@9696: static const int len = 64; truelight@9696: char *station_name = MallocT(len); truelight@9696: truebrain@9736: ::SetDParam(0, GetStation(station_id)->index); truebrain@9736: ::GetString(station_name, STR_STATION, &station_name[len - 1]); truelight@9696: return station_name; truelight@9696: } truelight@9696: truelight@9638: /* static */ TileIndex AIStation::GetLocation(StationID station_id) truelight@9638: { truebrain@9736: if (!IsValidStation(station_id)) return INVALID_TILE; truelight@9638: truelight@9638: return ::GetStation(station_id)->xy; truelight@9638: } truelight@9638: truelight@9638: /* static */ int32 AIStation::GetCargoWaiting(StationID station_id, CargoID cargo_id) truelight@9638: { truebrain@9736: if (!IsValidStation(station_id)) return -1; truelight@9638: if (!AICargo::IsValidCargo(cargo_id)) return -1; truelight@9638: truelight@9638: return ::GetStation(station_id)->goods[cargo_id].cargo.Count(); truelight@9638: } truelight@9648: truelight@9648: /* static */ int32 AIStation::GetCargoRating(StationID station_id, CargoID cargo_id) truelight@9648: { truebrain@9736: if (!IsValidStation(station_id)) return -1; truelight@9648: if (!AICargo::IsValidCargo(cargo_id)) return -1; truelight@9648: truelight@9648: return ::GetStation(station_id)->goods[cargo_id].rating * 101 >> 8; truelight@9648: } truelight@9670: truelight@9670: /* static */ int32 AIStation::GetCoverageRadius(AIStation::StationType type) truelight@9670: { truelight@9670: if (type == STATION_AIRPORT) { truelight@9670: DEBUG(ai, 0, "GetCoverageRadius(): coverage radius of airports needs to be requested via AIAirport::GetAirportCoverageRadius(), as it requires AirportType"); truelight@9670: return 0; truelight@9670: } glx@9732: if (!_patches.modified_catchment) return CA_UNMODIFIED; truelight@9670: truelight@9670: switch (type) { truelight@9670: case STATION_TRAIN: return CA_TRAIN; truelight@9670: case STATION_TRUCK_STOP: return CA_TRUCK; truelight@9670: case STATION_BUS_STOP: return CA_BUS; truelight@9670: case STATION_DOCK: return CA_DOCK; truelight@9670: default: return CA_NONE; truelight@9670: } truelight@9670: } truebrain@9814: truebrain@9814: /* static */ int32 AIStation::GetDistanceManhattanToTile(StationID station_id, TileIndex tile) truebrain@9814: { truebrain@9814: return AIMap::DistanceManhattan(tile, GetLocation(station_id)); truebrain@9814: } truebrain@9814: truebrain@9814: /* static */ int32 AIStation::GetDistanceSquareToTile(StationID station_id, TileIndex tile) truebrain@9814: { truebrain@9814: return AIMap::DistanceSquare(tile, GetLocation(station_id)); truebrain@9814: }