MCPcopy Create free account
hub / github.com/OpenTTD/OpenTTD / DrawTrackBits

Function DrawTrackBits

src/rail_cmd.cpp:2241–2386  ·  view source on GitHub ↗

* Draw ground sprite and track bits * @param ti TileInfo * @param track TrackBits to draw */

Source from the content-addressed store, hash-verified

2239 * @param track TrackBits to draw
2240 */
2241static void DrawTrackBits(TileInfo *ti, TrackBits track)
2242{
2243 const RailTypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile));
2244
2245 if (rti->UsesOverlay()) {
2246 DrawTrackBitsOverlay(ti, track, rti);
2247 return;
2248 }
2249
2250 RailGroundType rgt = GetRailGroundType(ti->tile);
2251 Foundation f = GetRailFoundation(ti->tileh, track);
2252 Corner halftile_corner = CORNER_INVALID;
2253
2254 if (IsNonContinuousFoundation(f)) {
2255 /* Save halftile corner */
2256 halftile_corner = (f == FOUNDATION_STEEP_BOTH ? GetHighestSlopeCorner(ti->tileh) : GetHalftileFoundationCorner(f));
2257 /* Draw lower part first */
2258 track &= ~CornerToTrackBits(halftile_corner);
2259 f = (f == FOUNDATION_STEEP_BOTH ? FOUNDATION_STEEP_LOWER : FOUNDATION_NONE);
2260 }
2261
2262 DrawFoundation(ti, f);
2263 /* DrawFoundation modifies ti */
2264
2265 SpriteID image;
2266 PaletteID pal = PAL_NONE;
2267 const SubSprite *sub = nullptr;
2268 bool junction = false;
2269
2270 /* Select the sprite to use. */
2271 if (track == 0) {
2272 /* Clear ground (only track on halftile foundation) */
2273 if (rgt == RailGroundType::HalfTileWater) {
2274 if (IsSteepSlope(ti->tileh)) {
2275 DrawShoreTile(ti->tileh);
2276 image = 0;
2277 } else {
2278 image = SPR_FLAT_WATER_TILE;
2279 }
2280 } else {
2281 switch (rgt) {
2282 case RailGroundType::Barren: image = SPR_FLAT_BARE_LAND; break;
2283 case RailGroundType::SnowOrDesert: image = SPR_FLAT_SNOW_DESERT_TILE; break;
2284 default: image = SPR_FLAT_GRASS_TILE; break;
2285 }
2286 image += SlopeToSpriteOffset(ti->tileh);
2287 }
2288 } else {
2289 if (ti->tileh != SLOPE_FLAT) {
2290 /* track on non-flat ground */
2291 image = _track_sloped_sprites[ti->tileh - 1] + rti->base_sprites.track_y;
2292 } else {
2293 /* track on flat ground */
2294 switch (track) {
2295 /* single track, select combined track + ground sprite*/
2296 case TRACK_BIT_Y: image = rti->base_sprites.track_y; break;
2297 case TRACK_BIT_X: image = rti->base_sprites.track_y + 1; break;
2298 case TRACK_BIT_UPPER: image = rti->base_sprites.track_y + 2; break;

Callers 1

DrawTile_TrackFunction · 0.85

Calls 15

GetRailTypeInfoFunction · 0.85
GetRailTypeFunction · 0.85
DrawTrackBitsOverlayFunction · 0.85
GetRailGroundTypeFunction · 0.85
GetRailFoundationFunction · 0.85
GetHighestSlopeCornerFunction · 0.85
CornerToTrackBitsFunction · 0.85
DrawFoundationFunction · 0.85
IsSteepSlopeFunction · 0.85
DrawShoreTileFunction · 0.85

Tested by

no test coverage detected