| OpenTTD
    | 
Rail specific functions. More...
#include "rail_type.h"#include "track_type.h"#include "gfx_type.h"#include "core/bitmath_func.hpp"#include "economy_func.h"#include "slope_type.h"#include "strings_type.h"#include "date_type.h"#include "signal_type.h"Go to the source code of this file.
| Data Structures | |
| class | RailtypeInfo | 
| This struct contains all the info that is needed to draw and construct tracks.  More... | |
| Macros | |
| #define | FOR_ALL_SORTED_RAILTYPES(var) for (uint8 index = 0; index < _sorted_railtypes_size && (var = _sorted_railtypes[index], true) ; index++) | 
| Loop header for iterating over railtypes, sorted by sortorder. | |
| Typedefs | |
| typedef SmallVector < RailTypeLabel, 4 > | RailTypeLabelList | 
| List of rail type labels. | |
| Functions | |
| static const RailtypeInfo * | GetRailTypeInfo (RailType railtype) | 
| Returns a pointer to the Railtype information for a given railtype. | |
| static bool | IsCompatibleRail (RailType enginetype, RailType tiletype) | 
| Checks if an engine of the given RailType can drive on a tile with a given RailType. | |
| static bool | HasPowerOnRail (RailType enginetype, RailType tiletype) | 
| Checks if an engine of the given RailType got power on a tile with a given RailType. | |
| static bool | RailNoLevelCrossings (RailType rt) | 
| Test if a RailType disallows build of level crossings. | |
| static Money | RailBuildCost (RailType railtype) | 
| Returns the cost of building the specified railtype. | |
| static Money | RailClearCost (RailType railtype) | 
| Returns the 'cost' of clearing the specified railtype. | |
| static Money | RailConvertCost (RailType from, RailType to) | 
| Calculates the cost of rail conversion. | |
| static Money | RailMaintenanceCost (RailType railtype, uint32 num, uint32 total_num) | 
| Calculates the maintenance cost of a number of track bits. | |
| static Money | SignalMaintenanceCost (uint32 num) | 
| Calculates the maintenance cost of a number of signals. | |
| void | DrawTrainDepotSprite (int x, int y, int image, RailType railtype) | 
| int | TicksToLeaveDepot (const Train *v) | 
| Compute number of ticks when next wagon will leave a depot. | |
| Foundation | GetRailFoundation (Slope tileh, TrackBits bits) | 
| Checks if a track combination is valid on a specific slope and returns the needed foundation. | |
| 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. | |
| RailTypes | AddDateIntroducedRailTypes (RailTypes current, Date date) | 
| Add the rail types that are to be introduced at the given date. | |
| RailType | GetBestRailtype (const CompanyID company) | 
| Returns the "best" railtype a company can build. | |
| RailTypes | GetCompanyRailtypes (const CompanyID c) | 
| Get the rail types the given company can build. | |
| RailType | GetRailTypeByLabel (RailTypeLabel label, bool allow_alternate_labels=true) | 
| Get the rail type for a given label. | |
| void | ResetRailTypes () | 
| Reset all rail type information to its default values. | |
| void | InitRailTypes () | 
| Resolve sprites of custom rail types. | |
| RailType | AllocateRailType (RailTypeLabel label) | 
| Allocate a new rail type label. | |
| Variables | |
| RailType | _sorted_railtypes [RAILTYPE_END] | 
| uint8 | _sorted_railtypes_size | 
Rail specific functions.
Definition in file rail.h.
| #define FOR_ALL_SORTED_RAILTYPES | ( | var | ) | for (uint8 index = 0; index < _sorted_railtypes_size && (var = _sorted_railtypes[index], true) ; index++) | 
Loop header for iterating over railtypes, sorted by sortorder.
| var | Railtype. | 
Definition at line 442 of file rail.h.
Referenced by CompanyInfrastructureWindow::DrawWidget(), and GetRailTypeDropDownList().
| typedef SmallVector<RailTypeLabel, 4> RailTypeLabelList | 
| enum RailFenceOffset | 
Offsets from base sprite for fence sprites.
These are in the order of the sprites in the original data files.
| enum RailTrackOffset | 
Offsets for sprites within an overlay/underlay set.
These are the same for overlay and underlay sprites.
| enum RailTypeFlags | 
| enum RailTypeSpriteGroup | 
Sprite groups for a railtype.
| RTSG_CURSORS | Cursor and toolbar icon images. | 
| RTSG_OVERLAY | Images for overlaying track. | 
| RTSG_GROUND | Main group of ground images. | 
| RTSG_TUNNEL | Main group of ground images for snow or desert. | 
| RTSG_WIRES | Catenary wires. | 
| RTSG_PYLONS | Catenary pylons. | 
| RTSG_BRIDGE | Bridge surface images. | 
| RTSG_CROSSING | Level crossing overlay images. | 
| RTSG_DEPOT | Depot images. | 
| RTSG_FENCES | Fence images. | 
| RTSG_TUNNEL_PORTAL | Tunnel portal overlay. | 
| RTSG_SIGNALS | Signal images. | 
Add the rail types that are to be introduced at the given date.
| current | The currently available railtypes. | 
| date | The date for the introduction comparisons. | 
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(), EnginesDailyLoop(), GetCompanyRailtypes(), GetRailTypeDropDownList(), and NewVehicleAvailable().
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
| company | the company "in action" | 
Definition at line 210 of file rail.cpp.
References HasRailtypeAvail(), RAILTYPE_ELECTRIC, RAILTYPE_MAGLEV, RAILTYPE_MONO, and RAILTYPE_RAIL.
Referenced by SetDefaultRailGui().
Get the rail types the given company can build.
| c | the company to get the rail types for. | 
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().
| Foundation GetRailFoundation | ( | Slope | tileh, | 
| TrackBits | bits | ||
| ) | 
Checks if a track combination is valid on a specific slope and returns the needed foundation.
| tileh | Tile slope. | 
| bits | Trackbits. | 
Definition at line 328 of file rail_cmd.cpp.
References CornerToTrackBits(), FOUNDATION_INCLINED_X, FOUNDATION_INCLINED_Y, FOUNDATION_INVALID, FOUNDATION_LEVELED, FOUNDATION_NONE, FOUNDATION_STEEP_BOTH, FOUNDATION_STEEP_LOWER, GetHighestSlopeCorner(), HalftileFoundation(), IsSlopeWithOneCornerRaised(), IsSlopeWithThreeCornersRaised(), IsSteepSlope(), OppositeCorner(), SLOPE_E, SLOPE_N, SLOPE_S, SLOPE_W, SlopeWithOneCornerRaised(), SlopeWithThreeCornersRaised(), SpecialRailFoundation(), TRACK_BIT_HORZ, TRACK_BIT_LEFT, TRACK_BIT_LOWER, TRACK_BIT_NONE, TRACK_BIT_RIGHT, TRACK_BIT_UPPER, TRACK_BIT_VERT, TRACK_BIT_X, TRACK_BIT_Y, and TracksOverlap().
Referenced by CheckRailSlope(), DrawRailCatenaryRailway(), DrawTrackBits(), FloodHalftile(), and TestAutoslopeOnRailTile().
| RailType GetRailTypeByLabel | ( | RailTypeLabel | label, | 
| bool | allow_alternate_labels | ||
| ) | 
Get the rail type for a given label.
| label | the railtype label. | 
| allow_alternate_labels | Search in the alternate label lists as well. | 
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().
| 
 | inlinestatic | 
