OpenTTD Source
12.0-beta2
|
Go to the documentation of this file.
171 return (tracks & mask) !=
TRACK_BIT_NONE ? tracks & mask : tracks;
181 return wires == 0 ? SPR_WIRE_BASE : wires;
191 return pylons == 0 ? SPR_PYLON_BASE : pylons;
250 static const int _tunnel_wire_BB[4][4] = {
262 const int *BB_data = _tunnel_wire_BB[dir];
264 wire_base + sss->image_offset, PAL_NONE, ti->
x + sss->x_offset, ti->
y + sss->y_offset,
265 BB_data[2] - sss->x_offset, BB_data[3] - sss->y_offset,
BB_Z_SEPARATOR - sss->z_offset + 1,
268 BB_data[0] - sss->x_offset, BB_data[1] - sss->y_offset,
BB_Z_SEPARATOR - sss->z_offset
289 Corner halftile_corner = CORNER_INVALID;
297 byte OverridePCP = 0;
318 static const uint edge_corners[] = {
319 1 << CORNER_N | 1 << CORNER_E,
320 1 << CORNER_S | 1 << CORNER_E,
321 1 << CORNER_S | 1 << CORNER_W,
322 1 << CORNER_N | 1 << CORNER_W,
324 SpriteID pylon_base = (halftile_corner != CORNER_INVALID &&
HasBit(edge_corners[i], halftile_corner)) ? pylon_halftile : pylon_normal;
332 wireconfig[TS_NEIGHBOUR] =
MaskWireBits(neighbour, trackconfig[TS_NEIGHBOUR]);
344 PPPpreferred[i] = 0xFF;
349 for (uint k = 0; k < NUM_TRACKS_AT_PCP; k++) {
351 if (TrackSourceTile[i][k] == TS_NEIGHBOUR &&
360 if (
HasBit(wireconfig[TrackSourceTile[i][k]], TracksAtPCP[i][k])) {
363 PCPpos = (TrackSourceTile[i][k] == TS_HOME) ? i :
ReverseDiagDir(i);
368 if (
HasBit(trackconfig[TrackSourceTile[i][k]], TracksAtPCP[i][k])) {
374 if (!
HasBit(PCPstatus, i)) {
401 if (tileh[TS_HOME] == tileh[TS_NEIGHBOUR] || (isflat[TS_HOME] && isflat[TS_NEIGHBOUR])) {
402 for (uint k = 0; k < NUM_IGNORE_GROUPS; k++) {
411 if ((PPPallowed[i] & PPPpreferred[i]) != 0) PPPallowed[i] &= PPPpreferred[i];
423 if (PPPallowed[i] != 0 &&
HasBit(PCPstatus, i) && !
HasBit(OverridePCP, i) &&
428 if (
HasBit(PPPallowed[i], temp)) {
429 uint x = ti->
x + x_pcp_offsets[i] + x_ppp_offsets[temp];
430 uint y = ti->
y + y_pcp_offsets[i] + y_ppp_offsets[temp];
463 Track halftile_track;
464 switch (halftile_corner) {
465 case CORNER_W: halftile_track =
TRACK_LEFT;
break;
466 case CORNER_S: halftile_track =
TRACK_LOWER;
break;
467 case CORNER_E: halftile_track =
TRACK_RIGHT;
break;
468 case CORNER_N: halftile_track =
TRACK_UPPER;
break;
474 SpriteID wire_base = (t == halftile_track) ? wire_halftile : wire_normal;
479 int tileh_selector = !(tileh[TS_HOME] % 3) * tileh[TS_HOME] / 3;
481 assert(PCPconfig != 0);
483 sss = &RailCatenarySpriteData[Wires[tileh_selector][t][PCPconfig]];
491 sss->x_size, sss->y_size, sss->z_size, GetSlopePixelZ(ti->
x + sss->x_offset, ti->
y + sss->y_offset) + sss->z_offset,
518 if ((length % 2) && num == length) {
521 sss = &RailCatenarySpriteData[WIRE_X_FLAT_BOTH + offset];
524 sss = &RailCatenarySpriteData[WIRE_X_FLAT_SW + (num % 2) + offset];
532 sss->x_size, sss->y_size, sss->z_size, height + sss->z_offset,
544 uint x = ti->
x + x_pcp_offsets[PCPpos] + x_ppp_offsets[PPPpos];
545 uint y = ti->
y + y_pcp_offsets[PCPpos] + y_ppp_offsets[PPPpos];
546 AddSortableSpriteToDraw(pylon_base + pylon_sprites[PPPpos], PAL_NONE, x, y, 1, 1,
BB_HEIGHT_UNDER_BRIDGE, height,
IsTransparencySet(
TO_CATENARY), -1, -1);
554 uint x = ti->
x + x_pcp_offsets[PCPpos] + x_ppp_offsets[PPPpos];
555 uint y = ti->
y + y_pcp_offsets[PCPpos] + y_ppp_offsets[PPPpos];
556 AddSortableSpriteToDraw(pylon_base + pylon_sprites[PPPpos], PAL_NONE, x, y, 1, 1,
BB_HEIGHT_UNDER_BRIDGE, height,
IsTransparencySet(
TO_CATENARY), -1, -1);
576 wire_base + sss->image_offset, PAL_NONE, ti->
x + sss->x_offset, ti->
y + sss->y_offset,
577 sss->x_size, sss->y_size, sss->z_size,
597 bool disable = (new_value != 0);
607 if (rv_info->
engclass == 2 && rv_info->railtype == old_railtype) {
609 rv_info->railtype = new_railtype;
630 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.
static bool HasAtMostOneBit(T value)
Test whether value has at most 1 bit set.
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.
@ 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)
Iterable ensemble of each set bit in a value.
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.
@ 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.
void SettingsDisableElrail(int32 new_value)
_settings_game.disable_elrail callback
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.