# AIBridge Class Reference

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

`#include <ai_bridge.hpp>`

Inheritance diagram for AIBridge:

## Public Types
enum | ErrorMessages { ERR_BRIDGE_BASE = AIError::ERR_CAT_BRIDGE << AIError::ERR_CAT_BIT_SIZE, ERR_BRIDGE_TYPE_UNAVAILABLE, ERR_BRIDGE_CANNOT_END_IN_WATER, ERR_BRIDGE_HEADS_NOT_ON_SAME_HEIGHT }
| All bridge related error messages. More...
## Static Public Member Functions
static const char * | GetClassName ()
static bool | IsValidBridge (BridgeID bridge_id)
| Checks whether the given bridge type is valid.
static bool | IsBridgeTile (TileIndex tile)
| Checks whether the given tile is actually a bridge start or end tile.
static BridgeID | GetBridgeID (TileIndex tile)
| Get the BridgeID of a bridge at a given tile.
static char * | GetName (BridgeID bridge_id)
| Get the name of a bridge.
static int32 | GetMaxSpeed (BridgeID bridge_id)
| Get the maximum speed of a bridge.
static Money | GetPrice (BridgeID bridge_id, uint length)
| Get the new cost of a bridge, excluding the road and/or rail.
static int32 | GetMaxLength (BridgeID bridge_id)
| Get the maximum length of a bridge.
static int32 | GetMinLength (BridgeID bridge_id)
| Get the minimum length of a bridge.
static bool | _BuildBridgeRoad1 ()
| Internal function to help BuildBridge in case of road.
static bool | _BuildBridgeRoad2 ()
| Internal function to help BuildBridge in case of road.
static bool | BuildBridge (AIVehicle::VehicleType vehicle_type, BridgeID bridge_id, TileIndex start, TileIndex end)
| Build a bridge from one tile to the other.
static bool | RemoveBridge (TileIndex tile)
| Removes a bridge, by executing it on either the start or end tile.
static TileIndex | GetOtherBridgeEnd (TileIndex tile)
| Get the tile that is on the other end of a bridge starting at tile.

## Detailed Description

Class that handles all bridge related functions.

Definition at line 22 of file ai_bridge.hpp.

## Member Enumeration Documentation

enum AIBridge::ErrorMessages

All bridge related error messages.

Enumerator:

  ERR_BRIDGE_BASE | Base for bridge related errors.
  ERR_BRIDGE_TYPE_UNAVAILABLE | The bridge you want to build is not available yet, or it is not available for the requested length.
  ERR_BRIDGE_CANNOT_END_IN_WATER | One (or more) of the bridge head(s) ends in water.
  ERR_BRIDGE_HEADS_NOT_ON_SAME_HEIGHT | The bride heads need to be on the same height.

Definition at line 27 of file ai_bridge.hpp.

## Member Function Documentation

bool AIBridge::BuildBridge | ( | AIVehicle::VehicleType | vehicle_type,
|  | BridgeID | bridge_id,
|  | TileIndex | start,
|  | TileIndex | end |
| ) |  |  | `[static]`

Build a bridge from one tile to the other.

As an extra for road, this functions builds two half-pieces of road on each end of the bridge, making it easier for you to connect it to your network.

Parameters:

  | vehicle_type | The vehicle-type of bridge to build.
  | bridge_id | The bridge-type to build.
  | start | Where to start the bridge.
  | end | Where to end the bridge.

Precondition:
  AIMap::IsValidTile(start).
  AIMap::IsValidTile(end).
  'start' and 'end' are in a straight line, i.e. AIMap::GetTileX(start) == AIMap::GetTileX(end) or AIMap::GetTileY(start) == AIMap::GetTileY(end).
  vehicle_type == AIVehicle::VT_ROAD || vehicle_type == AIVehicle::VT_WATER || (vehicle_type == AIVehicle::VT_RAIL && AIRail::IsRailTypeAvailable(AIRail::GetCurrentRailType())).

Exceptions:

  | AIError::ERR_ALREADY_BUILT |
  | AIError::ERR_AREA_NOT_CLEAR |
  | AIError::ERR_LAND_SLOPED_WRONG |
  | AIError::ERR_VEHICLE_IN_THE_WAY |
  | AIBridge::ERR_BRIDGE_TYPE_UNAVAILABLE |
  | AIBridge::ERR_BRIDGE_CANNOT_END_IN_WATER |
  | AIBridge::ERR_BRIDGE_HEADS_NOT_ON_SAME_HEIGHT |

Returns:
  Whether the bridge has been/can be build or not.

Note:
  No matter if the road pieces were build or not, if building the bridge succeeded, this function returns true.

Definition at line 61 of file ai_bridge.cpp.

References CMD_BUILD_BRIDGE, AIObject::DoCommand(), EnforcePrecondition, AIRail::GetCurrentRailType(), AIObject::GetRoadType(), AIRail::IsRailTypeAvailable(), IsValidTile(), RoadTypeToRoadTypes(), AIObject::SetCallbackVariable(), TileX(), TileY(), TRANSPORT_RAIL, TRANSPORT_ROAD, TRANSPORT_WATER, AIVehicle::VT_RAIL, AIVehicle::VT_ROAD, and AIVehicle::VT_WATER.