Returns a pointer to the Railtype information for a given railtype.
| railtype | the rail type which the information is requested for | 
Definition at line 296 of file rail.h.
References RAILTYPE_END.
Referenced by AcceptEnginePreview(), AddDateIntroducedRailTypes(), AffectSpeedByZChange(), CheckAutoreplaceValidity(), CompareRailTypes(), Train::ConsistChanged(), DrawBridgeMiddle(), DrawStationTile(), DrawTile_Road(), DrawTile_TunnelBridge(), DrawTrackBits(), BuildSignalWindow::DrawWidget(), CompanyInfrastructureWindow::DrawWidget(), VehicleDetailsWindow::DrawWidget(), FollowTrainReservation(), FreeTrainTrackReservation(), Train::GetAccelerationType(), GetCompanyRailtypes(), Train::GetCurveSpeedLimit(), GetEngineCategoryName(), GetGlobalVariable(), Train::GetMaxTrackSpeed(), GetNewEngine(), GetPylonBase(), GetRailTypeByLabel(), GetRailTypeDropDownList(), GetReverseRailTypeTranslation(), GetSmallMapRoutesPixels(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::GetSpeedLimit(), GetTrainForReservation(), GetWireBase(), HasPowerOnRail(), HasRailCatenary(), IsCompatibleRail(), IsEngineBuildable(), IsSafeWaitingPosition(), IsWaitingPositionFree(), NeedRailTypeConversion(), NewVehicleAvailable(), NPFTrainFindNearestSafeTile(), BuildRailToolbarWindow::OnClick(), BuildSignalWindow::OnInit(), ReplaceVehicleWindow::OnPaint(), RailBuildCost(), RailMaintenanceCost(), RailNoLevelCrossings(), ResetNewGRFData(), BuildRailToolbarWindow::SetStringParameters(), BuildVehicleWindow::SetStringParameters(), BuildRailToolbarWindow::SetupRailToolbar(), TrainController(), ReplaceVehicleWindow::UpdateWidgetSize(), and CompanyInfrastructureWindow::UpdateWidgetSize().
Checks if an engine of the given RailType got power on a tile with a given RailType.
This would normally just be an equality check, but for electric rails (which also support non-electric engines).
| enginetype | The RailType of the engine we are considering. | 
| tiletype | The RailType of the tile we are considering. | 
Definition at line 324 of file rail.h.
References GetRailTypeInfo(), and HasBit().
Referenced by CheckFlatLandRailStation(), CmdBuildRailVehicle(), CmdBuildSingleRail(), CmdConvertRail(), Train::GetPower(), Train::GetPoweredPartPower(), RailConvertCost(), and Vehicle::ShowVisualEffect().
Finds out if a company has a certain railtype available.
| company | the company in question | 
| railtype | requested RailType | 
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().
Checks if an engine of the given RailType can drive on a tile with a given RailType.
This would normally just be an equality check, but for electric rails (which also support non-electric engines).
| enginetype | The RailType of the engine we are considering. | 
| tiletype | The RailType of the tile we are considering. | 
Definition at line 311 of file rail.h.
References GetRailTypeInfo(), and HasBit().
Referenced by CmdBuildRailWagon(), CmdBuildSingleRail(), CmdConvertRail(), and IsCompatibleTrainStationTile().
Returns the cost of building the specified railtype.
| railtype | The railtype being built. | 
Definition at line 344 of file rail.h.
References GetRailTypeInfo(), and RAILTYPE_END.
Referenced by CmdBuildBridge(), CmdBuildRailStation(), CmdBuildSingleRail(), CmdBuildTrainDepot(), CmdBuildTunnel(), RailClearCost(), RailConvertCost(), and ShowBuildBridgeWindow().
Returns the 'cost' of clearing the specified railtype.
| railtype | The railtype being removed. | 
Definition at line 355 of file rail.h.
References max(), RailBuildCost(), and RAILTYPE_END.
Referenced by CmdRemoveSingleRail(), and RailConvertCost().
Calculates the cost of rail conversion.
| from | The railtype we are converting from | 
| to | The railtype we are converting to | 
Definition at line 372 of file rail.h.
References HasPowerOnRail(), max(), min(), RailBuildCost(), and RailClearCost().
Referenced by CmdConvertRail().
Calculates the maintenance cost of a number of track bits.
| railtype | The railtype to get the cost of. | 
| num | Number of track bits of this railtype. | 
| total_num | Total number of track bits of all railtypes. | 
Definition at line 399 of file rail.h.
References GetRailTypeInfo(), IntSqrt(), and RAILTYPE_END.
Referenced by CompaniesGenStatistics(), CompanyInfrastructureWindow::DrawWidget(), CompanyInfrastructureWindow::GetTotalMaintenanceCost(), and CompanyInfrastructureWindow::UpdateWidgetSize().
| 
 | inlinestatic | 
Test if a RailType disallows build of level crossings.
| rt | The RailType to check. | 
Definition at line 334 of file rail.h.
References GetRailTypeInfo(), HasBit(), and RTF_NO_LEVEL_CROSSING.
Referenced by CmdBuildRoad(), CmdBuildSingleRail(), and CmdConvertRail().
| 
 | inlinestatic | 
Calculates the maintenance cost of a number of signals.
| num | Number of signals. | 
Definition at line 410 of file rail.h.
References IntSqrt().
Referenced by CompaniesGenStatistics(), CompanyInfrastructureWindow::DrawWidget(), CompanyInfrastructureWindow::GetTotalMaintenanceCost(), and CompanyInfrastructureWindow::UpdateWidgetSize().
| int TicksToLeaveDepot | ( | const Train * | v | ) | 
Compute number of ticks when next wagon will leave a depot.
Negative means next wagon should have left depot n ticks before.
| v | vehicle outside (leaving) the depot | 
Definition at line 2862 of file rail_cmd.cpp.
References Train::CalcNextVehicleOffset(), DIAGDIR_NE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_SW, GetRailDepotDirection(), Vehicle::tile, Vehicle::x_pos, and Vehicle::y_pos.
Referenced by AdvanceWagonsAfterSwap(), CheckTrainsLengths(), and FixupTrainLengths().
| bool ValParamRailtype | ( | const RailType | rail | ) | 
Validate functions for rail building.
| rail | the railtype to check. | 
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().
 1.8.1.2
 1.8.1.2