OpenTTD Source
1.11.0-beta2
|
Go to the documentation of this file.
168 return (tracks & mask) !=
TRACK_BIT_NONE ? tracks & mask : tracks;
178 return wires == 0 ? SPR_WIRE_BASE : wires;
188 return pylons == 0 ? SPR_PYLON_BASE : pylons;
247 static const int _tunnel_wire_BB[4][4] = {
259 const int *BB_data = _tunnel_wire_BB[dir];
261 wire_base + sss->image_offset, PAL_NONE, ti->
x + sss->x_offset, ti->
y + sss->y_offset,
262 BB_data[2] - sss->x_offset, BB_data[3] - sss->y_offset,
BB_Z_SEPARATOR - sss->z_offset + 1,
265 BB_data[0] - sss->x_offset, BB_data[1] - sss->y_offset,
BB_Z_SEPARATOR - sss->z_offset
286 Corner halftile_corner = CORNER_INVALID;
294 byte OverridePCP = 0;
315 static const uint edge_corners[] = {
316 1 << CORNER_N | 1 << CORNER_E,
317 1 << CORNER_S | 1 << CORNER_E,
318 1 << CORNER_S | 1 << CORNER_W,
319 1 << CORNER_N | 1 << CORNER_W,
321 SpriteID pylon_base = (halftile_corner != CORNER_INVALID &&
HasBit(edge_corners[i], halftile_corner)) ? pylon_halftile : pylon_normal;
329 wireconfig[TS_NEIGHBOUR] =
MaskWireBits(neighbour, trackconfig[TS_NEIGHBOUR]);
341 PPPpreferred[i] = 0xFF;
346 for (uint k = 0; k < NUM_TRACKS_AT_PCP; k++) {
348 if (TrackSourceTile[i][k] == TS_NEIGHBOUR &&
357 if (
HasBit(wireconfig[TrackSourceTile[i][k]], TracksAtPCP[i][k])) {
360 PCPpos = (TrackSourceTile[i][k] == TS_HOME) ? i :
ReverseDiagDir(i);
365 if (
HasBit(trackconfig[TrackSourceTile[i][k]], TracksAtPCP[i][k])) {
371 if (!
HasBit(PCPstatus, i)) {
398 if (tileh[TS_HOME] == tileh[TS_NEIGHBOUR] || (isflat[TS_HOME] && isflat[TS_NEIGHBOUR])) {
399 for (uint k = 0; k < NUM_IGNORE_GROUPS; k++) {
408 if ((PPPallowed[i] & PPPpreferred[i]) != 0) PPPallowed[i] &= PPPpreferred[i];
420 if (PPPallowed[i] != 0 &&
HasBit(PCPstatus, i) && !
HasBit(OverridePCP, i) &&
425 if (
HasBit(PPPallowed[i], temp)) {
426 uint x = ti->
x + x_pcp_offsets[i] + x_ppp_offsets[temp];
427 uint y = ti->
y + y_pcp_offsets[i] + y_ppp_offsets[temp];
460 Track halftile_track;
461 switch (halftile_corner) {
462 case CORNER_W: halftile_track =
TRACK_LEFT;
break;
463 case CORNER_S: halftile_track =
TRACK_LOWER;
break;
464 case CORNER_E: halftile_track =
TRACK_RIGHT;
break;
465 case CORNER_N: halftile_track =
TRACK_UPPER;
break;
472 SpriteID wire_base = (t == halftile_track) ? wire_halftile : wire_normal;
477 int tileh_selector = !(tileh[TS_HOME] % 3) * tileh[TS_HOME] / 3;
479 assert(PCPconfig != 0);
481 sss = &RailCatenarySpriteData[Wires[tileh_selector][t][PCPconfig]];
489 sss->x_size, sss->y_size, sss->z_size, GetSlopePixelZ(ti->
x + sss->x_offset, ti->
y + sss->y_offset) + sss->z_offset,
516 if ((length % 2) && num == length) {
519 sss = &RailCatenarySpriteData[WIRE_X_FLAT_BOTH + offset];
522 sss = &RailCatenarySpriteData[WIRE_X_FLAT_SW + (num % 2) + offset];
530 sss->x_size, sss->y_size, sss->z_size, height + sss->z_offset,
542 uint x = ti->
x + x_pcp_offsets[PCPpos] + x_ppp_offsets[PPPpos];
543 uint y = ti->
y + y_pcp_offsets[PCPpos] + y_ppp_offsets[PPPpos];
544 AddSortableSpriteToDraw(pylon_base + pylon_sprites[PPPpos], PAL_NONE, x, y, 1, 1,
BB_HEIGHT_UNDER_BRIDGE, height,
IsTransparencySet(
TO_CATENARY), -1, -1);
552 uint x = ti->
x + x_pcp_offsets[PCPpos] + x_ppp_offsets[PPPpos];
553 uint y = ti->
y + y_pcp_offsets[PCPpos] + y_ppp_offsets[PPPpos];
554 AddSortableSpriteToDraw(pylon_base + pylon_sprites[PPPpos], PAL_NONE, x, y, 1, 1,
BB_HEIGHT_UNDER_BRIDGE, height,
IsTransparencySet(
TO_CATENARY), -1, -1);
574 wire_base + sss->image_offset, PAL_NONE, ti->
x + sss->x_offset, ti->
y + sss->y_offset,
575 sss->x_size, sss->y_size, sss->z_size,
595 bool disable = (p1 != 0);
605 if (rv_info->
engclass == 2 && rv_info->railtype == old_railtype) {
607 rv_info->railtype = new_railtype;
628 if (t->IsFrontEngine()) {
@ TRACK_BIT_MASK
Bitmask for the first 6 bits.
static bool IsTunnelTile(TileIndex t)
Is this a tunnel (entrance)?
@ TCX_UPPER_HALFTILE
Querying information about the upper part of a tile with halftile foundation.
uint32 TileIndex
The index/ID of a Tile.
static TLG GetTLG(TileIndex t)
Get the tile location group of a tile.
@ TRACK_BIT_NONE
No track.
static Pool::IterateWrapperFiltered< Engine, EngineTypeFilter > IterateType(VehicleType vt, size_t from=0)
Returns an iterable ensemble of all valid engines of the given type.
TileIndex GetOtherBridgeEnd(TileIndex tile)
Starting at one bridge end finds the other bridge end.
static TileIndexDiff TileOffsByDiagDir(DiagDirection dir)
Convert a DiagDirection to a TileIndexDiff.
Direction
Defines the 8 directions on the map.
@ DIR_BEGIN
Used to iterate.
int GetTileMaxZ(TileIndex t)
Get top height of the tile inside the map.
Foundation GetBridgeFoundation(Slope tileh, Axis axis)
Get the foundation for a bridge.
static const uint BB_Z_SEPARATOR
Separates the bridge/tunnel from the things under/above it.
TrackdirBits
Enumeration of bitmasks for the TrackDirs.
static Slope InclinedSlope(DiagDirection dir)
Returns the slope that is inclined in a specific direction.
uint x
X position of the tile in unit coordinates.
Tile information, used while rendering the tile.
static bool IsTransparencySet(TransparencyOption to)
Check if the transparency option bit is set and if we aren't in the game menu (there's never transpar...
@ TRANSPORT_RAIL
Transport by train.
@ TRACK_LOWER
Track in the lower corner of the tile (south)
static Axis DiagDirToAxis(DiagDirection d)
Convert a DiagDirection to the axis.
@ RTSG_PYLONS
Catenary pylons.
@ RAIL_TILE_SIGNALS
Normal rail tile with signals.
@ DIAGDIR_END
Used for iterations.
static Track GetRailStationTrack(TileIndex t)
Get the rail track of a rail station tile.
@ TRACK_X
Track along the x-axis (north-east to south-west)
int GetBridgeHeight(TileIndex t)
Get the height ('z') of a bridge.
static void DrawRailCatenaryRailway(const TileInfo *ti)
Draws wires and, if required, pylons on a given tile.
static bool HasBit(const T x, const uint8 y)
Checks if a bit in a value is set.
static bool IsHalftileSlope(Slope s)
Checks for non-continuous slope on halftile foundations.
This struct contains all the info that is needed to draw and construct tracks.
static T ClrBit(T &x, const uint8 y)
Clears a bit in a variable.
static bool TracksOverlap(TrackBits bits)
Checks if the given tracks overlap, ie form a crossing.
RailCatenarySprite
Refers to a certain element of the catenary.
static const uint BB_HEIGHT_UNDER_BRIDGE
Some values for constructing bounding boxes (BB).
static const uint TILE_SIZE
Tile size in world coordinates.
@ VRF_EL_ENGINE_ALLOWED_NORMAL_RAIL
Electric train engine is allowed to run on normal rail. */.
static TrackBits GetTrackBits(TileIndex tile)
Gets the track bits of the given tile.
uint y
Y position of the tile in unit coordinates.
void DrawRailCatenaryOnBridge(const TileInfo *ti)
Draws wires on a tunnel tile.
static uint TileY(TileIndex tile)
Get the Y component of a tile.
@ MP_ROAD
A tile with road (or tram tracks)
static bool IsRailDepot(TileIndex t)
Is this rail tile a rail depot?
@ TRACK_RIGHT
Track in the right corner of the tile (east)
Foundation
Enumeration for Foundations.
static bool IsLevelCrossing(TileIndex t)
Return whether a tile is a level crossing.
static DiagDirection GetRailDepotDirection(TileIndex t)
Returns the direction the depot is facing to.
static TrackBits TrackToTrackBits(Track track)
Maps a Track to the corresponding TrackBits value.
static uint TileX(TileIndex tile)
Get the X component of a tile.
TrackStatus GetTileTrackStatus(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
Returns information about trackdirs and signal states.
@ RAILTYPE_ELECTRIC
Electric rails.
Slope tileh
Slope of the tile.
uint32 SpriteID
The number of a sprite, without mapping bits and colourtables.
@ TRACK_BIT_CROSS
X-Y-axis cross.
static const RailtypeInfo * GetRailTypeInfo(RailType railtype)
Returns a pointer to the Railtype information for a given railtype.
static TrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override)
Finds which Electrified Rail Bits are present on a given tile.
@ TRACK_BIT_VERT
Left and right track.
Information about a rail vehicle.
EngineClass engclass
Class of engine for this vehicle.
#define FOR_EACH_SET_TRACK(var, track_bits)
Iterate through each set Track in a TrackBits value.
@ TRACKDIR_BIT_X_NE
Track x-axis, direction north-east.
RailType
Enumeration for all possible railtypes.
static bool IsBridgeTile(TileIndex t)
checks if there is a bridge on this tile
static bool IsSteepSlope(Slope s)
Checks if a slope is steep.
@ TRACK_Y
Track along the y-axis (north-west to south-east)
static bool HasStationRail(TileIndex t)
Has this station tile a rail? In other words, is this station tile a rail station or rail waypoint?
static RailTileType GetRailTileType(TileIndex t)
Returns the RailTileType (normal with or without signals, waypoint or depot).
static TrackBits TrackStatusToTrackBits(TrackStatus ts)
Returns the present-track-information of a TrackStatus.
Corner
Enumeration of tile corners.
bool SettingsDisableElrail(int32 p1)
_settings_game.disable_elrail callback
@ TRACK_UPPER
Track in the upper corner of the tile (north)
TileIndex GetNorthernBridgeEnd(TileIndex t)
Finds the northern end of a bridge starting at a middle tile.
@ RAILTYPES_RAIL
Non-electrified rails.
static void AdjustTileh(TileIndex tile, Slope *tileh)
Corrects the tileh for certain tile types.
TileContext
Context for tile accesses.
@ TRACK_BIT_X
X-axis track.
static bool HasStationTileRail(TileIndex t)
Has this station tile a rail? In other words, is this station tile a rail station or rail waypoint?
static TrackBits DiagdirReachesTracks(DiagDirection diagdir)
Returns all tracks that can be reached when entering a tile from a given (diagonal) direction.
@ SLOPE_STEEP
indicates the slope is steep
'Train' is either a loco or a wagon.
Slope GetTileSlope(TileIndex tile, int *h)
Return the slope of a given tile inside the map.
static DiagDirection ReverseDiagDir(DiagDirection d)
Returns the reverse direction of the given DiagDirection.
static TileIndex TileAddByDiagDir(TileIndex tile, DiagDirection dir)
Adds a DiagDir to a tile.
bool CanStationTileHaveWires(TileIndex tile)
Check if a rail station tile shall have wires when electrified.
@ TRACK_LEFT
Track in the left corner of the tile (west)
@ TRACKDIR_BIT_Y_SE
Track y-axis, direction south-east.
@ TCX_NORMAL
Nothing special.
static Corner GetHalftileSlopeCorner(Slope s)
Returns the leveled halftile of a halftile slope.
@ MP_TUNNELBRIDGE
Tunnel entry/exit and bridge heads.
@ FOUNDATION_NONE
The tile has no foundation, the slope remains unchanged.
TileIndex GetSouthernBridgeEnd(TileIndex t)
Finds the southern end of a bridge starting at a middle tile.
Slope
Enumeration for the slope-type.
DiagDirection
Enumeration for diagonal directions.
static bool IsRailStationTile(TileIndex t)
Is this tile a station tile and a rail station?
static bool IsTileType(TileIndex tile, TileType type)
Checks if a tile is a given tiletype.
static DiagDirection GetTunnelBridgeDirection(TileIndex t)
Get the direction pointing to the other end.
void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int w, int h, int dz, int z, bool transparent, int bb_offset_x, int bb_offset_y, int bb_offset_z, const SubSprite *sub)
Draw a (transparent) sprite at given coordinates with a given bounding box.
static Axis GetBridgeAxis(TileIndex t)
Get the axis of the bridge that goes over the tile.
static TrackBits MaskWireBits(TileIndex t, TrackBits tracks)
Masks out track bits when neighbouring tiles are unelectrified.
static TrackdirBits DiagdirReachesTrackdirs(DiagDirection diagdir)
Returns all trackdirs that can be reached when entering a tile from a given (diagonal) direction.
@ RAILTYPE_RAIL
Standard non-electric rails.
static Direction ReverseDir(Direction d)
Return the reverse of a direction.
@ TRACK_BIT_HORZ
Upper and lower track.
@ TRACKDIR_BIT_NONE
No track build.
static SpriteID GetPylonBase(TileIndex tile, TileContext context=TCX_NORMAL)
Get the base pylon sprite to use.
SpriteID GetCustomRailSprite(const RailtypeInfo *rti, TileIndex tile, RailTypeSpriteGroup rtsg, TileContext context, uint *num_results)
Get the sprite to draw for the given tile.
@ RTSG_WIRES
Catenary wires.
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
static int GetTilePixelZ(TileIndex tile)
Get bottom height of the tile.
@ DIR_END
Used to iterate.
static Axis GetRailStationAxis(TileIndex t)
Get the rail direction of a rail station.
Foundation GetRailFoundation(Slope tileh, TrackBits bits)
Checks if a track combination is valid on a specific slope and returns the needed foundation.
@ TRACKDIR_BIT_Y_NW
Track y-axis, direction north-west.
static bool IsTunnel(TileIndex t)
Is this a tunnel (entrance)?
@ TCX_ON_BRIDGE
Querying information about stuff on the bridge (via some bridgehead).
static int GetPCPElevation(TileIndex tile, DiagDirection PCPpos)
Returns the Z position of a Pylon Control Point.
RailTypes GetCompanyRailtypes(CompanyID company, bool introduces)
Get the rail types the given company can build.
static RailType GetRailType(TileIndex t)
Gets the rail type of the given tile.
@ MP_STATION
A tile of a station.
@ RAIL_TILE_NORMAL
Normal rail tile without signals.
static SpriteID GetWireBase(TileIndex tile, TileContext context=TCX_NORMAL)
Get the base wire sprite to use.
@ DIAGDIR_BEGIN
Used for iterations.
static const byte PreferredPPPofTrackAtPCP[TRACK_END][DIAGDIR_END]
Preferred points of each trackbit.
static int GetTileMaxPixelZ(TileIndex tile)
Get top height of the tile.
bool CanStationTileHavePylons(TileIndex tile)
Check if a rail station tile shall have pylons when electrified.
static Pool::IterateWrapper< Train > Iterate(size_t from=0)
Returns an iterable ensemble of all valid vehicles of type T.
void DrawRailCatenaryOnTunnel(const TileInfo *ti)
Draws wires on a tunnel tile.
TrackBits
Bitfield corresponding to Track.
static uint GetTunnelBridgeLength(TileIndex begin, TileIndex end)
Calculates the length of a tunnel or a bridge (without end tiles)
static const byte AllowedPPPonPCP[DIAGDIR_END]
Which PPPs are possible at all on a given PCP.
static T SetBit(T &x, const uint8 y)
Set a bit in a variable.
static TrackBits DiagDirToDiagTrackBits(DiagDirection diagdir)
Maps a (4-way) direction to the diagonal track bits incidating with that diagdir.
static int GetBridgePixelHeight(TileIndex tile)
Get the height ('z') of a bridge in pixels.
static bool IsPlainRailTile(TileIndex t)
Checks whether the tile is a rail tile or rail tile with signals.
void DrawRailCatenary(const TileInfo *ti)
Draws overhead wires and pylons for electric railways.
static const byte DisallowedPPPofTrackAtPCP[TRACK_END][DIAGDIR_END]
Which pylons can definitely NOT be built.
static const byte IgnoredPCP[NUM_IGNORE_GROUPS][TLG_END][DIAGDIR_END]
In case we have a straight line, we place pylon only every two tiles, so there are certain tiles whic...
Axis
Allow incrementing of DiagDirDiff variables.
RailType GetTileRailType(TileIndex tile)
Return the rail type of tile, or INVALID_RAILTYPE if this is no rail tile.
static const DiagDirection PCPpositions[TRACK_END][2]
Maps a track bit onto two PCP positions.
@ TRACKDIR_BIT_X_SW
Track x-axis, direction south-west.
@ TRACK_BIT_Y
Y-axis track.
TileIndex tile
Tile index.
@ CCF_TRACK
Valid changes while vehicle is driving, and possibly changing tracks.
static TileType GetTileType(TileIndex tile)
Get the tiletype of a given tile.
@ VEH_TRAIN
Train vehicle type.
static bool HasRailCatenary(RailType rt)
Test if a rail type has catenary.
Track
These are used to specify a single track.
uint ApplyFoundationToSlope(Foundation f, Slope *s)
Applies a foundation to a slope.
static TransportType GetTunnelBridgeTransportType(TileIndex t)
Tunnel: Get the transport type of the tunnel (road or rail) Bridge: Get the transport type of the bri...
static TrackBits TrackdirBitsToTrackBits(TrackdirBits bits)
Discards all directional information from a TrackdirBits value.
static TrackBits GetCrossingRailBits(TileIndex tile)
Get the rail track bits of a level crossing.
@ DIAGDIR_NE
Northeast, upper right on your monitor.
static const byte OwnedPPPonPCP[DIAGDIR_END]
Which of the PPPs are inside the tile.
static bool IsBridgeAbove(TileIndex t)
checks if a bridge is set above the ground of this tile
void ReinitGuiAfterToggleElrail(bool disable)
Re-initialize rail-build toolbar after toggling support for electric trains.
@ INVALID_RAILTYPE
Flag for invalid railtype.
@ INVALID_TRACK
Flag for an invalid track.