OpenTTD

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- File List
- Globals

Functions | Variables
rail.cpp File Reference

Implementation of rail specific functions. More...

`#include "stdafx.h"`
`#include "station_map.h"`
`#include "tunnelbridge_map.h"`
`#include "date_func.h"`
`#include "company_func.h"`
`#include "company_base.h"`
`#include "engine_base.h"`
`#include "safeguards.h"`

Go to the source code of this file.

## Functions
RailType | GetTileRailType (TileIndex tile)
| Return the rail type of tile, or INVALID_RAILTYPE if this is no rail tile.
bool | HasRailtypeAvail (const CompanyID company, const RailType railtype)
| Finds out if a company has a certain railtype available.
bool | ValParamRailtype (const RailType rail)
| Validate functions for rail building.
RailType | GetBestRailtype (const CompanyID company)
| Returns the "best" railtype a company can build.
RailTypes | AddDateIntroducedRailTypes (RailTypes current, Date date)
| Add the rail types that are to be introduced at the given date.
RailTypes | GetCompanyRailtypes (CompanyID company)
| Get the rail types the given company can build.
RailType | GetRailTypeByLabel (RailTypeLabel label, bool allow_alternate_labels)
| Get the rail type for a given label.

## Variables
const byte | _signal_along_trackdir [TRACKDIR_END]
const byte | _signal_against_trackdir [TRACKDIR_END]
const byte | _signal_on_track []
const TrackdirBits | _exitdir_reaches_trackdirs []
const Trackdir | _next_trackdir [TRACKDIR_END]
const TrackdirBits | _track_crosses_trackdirs [TRACKDIR_END]
const TrackBits | _track_crosses_tracks []
const DiagDirection | _trackdir_to_exitdir [TRACKDIR_END]
const Trackdir | _track_exitdir_to_trackdir [][DIAGDIR_END]
const Trackdir | _track_enterdir_to_trackdir [][DIAGDIR_END]
const Trackdir | _track_direction_to_trackdir [][DIR_END]
const Trackdir | _dir_to_diag_trackdir []
const TrackBits | _corner_to_trackbits []
const TrackdirBits | _uphill_trackdirs []

## Detailed Description

Implementation of rail specific functions.

Definition in file rail.cpp.

## Function Documentation

RailTypes AddDateIntroducedRailTypes | ( | RailTypes | current,
|  | Date | date
| ) |  |

Add the rail types that are to be introduced at the given date.

Parameters

  current | The currently available railtypes.
  date | The date for the introduction comparisons.

Returns
  The rail types that should be available when date introduced rail types are taken into account as well.

Definition at line 225 of file rail.cpp.

References AddDateIntroducedRailTypes(), GetRailTypeInfo(), RailtypeInfo::introduces_railtypes, RailtypeInfo::introduction_date, RailtypeInfo::introduction_required_railtypes, IsInsideMM(), RailtypeInfo::label, MAX_DAY, RAILTYPE_BEGIN, and RAILTYPE_END.

Referenced by AcceptEnginePreview(), AddDateIntroducedRailTypes(), CheckRailIntroduction(), GetCompanyRailtypes(), GetRailTypeDropDownList(), and NewVehicleAvailable().

RailType GetBestRailtype | ( | const CompanyID | company | ) |

Returns the "best" railtype a company can build.

As the AI doesn't know what the BEST one is, we have our own priority list here. When adding new railtypes, modify this function

Parameters

  company | the company "in action"

Returns
  The "best" railtype a company has available

Definition at line 210 of file rail.cpp.

References HasRailtypeAvail(), RAILTYPE_ELECTRIC, RAILTYPE_MAGLEV, RAILTYPE_MONO, and RAILTYPE_RAIL.

Referenced by SetDefaultRailGui().

RailTypes GetCompanyRailtypes | ( | CompanyID | company | ) |

Get the rail types the given company can build.

Parameters

  c | the company to get the rail types for.

Returns
  the rail types.

Definition at line 257 of file rail.cpp.

