OpenTTD AI API 20250110-master-g4f33819fc2
Public Types | Static Public Member Functions
AITunnel Class Reference

Class that handles all tunnel related functions. More...

#include <script_tunnel.hpp>

Inheritance diagram for AITunnel:

Public Types

enum  ErrorMessages {
  ERR_TUNNEL_BASE ,
  ERR_TUNNEL_CANNOT_BUILD_ON_WATER ,
  ERR_TUNNEL_START_SITE_UNSUITABLE ,
  ERR_TUNNEL_ANOTHER_TUNNEL_IN_THE_WAY ,
  ERR_TUNNEL_END_SITE_UNSUITABLE
}
 All tunnel related errors. More...
 

Static Public Member Functions

static bool IsTunnelTile (TileIndex tile)
 Check whether the tile is an entrance to a tunnel.
 
static TileIndex GetOtherTunnelEnd (TileIndex tile)
 Get the tile that exits on the other end of a (would be) tunnel starting at tile.
 
static bool BuildTunnel (AIVehicle::VehicleType vehicle_type, TileIndex start)
 Builds a tunnel starting at start.
 
static bool RemoveTunnel (TileIndex tile)
 Remove the tunnel whose entrance is located at tile.
 

Detailed Description

Class that handles all tunnel related functions.

Member Enumeration Documentation

◆ ErrorMessages

All tunnel related errors.

See also
ScriptErrorType
Enumerator
ERR_TUNNEL_BASE 

Base for bridge related errors.

ERR_TUNNEL_CANNOT_BUILD_ON_WATER 

Can't build tunnels on water.

ERR_TUNNEL_START_SITE_UNSUITABLE 

The start tile must slope either North, South, West or East.

ERR_TUNNEL_ANOTHER_TUNNEL_IN_THE_WAY 

Another tunnel is in the way.

ERR_TUNNEL_END_SITE_UNSUITABLE 

Unable to excavate land at the end to create the tunnel's exit.

Member Function Documentation

◆ BuildTunnel()

static bool AITunnel::BuildTunnel ( AIVehicle::VehicleType  vehicle_type,
TileIndex  start 
)
static

Builds a tunnel starting at start.

The direction of the tunnel depends on the slope of the start tile. Tunnels can be created for either rails or roads; use the appropriate AIVehicle::VehicleType. As an extra for road, this functions builds two half-pieces of road on each end of the tunnel, making it easier for you to connect it to your network.

Parameters
startWhere to start the tunnel.
vehicle_typeThe vehicle-type of tunnel to build.
Precondition
AIMap::IsValidTile(start).
(vehicle_type == AIVehicle::VT_ROAD && AIRoad::IsRoadTypeAvailable(AIRoad::GetCurrentRoadType())) || (vehicle_type == AIVehicle::VT_RAIL && AIRail::IsRailTypeAvailable(AIRail::GetCurrentRailType())).
Exceptions
AIError::ERR_AREA_NOT_CLEAR
AITunnel::ERR_TUNNEL_CANNOT_BUILD_ON_WATER
AITunnel::ERR_TUNNEL_START_SITE_UNSUITABLE
AITunnel::ERR_TUNNEL_ANOTHER_TUNNEL_IN_THE_WAY
AITunnel::ERR_TUNNEL_END_SITE_UNSUITABLE
Returns
Whether the tunnel has been/can be build or not.
Note
The slope of a tile can be determined by AITile::GetSlope(TileIndex).
No matter if the road pieces were build or not, if building the tunnel succeeded, this function returns true.

◆ GetOtherTunnelEnd()

static TileIndex AITunnel::GetOtherTunnelEnd ( TileIndex  tile)
static

Get the tile that exits on the other end of a (would be) tunnel starting at tile.

If there is no 'simple' inclined slope at the start tile, this function will return AIMap::TILE_INVALID.

Parameters
tileThe tile that is an entrance to a tunnel or the tile where you may want to build a tunnel.
Precondition
AIMap::IsValidTile(tile).
Returns
The TileIndex that is the other end of the (would be) tunnel, or AIMap::TILE_INVALID if no other end was found (can't build tunnel).
Note
Even if this function returns a valid tile, that is no guarantee that building a tunnel will succeed. Use BuildTunnel in AITestMode to check whether a tunnel can actually be build.

◆ IsTunnelTile()

static bool AITunnel::IsTunnelTile ( TileIndex  tile)
static

Check whether the tile is an entrance to a tunnel.

Parameters
tileThe tile to check.
Precondition
AIMap::IsValidTile(tile).
Returns
True if and only if the tile is the beginning or end of a tunnel.

◆ RemoveTunnel()

static bool AITunnel::RemoveTunnel ( TileIndex  tile)
static

Remove the tunnel whose entrance is located at tile.

Parameters
tileThe tile that is an entrance to a tunnel.
Precondition
AIMap::IsValidTile(tile) && IsTunnelTile(tile).
Exceptions
AIError::ERR_OWNED_BY_ANOTHER_COMPANY
Returns
Whether the tunnel has been/can be removed or not.