truebrain@9833: /* $Id$ */ truebrain@9833: truebrain@9833: /** @file ai_tunnel.cpp Implementation of AITunnel. */ truebrain@9794: truebrain@9794: #include "ai_tunnel.hpp" truebrain@9807: #include "ai_map.hpp" truebrain@9794: #include "../../landscape.h" truebrain@9794: #include "../../tunnel_map.h" truebrain@9794: #include "../../road_type.h" truebrain@9807: #include "../../command_func.h" rubidium@10249: #include "../../tunnelbridge.h" truebrain@9794: truebrain@9794: /* static */ bool AITunnel::IsTunnelTile(TileIndex tile) truebrain@9794: { truebrain@9794: return ::IsTunnelTile(tile); truebrain@9794: } truebrain@9794: truebrain@9794: /* static */ TileIndex AITunnel::GetOtherTunnelEnd(TileIndex tile) truebrain@9794: { truebrain@9807: if (!::IsValidTile(tile)) return INVALID_TILE; truebrain@9794: truebrain@9807: /* If it's a tunnel alread, take the easy way out! */ truebrain@9807: if (IsTunnelTile(tile)) return ::GetOtherTunnelEnd(tile); truebrain@9807: truebrain@9807: ::DoCommand(tile, 0, 0, DC_AUTO, CMD_BUILD_TUNNEL); truebrain@9807: return _build_tunnel_endtile == 0 ? tile : _build_tunnel_endtile; truebrain@9794: } truebrain@9794: truebrain@9794: /* static */ bool AITunnel::BuildTunnel(AIVehicle::VehicleType vehicle_type, TileIndex start) truebrain@9794: { rubidium@10088: EnforcePrecondition(false, ::IsValidTile(start)); rubidium@10088: EnforcePrecondition(false, vehicle_type == AIVehicle::VEHICLE_RAIL || vehicle_type == AIVehicle::VEHICLE_ROAD); truebrain@9794: truebrain@9794: uint type = 0; truebrain@9794: if (vehicle_type == AIVehicle::VEHICLE_ROAD) { truebrain@9794: type |= (TRANSPORT_ROAD << 9); truebrain@9794: type |= ROADTYPES_ROAD; truebrain@9794: } else { truebrain@9794: type |= (TRANSPORT_RAIL << 9); truebrain@9794: type |= RAILTYPES_RAIL; truebrain@9794: } truebrain@9794: truebrain@9794: return AIObject::DoCommand(start, type, 0, CMD_BUILD_TUNNEL); truebrain@9794: } truebrain@9794: truebrain@9794: /* static */ bool AITunnel::RemoveTunnel(TileIndex tile) truebrain@9794: { rubidium@10088: EnforcePrecondition(false, IsTunnelTile(tile)); truebrain@9794: truebrain@9794: return AIObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR); truebrain@9794: }