truelight@9638: /* $Id$ */ truelight@9638: truelight@9638: /** @file ai_station.cpp handles the functions of the AIStation class */ truelight@9638: truelight@9638: #include "ai_station.hpp" truelight@9638: #include "ai_cargo.hpp" truelight@9670: #include "../../debug.h" truelight@9638: #include "../../station.h" truelight@9666: #include "../../station_map.h" truelight@9670: #include "../../variables.h" truelight@9696: #include "../../strings.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: { truelight@9696: if (!AIStation::IsValidStation(station_id)) return NULL; truelight@9696: truelight@9696: static const int len = 64; truelight@9696: char *station_name = MallocT(len); truelight@9696: truelight@9696: SetDParam(0, GetStation(station_id)->index); truelight@9696: 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: { truelight@9638: if (!AIStation::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: { truelight@9638: if (!AIStation::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: { truelight@9648: if (!AIStation::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: } truelight@9670: if (!_patches.modified_catchment) return 3; 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: }