* Draw ground sprite and track bits * @param ti TileInfo * @param track TrackBits to draw */
| 2239 | * @param track TrackBits to draw |
| 2240 | */ |
| 2241 | static 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; |
no test coverage detected