truebrain@9792: /* $Id$ */ truebrain@9792: truebrain@9833: /** @file ai_bridge.cpp Implementation of AIBridge. */ truebrain@9792: truebrain@9792: #include "ai_bridge.hpp" truebrain@9792: #include "../../bridge.h" truebrain@9793: #include "../../bridge_map.h" truebrain@9792: #include "../../strings_func.h" truebrain@9792: #include "../../core/alloc_func.hpp" truebrain@9792: #include "../../economy_func.h" truebrain@9792: #include "../../settings_type.h" truebrain@9793: #include "../../road_map.h" truebrain@9792: #include "table/strings.h" truebrain@9792: truebrain@9792: /* static */ bool AIBridge::IsValidBridge(BridgeID bridge_id) truebrain@9792: { truebrain@9792: return bridge_id < MAX_BRIDGES; truebrain@9792: } truebrain@9792: truebrain@9793: /* static */ bool AIBridge::IsBridgeTile(TileIndex tile) truebrain@9793: { truebrain@9793: return ::IsBridgeTile(tile); truebrain@9793: } truebrain@9793: truebrain@9793: /* static */ bool AIBridge::BuildBridge(AIVehicle::VehicleType vehicle_type, BridgeID bridge_id, TileIndex start, TileIndex end) truebrain@9793: { rubidium@9868: EnforcePrecondition(false, start != end); rubidium@9868: EnforcePrecondition(false, ::IsValidTile(start) && ::IsValidTile(end)); rubidium@9868: EnforcePrecondition(false, TileX(start) == TileX(end) || TileY(start) == TileY(end)); rubidium@9868: EnforcePrecondition(false, vehicle_type == AIVehicle::VEHICLE_ROAD || vehicle_type == AIVehicle::VEHICLE_RAIL); truebrain@9793: truebrain@9793: uint type = 0; truebrain@9793: if (vehicle_type == AIVehicle::VEHICLE_ROAD) { truebrain@9793: type |= (TRANSPORT_ROAD << 15); truebrain@9793: type |= (ROADTYPES_ROAD << 8); truebrain@9793: } else { truebrain@9793: type |= (TRANSPORT_RAIL << 15); truebrain@9793: type |= (RAILTYPES_RAIL << 8); truebrain@9793: } truebrain@9793: truebrain@9793: return AIObject::DoCommand(end, start, type | bridge_id, CMD_BUILD_BRIDGE); truebrain@9793: } truebrain@9793: truebrain@9793: /* static */ bool AIBridge::RemoveBridge(TileIndex tile) truebrain@9793: { rubidium@9868: EnforcePrecondition(false, IsBridgeTile(tile)); truebrain@9793: return AIObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR); truebrain@9793: } truebrain@9793: truebrain@9792: /* static */ char *AIBridge::GetName(BridgeID bridge_id) truebrain@9792: { truebrain@9792: if (!IsValidBridge(bridge_id)) return NULL; truebrain@9792: truebrain@9792: static const int len = 64; truebrain@9792: char *bridge_name = MallocT(len); truebrain@9792: truebrain@9792: ::GetString(bridge_name, ::GetBridgeSpec(bridge_id)->transport_name[0], &bridge_name[len - 1]); truebrain@9792: return bridge_name; truebrain@9792: } truebrain@9792: truebrain@10194: /* static */ int32 AIBridge::GetMaxSpeed(BridgeID bridge_id) truebrain@9792: { truebrain@10194: if (!IsValidBridge(bridge_id)) return -1; truebrain@9792: truebrain@9792: return ::GetBridgeSpec(bridge_id)->speed; truebrain@9792: } truebrain@9792: rubidium@10196: /* static */ Money AIBridge::GetPrice(BridgeID bridge_id, uint length) truebrain@9792: { truebrain@10194: if (!IsValidBridge(bridge_id)) return -1; truebrain@9792: truebrain@9792: return length * _price.build_bridge * ::GetBridgeSpec(bridge_id)->price >> 8; truebrain@9792: } truebrain@9792: truebrain@10194: /* static */ int32 AIBridge::GetMaxLength(BridgeID bridge_id) truebrain@9792: { truebrain@10194: if (!IsValidBridge(bridge_id)) return -1; truebrain@9792: truebrain@9792: uint max = ::GetBridgeSpec(bridge_id)->max_length; truebrain@9792: if (max >= 16 && _patches.longbridges) max = 100; truebrain@9792: return max + 2; truebrain@9792: } truebrain@9792: truebrain@10194: /* static */ int32 AIBridge::GetMinLength(BridgeID bridge_id) truebrain@9792: { truebrain@10194: if (!IsValidBridge(bridge_id)) return -1; truebrain@9792: truebrain@9792: return ::GetBridgeSpec(bridge_id)->min_length + 2; truebrain@9792: } truebrain@9792: truebrain@9792: /* static */ int32 AIBridge::GetYearAvailable(BridgeID bridge_id) truebrain@9792: { truebrain@10194: if (!IsValidBridge(bridge_id)) return -1; truebrain@9792: truebrain@9792: return ::GetBridgeSpec(bridge_id)->avail_year; truebrain@9792: }