src/ai/api/ai_tunnel.cpp
author truebrain
Fri, 23 May 2008 08:52:29 +0000
branchnoai
changeset 10674 542470cee8a2
parent 10339 ce6cd68d9eb8
child 10679 fcd493243794
permissions -rw-r--r--
(svn r13218) [NoAI] -Add: added a [S/E/P/W/I] in front of DEBUG messages from AILog, to indicate the level of message (the one that goes to the stdout) (request by Mchl)
9833
89a64246458f (svn r12496) [NoAI] -Documentation: give the .cpp files a nice uniform format too
truebrain
parents: 9807
diff changeset
     1
/* $Id$ */
89a64246458f (svn r12496) [NoAI] -Documentation: give the .cpp files a nice uniform format too
truebrain
parents: 9807
diff changeset
     2
89a64246458f (svn r12496) [NoAI] -Documentation: give the .cpp files a nice uniform format too
truebrain
parents: 9807
diff changeset
     3
/** @file ai_tunnel.cpp Implementation of AITunnel. */
9794
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
     4
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
     5
#include "ai_tunnel.hpp"
9807
5b3be41b3ce6 (svn r12315) [NoAI] -Fix: AITunnel::GetOtherTunnelEnd() now also works to estimate where a non-existing tunnel would end (Morloth / glx)
truebrain
parents: 9794
diff changeset
     6
#include "ai_map.hpp"
10339
ce6cd68d9eb8 (svn r12880) [NoAI] -Add: introduces ai_types.hpp, which has all NNNId like VehicleID. This simplifies the include-mess, and avoids including tons of _type.h for just a single typedef.
truebrain
parents: 10249
diff changeset
     7
#include "../../openttd.h"
9794
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
     8
#include "../../landscape.h"
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
     9
#include "../../tunnel_map.h"
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    10
#include "../../road_type.h"
9807
5b3be41b3ce6 (svn r12315) [NoAI] -Fix: AITunnel::GetOtherTunnelEnd() now also works to estimate where a non-existing tunnel would end (Morloth / glx)
truebrain
parents: 9794
diff changeset
    11
#include "../../command_func.h"
10249
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents: 10088
diff changeset
    12
#include "../../tunnelbridge.h"
9794
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    13
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    14
/* static */ bool AITunnel::IsTunnelTile(TileIndex tile)
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    15
{
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    16
	return ::IsTunnelTile(tile);
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    17
}
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    18
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    19
/* static */ TileIndex AITunnel::GetOtherTunnelEnd(TileIndex tile)
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    20
{
9807
5b3be41b3ce6 (svn r12315) [NoAI] -Fix: AITunnel::GetOtherTunnelEnd() now also works to estimate where a non-existing tunnel would end (Morloth / glx)
truebrain
parents: 9794
diff changeset
    21
	if (!::IsValidTile(tile)) return INVALID_TILE;
9794
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    22
9807
5b3be41b3ce6 (svn r12315) [NoAI] -Fix: AITunnel::GetOtherTunnelEnd() now also works to estimate where a non-existing tunnel would end (Morloth / glx)
truebrain
parents: 9794
diff changeset
    23
	/* If it's a tunnel alread, take the easy way out! */
5b3be41b3ce6 (svn r12315) [NoAI] -Fix: AITunnel::GetOtherTunnelEnd() now also works to estimate where a non-existing tunnel would end (Morloth / glx)
truebrain
parents: 9794
diff changeset
    24
	if (IsTunnelTile(tile)) return ::GetOtherTunnelEnd(tile);
5b3be41b3ce6 (svn r12315) [NoAI] -Fix: AITunnel::GetOtherTunnelEnd() now also works to estimate where a non-existing tunnel would end (Morloth / glx)
truebrain
parents: 9794
diff changeset
    25
5b3be41b3ce6 (svn r12315) [NoAI] -Fix: AITunnel::GetOtherTunnelEnd() now also works to estimate where a non-existing tunnel would end (Morloth / glx)
truebrain
parents: 9794
diff changeset
    26
	::DoCommand(tile, 0, 0, DC_AUTO, CMD_BUILD_TUNNEL);
5b3be41b3ce6 (svn r12315) [NoAI] -Fix: AITunnel::GetOtherTunnelEnd() now also works to estimate where a non-existing tunnel would end (Morloth / glx)
truebrain
parents: 9794
diff changeset
    27
	return _build_tunnel_endtile == 0 ? tile : _build_tunnel_endtile;
9794
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    28
}
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    29
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    30
/* static */ bool AITunnel::BuildTunnel(AIVehicle::VehicleType vehicle_type, TileIndex start)
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    31
{
10088
922c6e6a8d3e (svn r12612) [NoAI] -Add: support for GetLastError for AITunnel. Patch by Morloth.
rubidium
parents: 9833
diff changeset
    32
	EnforcePrecondition(false, ::IsValidTile(start));
922c6e6a8d3e (svn r12612) [NoAI] -Add: support for GetLastError for AITunnel. Patch by Morloth.
rubidium
parents: 9833
diff changeset
    33
	EnforcePrecondition(false, vehicle_type == AIVehicle::VEHICLE_RAIL || vehicle_type == AIVehicle::VEHICLE_ROAD);
9794
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    34
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    35
	uint type = 0;
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    36
	if (vehicle_type == AIVehicle::VEHICLE_ROAD) {
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    37
		type |= (TRANSPORT_ROAD << 9);
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    38
		type |= ROADTYPES_ROAD;
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    39
	} else {
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    40
		type |= (TRANSPORT_RAIL << 9);
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    41
		type |= RAILTYPES_RAIL;
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    42
	}
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    43
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    44
	return AIObject::DoCommand(start, type, 0, CMD_BUILD_TUNNEL);
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    45
}
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    46
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    47
/* static */ bool AITunnel::RemoveTunnel(TileIndex tile)
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    48
{
10088
922c6e6a8d3e (svn r12612) [NoAI] -Add: support for GetLastError for AITunnel. Patch by Morloth.
rubidium
parents: 9833
diff changeset
    49
	EnforcePrecondition(false, IsTunnelTile(tile));
9794
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    50
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    51
	return AIObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR);
5d866d7cb991 (svn r12298) [NoAI] -Add: added AITunnel (Morloth)
truebrain
parents:
diff changeset
    52
}