summaryrefslogtreecommitdiff
path: root/src/ai/api/ai_tunnel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ai/api/ai_tunnel.cpp')
-rw-r--r--src/ai/api/ai_tunnel.cpp134
1 files changed, 0 insertions, 134 deletions
diff --git a/src/ai/api/ai_tunnel.cpp b/src/ai/api/ai_tunnel.cpp
deleted file mode 100644
index 310a751af..000000000
--- a/src/ai/api/ai_tunnel.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/* $Id$ */
-
-/*
- * This file is part of OpenTTD.
- * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
- * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/** @file ai_tunnel.cpp Implementation of AITunnel. */
-
-#include "../../stdafx.h"
-#include "ai_tunnel.hpp"
-#include "ai_rail.hpp"
-#include "../ai_instance.hpp"
-#include "../../tunnel_map.h"
-#include "../../command_func.h"
-
-/* static */ bool AITunnel::IsTunnelTile(TileIndex tile)
-{
- if (!::IsValidTile(tile)) return false;
- return ::IsTunnelTile(tile);
-}
-
-/* static */ TileIndex AITunnel::GetOtherTunnelEnd(TileIndex tile)
-{
- if (!::IsValidTile(tile)) return INVALID_TILE;
-
- /* If it's a tunnel already, take the easy way out! */
- if (IsTunnelTile(tile)) return ::GetOtherTunnelEnd(tile);
-
- int start_z;
- Slope start_tileh = ::GetTileSlope(tile, &start_z);
- DiagDirection direction = ::GetInclinedSlopeDirection(start_tileh);
- if (direction == INVALID_DIAGDIR) return INVALID_TILE;
-
- TileIndexDiff delta = ::TileOffsByDiagDir(direction);
- int end_z;
- do {
- tile += delta;
- if (!::IsValidTile(tile)) return INVALID_TILE;
-
- ::GetTileSlope(tile, &end_z);
- } while (start_z != end_z);
-
- return tile;
-}
-
-/**
- * Helper function to connect a just built tunnel to nearby roads.
- * @param instance The AI we have to built the road for.
- */
-static void _DoCommandReturnBuildTunnel2(class AIInstance *instance)
-{
- if (!AITunnel::_BuildTunnelRoad2()) {
- AIInstance::DoCommandReturn(instance);
- return;
- }
-
- /* This can never happen, as in test-mode this callback is never executed,
- * and in execute-mode, the other callback is called. */
- NOT_REACHED();
-}
-
-/**
- * Helper function to connect a just built tunnel to nearby roads.
- * @param instance The AI we have to built the road for.
- */
-static void _DoCommandReturnBuildTunnel1(class AIInstance *instance)
-{
- if (!AITunnel::_BuildTunnelRoad1()) {
- AIInstance::DoCommandReturn(instance);
- return;
- }
-
- /* This can never happen, as in test-mode this callback is never executed,
- * and in execute-mode, the other callback is called. */
- NOT_REACHED();
-}
-
-/* static */ bool AITunnel::BuildTunnel(AIVehicle::VehicleType vehicle_type, TileIndex start)
-{
- EnforcePrecondition(false, ::IsValidTile(start));
- EnforcePrecondition(false, vehicle_type == AIVehicle::VT_RAIL || vehicle_type == AIVehicle::VT_ROAD);
- EnforcePrecondition(false, vehicle_type != AIVehicle::VT_RAIL || AIRail::IsRailTypeAvailable(AIRail::GetCurrentRailType()));
-
- uint type = 0;
- if (vehicle_type == AIVehicle::VT_ROAD) {
- type |= (TRANSPORT_ROAD << 8);
- type |= ::RoadTypeToRoadTypes((::RoadType)AIObject::GetRoadType());
- } else {
- type |= (TRANSPORT_RAIL << 8);
- type |= AIRail::GetCurrentRailType();
- }
-
- /* For rail we do nothing special */
- if (vehicle_type == AIVehicle::VT_RAIL) {
- return AIObject::DoCommand(start, type, 0, CMD_BUILD_TUNNEL);
- }
-
- AIObject::SetCallbackVariable(0, start);
- return AIObject::DoCommand(start, type, 0, CMD_BUILD_TUNNEL, NULL, &::_DoCommandReturnBuildTunnel1);
-}
-
-/* static */ bool AITunnel::_BuildTunnelRoad1()
-{
- /* Build the piece of road on the 'start' side of the tunnel */
- TileIndex end = AIObject::GetCallbackVariable(0);
- TileIndex start = AITunnel::GetOtherTunnelEnd(end);
-
- DiagDirection dir_1 = ::DiagdirBetweenTiles(end, start);
- DiagDirection dir_2 = ::ReverseDiagDir(dir_1);
-
- return AIObject::DoCommand(start + ::TileOffsByDiagDir(dir_1), ::DiagDirToRoadBits(dir_2) | (AIObject::GetRoadType() << 4), 0, CMD_BUILD_ROAD, NULL, &::_DoCommandReturnBuildTunnel2);
-}
-
-/* static */ bool AITunnel::_BuildTunnelRoad2()
-{
- /* Build the piece of road on the 'end' side of the tunnel */
- TileIndex end = AIObject::GetCallbackVariable(0);
- TileIndex start = AITunnel::GetOtherTunnelEnd(end);
-
- DiagDirection dir_1 = ::DiagdirBetweenTiles(end, start);
- DiagDirection dir_2 = ::ReverseDiagDir(dir_1);
-
- return AIObject::DoCommand(end + ::TileOffsByDiagDir(dir_2), ::DiagDirToRoadBits(dir_1) | (AIObject::GetRoadType() << 4), 0, CMD_BUILD_ROAD);
-}
-
-/* static */ bool AITunnel::RemoveTunnel(TileIndex tile)
-{
- EnforcePrecondition(false, IsTunnelTile(tile));
-
- return AIObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR);
-}