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"`

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 223 of file rail.cpp.

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

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 208 of file rail.cpp.

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

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 255 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, 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 283 of file rail.cpp.

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

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 186 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 196 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,
    }