References _date, _settings_game, AddDateIntroducedRailTypes(), EngineInfo::climates, Engine::company_avail, DAYS_IN_YEAR, GameSettings::game_creation, GetRailTypeInfo(), HasBit(), Engine::intro_date, RailtypeInfo::introduces_railtypes, GameCreationSettings::landscape, RAILTYPE_END, RAILTYPES_NONE, RAILVEH_WAGON, and VEH_TRAIN.

Referenced by AfterLoadGame(), DoStartupNewCompany(), SettingsDisableElrail(), and StartupEngines().

RailType GetRailTypeByLabel | ( | RailTypeLabel | label,
|  | bool | allow_alternate_labels
| ) |  |

Get the rail type for a given label.

Parameters

  label | the railtype label.
  allow_alternate_labels | Search in the alternate label lists as well.

Returns
  the railtype.

Definition at line 285 of file rail.cpp.

References RailtypeInfo::alternate_labels, SmallVector< T, S >::Contains(), GetRailTypeInfo(), INVALID_RAILTYPE, RailtypeInfo::label, RAILTYPE_BEGIN, and RAILTYPE_END.

Referenced by AfterLoadGRFs(), and RailTypeChangeInfo().

bool HasRailtypeAvail | ( | const CompanyID | company,
|  | const RailType | railtype
| ) |  |

Finds out if a company has a certain railtype available.

Parameters

  company | the company in question
  railtype | requested RailType

Returns
  true if company has requested RailType available

Definition at line 188 of file rail.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), and HasBit().

Referenced by GetBestRailtype(), SetDefaultRailGui(), and ValParamRailtype().

bool ValParamRailtype | ( | const RailType | rail | ) |

Validate functions for rail building.

Parameters

  rail | the railtype to check.

Returns
  true if the current company may build the rail.

Definition at line 198 of file rail.cpp.

References _current_company, HasRailtypeAvail(), and RAILTYPE_END.

Referenced by CmdBuildBridge(), CmdBuildRailStation(), CmdBuildSingleRail(), CmdBuildTrainDepot(), CmdBuildTunnel(), CmdConvertRail(), CmdRailTrackHelper(), and ShowBuildRailToolbar().

## Variable Documentation

const TrackBits _corner_to_trackbits[]

Initial value:
{
TRACK_BIT_LEFT, TRACK_BIT_LOWER, TRACK_BIT_RIGHT, TRACK_BIT_UPPER,
}

const Trackdir _dir_to_diag_trackdir[]

Initial value:
{
TRACKDIR_X_NE, TRACKDIR_Y_SE, TRACKDIR_X_SW, TRACKDIR_Y_NW,
}

const TrackdirBits _exitdir_reaches_trackdirs[]

Initial value:
{
TRACKDIR_BIT_X_NE | TRACKDIR_BIT_LOWER_E | TRACKDIR_BIT_LEFT_N,
TRACKDIR_BIT_Y_SE | TRACKDIR_BIT_LEFT_S | TRACKDIR_BIT_UPPER_E,
TRACKDIR_BIT_X_SW | TRACKDIR_BIT_UPPER_W | TRACKDIR_BIT_RIGHT_S,
TRACKDIR_BIT_Y_NW | TRACKDIR_BIT_RIGHT_N | TRACKDIR_BIT_LOWER_W
}

const Trackdir _next_trackdir[TRACKDIR_END]

Initial value:
{
TRACKDIR_X_NE, TRACKDIR_Y_SE, TRACKDIR_LOWER_E, TRACKDIR_UPPER_E, TRACKDIR_RIGHT_S, TRACKDIR_LEFT_S, INVALID_TRACKDIR, INVALID_TRACKDIR,
TRACKDIR_X_SW, TRACKDIR_Y_NW, TRACKDIR_LOWER_W, TRACKDIR_UPPER_W, TRACKDIR_RIGHT_N, TRACKDIR_LEFT_N
}

const byte _signal_against_trackdir[TRACKDIR_END]

Initial value:
{
0x4, 0x4, 0x4, 0x1, 0x8, 0x2, 0, 0,
0x8, 0x8, 0x8, 0x2, 0x4, 0x1
}

const byte _signal_along_trackdir[TRACKDIR_END]

