elrail.cpp File Reference

This file deals with displaying wires and pylons for electric railways. More...

#include "stdafx.h"
#include "station_map.h"
#include "viewport_func.h"
#include "landscape.h"
#include "train.h"
#include "rail_gui.h"
#include "tunnelbridge_map.h"
#include "tunnelbridge.h"
#include "elrail_func.h"
#include "engine_base.h"
#include "company_base.h"
#include "rail.h"
#include "newgrf_railtype.h"
#include "table/sprites.h"
#include "table/elrail_data.h"

Go to the source code of this file.

Functions

static TLG GetTLG (TileIndex t)
static TrackBits GetRailTrackBitsUniversal (TileIndex t, byte *override)
 Finds which Electrified Rail Bits are present on a given tile.
static TrackBits MaskWireBits (TileIndex t, TrackBits tracks)
 Masks out track bits when neighbouring tiles are unelectrified.
static SpriteID GetWireBase (TileIndex tile)
 Get the base wire sprite to use.
static SpriteID GetPylonBase (TileIndex tile)
 Get the base pylon sprite to use.
static void AdjustTileh (TileIndex tile, Slope *tileh)
 Corrects the tileh for certain tile types.
static byte GetPCPElevation (TileIndex tile, DiagDirection PCPpos)
 Returns the Z position of a Pylon Control Point.
void DrawCatenaryOnTunnel (const TileInfo *ti)
 Draws wires on a tunnel tile.
static void DrawCatenaryRailway (const TileInfo *ti)
 Draws wires and, if required, pylons on a given tile.
void DrawCatenaryOnBridge (const TileInfo *ti)
void DrawCatenary (const TileInfo *ti)
 Draws overhead wires and pylons for electric railways.
bool SettingsDisableElrail (int32 p1)
 _settings_game.disable_elrail callback

Detailed Description

This file deals with displaying wires and pylons for electric railways.

Basics

Tile Types

We have two different types of tiles in the drawing code: Normal Railway Tiles (NRTs) which can have more than one track on it, and Special Railways tiles (SRTs) which have only one track (like crossings, depots stations, etc).

Location Categories

All tiles are categorized into three location groups (TLG): Group 0: Tiles with both an even X coordinate and an even Y coordinate Group 1: Tiles with an even X and an odd Y coordinate Group 2: Tiles with an odd X and an even Y coordinate Group 3: Tiles with both an odd X and Y coordnate.

Pylon Points

Control Points

A Pylon Control Point (PCP) is a position where a wire (or rather two) is mounted onto a pylon. Each NRT does contain 4 PCPs which are bitmapped to a byte variable and are represented by the DiagDirection enum

Each track ends on two PCPs and thus requires one pylon on each end. However, there is one exception: Straight-and-level tracks only have one pylon every other tile.

Now on each edge there are two PCPs: One from each adjacent tile. Both PCPs are merged using an OR operation (i. e. if one tile needs a PCP at the postion in question, both tiles get it).

Position Points

A Pylon Position Point (PPP) is a position where a pylon is located on the ground. Each PCP owns 8 in (45 degree steps) PPPs that are located around it. PPPs are represented using the Direction enum. Each track bit has PPPs that are impossible (because the pylon would be situated on the track) and some that are preferred (because the pylon would be rectangular to the track).

elrail_tile.png
elrail_track.png

Definition in file elrail.cpp.


Function Documentation

static void AdjustTileh ( TileIndex  tile,
Slope tileh 
) [static]

Corrects the tileh for certain tile types.

Returns an effective tileh for the track on the tile.

Parameters:
tile The tile to analyse
*tileh the tileh

Definition at line 189 of file elrail.cpp.

References GetTunnelBridgeDirection(), InclinedSlope(), IsTileType(), IsTunnel(), MP_TUNNELBRIDGE, SLOPE_FLAT, and SLOPE_STEEP.

Referenced by DrawCatenaryRailway().

void DrawCatenary ( const TileInfo ti  ) 

Draws overhead wires and pylons for electric railways.

Parameters:
ti The TileInfo struct of the tile being drawn
See also:
DrawCatenaryRailway

Definition at line 513 of file elrail.cpp.

References AddSortableSpriteToDraw(), DrawCatenaryRailway(), GetRailDepotDirection(), GetTileMaxZ(), GetTileType(), GetWireBase(), IsRailDepot(), IsTransparencySet(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, TileInfo::tile, TO_CATENARY, TileInfo::x, and TileInfo::y.

Referenced by DrawTile_Road(), and DrawTile_TunnelBridge().

void DrawCatenaryOnTunnel ( const TileInfo ti  ) 

Draws wires on a tunnel tile.

DrawTile_TunnelBridge() calls this function to draw the wires as SpriteCombine with the tunnel roof.

Parameters:
ti The Tileinfo to draw the tile for

Definition at line 236 of file elrail.cpp.

References AddSortableSpriteToDraw(), BB_Z_SEPARATOR, GetTileZ(), GetTunnelBridgeDirection(), GetWireBase(), IsTransparencySet(), TileInfo::tile, TO_CATENARY, TileInfo::x, and TileInfo::y.

Referenced by DrawTile_TunnelBridge().

static void DrawCatenaryRailway ( const TileInfo ti  )  [static]
static byte GetPCPElevation ( TileIndex  tile,
DiagDirection  PCPpos 
) [static]

Returns the Z position of a Pylon Control Point.

Parameters:
tile The tile the pylon should stand on.
PCPpos The PCP of the tile.
Returns:
The Z position of the PCP.

Definition at line 209 of file elrail.cpp.

References min(), TILE_SIZE, TileX(), and TileY().

Referenced by DrawCatenaryRailway().

static TrackBits GetRailTrackBitsUniversal ( TileIndex  t,
byte *  override 
) [static]

Finds which Electrified Rail Bits are present on a given tile.

Parameters:
t tile to check
override pointer to PCP override, can be NULL
Returns:
trackbits of tile if it is electrified

Definition at line 84 of file elrail.cpp.

References DiagDirToDiagTrackBits(), GetOtherBridgeEnd(), GetRailStationTrack(), GetRailTileType(), GetRailType(), GetTileType(), GetTrackBits(), GetTunnelBridgeDirection(), GetTunnelBridgeLength(), HasCatenary(), HasStationRail(), IsTunnel(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, RAIL_TILE_NORMAL, RAIL_TILE_SIGNALS, TRACK_BIT_NONE, and TrackToTrackBits().

Referenced by DrawCatenaryRailway().


Generated on Sat Jun 5 21:52:15 2010 for OpenTTD by  doxygen 1.6.1