BridgeID AIBridge::GetBridgeID | ( | TileIndex | tile | ) | `[static]`

Get the BridgeID of a bridge at a given tile.

Parameters:

  | tile | The tile to get the BridgeID from.

Precondition:
  IsBridgeTile(tile).

Returns:
  The BridgeID from the bridge at tile 'tile'.

Definition at line 31 of file ai_bridge.cpp.

References GetBridgeType(), and IsBridgeTile().

int32 AIBridge::GetMaxLength | ( | BridgeID | bridge_id | ) | `[static]`

Get the maximum length of a bridge.

Parameters:

  | bridge_id | The bridge to get the maximum length of.

Precondition:
  IsValidBridge(bridge_id).

Returns:
  The maximum length the bridge has.

Definition at line 150 of file ai_bridge.cpp.

References _settings_game, GameSettings::construction, IsValidBridge(), ConstructionSettings::longbridges, and max().

Referenced by AIBridgeList_Length::AIBridgeList_Length().

int32 AIBridge::GetMaxSpeed | ( | BridgeID | bridge_id | ) | `[static]`

Get the maximum speed of a bridge.

Parameters:

  | bridge_id | The bridge to get the maximum speed of.

Precondition:
  IsValidBridge(bridge_id).

Returns:
  The maximum speed the bridge has.

Note:
  The speed is in OpenTTD's internal speed unit. This is mph / 1.6, which is roughly km/h. To get km/h multiply this number by 1.00584.

Definition at line 136 of file ai_bridge.cpp.

References IsValidBridge().

int32 AIBridge::GetMinLength | ( | BridgeID | bridge_id | ) | `[static]`

Get the minimum length of a bridge.

Parameters:

  | bridge_id | The bridge to get the minimum length of.

Precondition:
  IsValidBridge(bridge_id).

Returns:
  The minimum length the bridge has.

Definition at line 159 of file ai_bridge.cpp.

References IsValidBridge().

Referenced by AIBridgeList_Length::AIBridgeList_Length().

char * AIBridge::GetName | ( | BridgeID | bridge_id | ) | `[static]`

Get the name of a bridge.

Parameters:

  | bridge_id | The bridge to get the name of.

Precondition:
  IsValidBridge(bridge_id).

Returns:
  The name the bridge has.

Definition at line 125 of file ai_bridge.cpp.

References IsValidBridge().

TileIndex AIBridge::GetOtherBridgeEnd | ( | TileIndex | tile | ) | `[static]`

Get the tile that is on the other end of a bridge starting at tile.

Parameters:

  | tile | The tile that is an end of a bridge.

Precondition:
  AIMap::IsValidTile(tile).
  IsBridgeTile(tile).

Returns:
  The TileIndex that is the other end of the bridge.

Definition at line 166 of file ai_bridge.cpp.

References INVALID_TILE, IsBridgeTile(), and IsValidTile().

Money AIBridge::GetPrice | ( | BridgeID | bridge_id,
|  | uint | length |
| ) |  |  | `[static]`

Get the new cost of a bridge, excluding the road and/or rail.

Parameters:

  | bridge_id | The bridge to get the new cost of.
  | length | The length of the bridge.

Precondition:
  IsValidBridge(bridge_id).

Returns:
  The new cost the bridge has.

Definition at line 143 of file ai_bridge.cpp.

References CalcBridgeLenCostFactor(), and IsValidBridge().

bool AIBridge::IsBridgeTile | ( | TileIndex | tile | ) | `[static]`

Checks whether the given tile is actually a bridge start or end tile.

Parameters:

  | tile | The tile to check.

Precondition:
  AIMap::IsValidTile(tile).

Returns:
  True if and only if the tile is the beginning or end of a bridge.

Definition at line 25 of file ai_bridge.cpp.

References IsValidTile().

Referenced by GetBridgeID(), GetOtherBridgeEnd(), and RemoveBridge().

bool AIBridge::IsValidBridge | ( | BridgeID | bridge_id | ) | `[static]`

Checks whether the given bridge type is valid.

Parameters:

  | bridge_id | The bridge to check.

Returns:
  True if and only if the bridge type is valid.

Definition at line 20 of file ai_bridge.cpp.

References _cur_year.

Referenced by AIBridgeList_Length::AIBridgeList_Length(), GetMaxLength(), GetMaxSpeed(), GetMinLength(), GetName(), and GetPrice().

bool AIBridge::RemoveBridge | ( | TileIndex | tile | ) | `[static]`

Removes a bridge, by executing it on either the start or end tile.

Parameters:

  | tile | An end or start tile of the bridge.

Precondition:
  AIMap::IsValidTile(tile).

Exceptions:

  | AIError::ERR_OWNED_BY_ANOTHER_COMPANY |

Returns:
  Whether the bridge has been/can be removed or not.

Definition at line 119 of file ai_bridge.cpp.

References CMD_LANDSCAPE_CLEAR, AIObject::DoCommand(), EnforcePrecondition, and IsBridgeTile().

The documentation for this class was generated from the following files:

- src/ai/api/ai_bridge.hpp
- src/ai/api/ai_bridge.cpp