Initial value:
{
0x8, 0x8, 0x8, 0x2, 0x4, 0x1, 0, 0,
0x4, 0x4, 0x4, 0x1, 0x8, 0x2
}

const byte _signal_on_track[]

Initial value:
{
0xC, 0xC, 0xC, 0x3, 0xC, 0x3
}

const TrackdirBits _track_crosses_trackdirs[TRACKDIR_END]

Initial value:
{
TRACKDIR_BIT_Y_SE | TRACKDIR_BIT_Y_NW,
TRACKDIR_BIT_X_NE | TRACKDIR_BIT_X_SW,
TRACKDIR_BIT_RIGHT_N | TRACKDIR_BIT_RIGHT_S | TRACKDIR_BIT_LEFT_N | TRACKDIR_BIT_LEFT_S,
TRACKDIR_BIT_RIGHT_N | TRACKDIR_BIT_RIGHT_S | TRACKDIR_BIT_LEFT_N | TRACKDIR_BIT_LEFT_S,
TRACKDIR_BIT_UPPER_W | TRACKDIR_BIT_UPPER_E | TRACKDIR_BIT_LOWER_W | TRACKDIR_BIT_LOWER_E,
TRACKDIR_BIT_UPPER_W | TRACKDIR_BIT_UPPER_E | TRACKDIR_BIT_LOWER_W | TRACKDIR_BIT_LOWER_E
}

const TrackBits _track_crosses_tracks[]

Initial value:
{
TRACK_BIT_Y,
TRACK_BIT_X,
TRACK_BIT_VERT,
TRACK_BIT_VERT,
TRACK_BIT_HORZ,
TRACK_BIT_HORZ
}

const Trackdir _track_direction_to_trackdir[][DIR_END]

Initial value:
{
{INVALID_TRACKDIR, TRACKDIR_X_NE, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_X_SW, INVALID_TRACKDIR, INVALID_TRACKDIR},
{INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_Y_SE, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_Y_NW},
{INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_UPPER_E, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_UPPER_W, INVALID_TRACKDIR},
{INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LOWER_E, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LOWER_W, INVALID_TRACKDIR},
{TRACKDIR_LEFT_N, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LEFT_S, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR},
{TRACKDIR_RIGHT_N, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_RIGHT_S, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR}
}

const Trackdir _track_enterdir_to_trackdir[][DIAGDIR_END]

Initial value:
{
{TRACKDIR_X_NE, INVALID_TRACKDIR, TRACKDIR_X_SW, INVALID_TRACKDIR},
{INVALID_TRACKDIR, TRACKDIR_Y_SE, INVALID_TRACKDIR, TRACKDIR_Y_NW},
{INVALID_TRACKDIR, TRACKDIR_UPPER_E, TRACKDIR_UPPER_W, INVALID_TRACKDIR},
{TRACKDIR_LOWER_E, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LOWER_W},
{TRACKDIR_LEFT_N, TRACKDIR_LEFT_S, INVALID_TRACKDIR, INVALID_TRACKDIR},
{INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_RIGHT_S, TRACKDIR_RIGHT_N}
}

const Trackdir _track_exitdir_to_trackdir[][DIAGDIR_END]

Initial value:
{
{TRACKDIR_X_NE, INVALID_TRACKDIR, TRACKDIR_X_SW, INVALID_TRACKDIR},
{INVALID_TRACKDIR, TRACKDIR_Y_SE, INVALID_TRACKDIR, TRACKDIR_Y_NW},
{TRACKDIR_UPPER_E, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_UPPER_W},
{INVALID_TRACKDIR, TRACKDIR_LOWER_E, TRACKDIR_LOWER_W, INVALID_TRACKDIR},
{INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LEFT_S, TRACKDIR_LEFT_N},
{TRACKDIR_RIGHT_N, TRACKDIR_RIGHT_S, INVALID_TRACKDIR, INVALID_TRACKDIR}
}

const DiagDirection _trackdir_to_exitdir[TRACKDIR_END]

Initial value:
{
DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_SW, DIAGDIR_SE, DIAGDIR_NE, DIAGDIR_NE,
DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_NW, DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_NE,
}