* Draw track fences. * @param ti Tile drawing information. * @param rti Rail type information. */
| 1990 | * @param rti Rail type information. |
| 1991 | */ |
| 1992 | static void DrawTrackDetails(const TileInfo *ti, const RailTypeInfo *rti, PaletteID pal) |
| 1993 | { |
| 1994 | /* Base sprite for track fences. |
| 1995 | * Note: Halftile slopes only have fences on the upper part. */ |
| 1996 | uint num_sprites = 0; |
| 1997 | PalSpriteID psid{ |
| 1998 | .sprite = GetCustomRailSprite(rti, ti->tile, RTSG_FENCES, IsHalftileSlope(ti->tileh) ? TCX_UPPER_HALFTILE : TCX_NORMAL, &num_sprites), |
| 1999 | .pal = pal, |
| 2000 | }; |
| 2001 | if (psid.sprite == 0) { |
| 2002 | psid.sprite = SPR_TRACK_FENCE_FLAT_X; |
| 2003 | num_sprites = 8; |
| 2004 | } |
| 2005 | |
| 2006 | assert(num_sprites > 0); |
| 2007 | |
| 2008 | switch (GetRailGroundType(ti->tile)) { |
| 2009 | case RailGroundType::FenceNW: DrawTrackFence_NW(ti, psid, num_sprites); break; |
| 2010 | case RailGroundType::FenceSE: DrawTrackFence_SE(ti, psid, num_sprites); break; |
| 2011 | case RailGroundType::FenceSENW: DrawTrackFence_NW(ti, psid, num_sprites); |
| 2012 | DrawTrackFence_SE(ti, psid, num_sprites); break; |
| 2013 | case RailGroundType::FenceNE: DrawTrackFence_NE(ti, psid, num_sprites); break; |
| 2014 | case RailGroundType::FenceSW: DrawTrackFence_SW(ti, psid, num_sprites); break; |
| 2015 | case RailGroundType::FenceNESW: DrawTrackFence_NE(ti, psid, num_sprites); |
| 2016 | DrawTrackFence_SW(ti, psid, num_sprites); break; |
| 2017 | case RailGroundType::FenceVert1: DrawTrackFence(ti, psid, num_sprites, RFO_FLAT_LEFT); break; |
| 2018 | case RailGroundType::FenceVert2: DrawTrackFence(ti, psid, num_sprites, RFO_FLAT_RIGHT); break; |
| 2019 | case RailGroundType::FenceHoriz1: DrawTrackFence(ti, psid, num_sprites, RFO_FLAT_UPPER); break; |
| 2020 | case RailGroundType::FenceHoriz2: DrawTrackFence(ti, psid, num_sprites, RFO_FLAT_LOWER); break; |
| 2021 | case RailGroundType::HalfTileWater: { |
| 2022 | Corner track_corner; |
| 2023 | if (IsHalftileSlope(ti->tileh)) { |
| 2024 | /* Steep slope or one-corner-raised slope with halftile foundation */ |
| 2025 | track_corner = GetHalftileSlopeCorner(ti->tileh); |
| 2026 | } else { |
| 2027 | /* Three-corner-raised slope */ |
| 2028 | track_corner = OppositeCorner(GetHighestSlopeCorner(ComplementSlope(ti->tileh))); |
| 2029 | } |
| 2030 | switch (track_corner) { |
| 2031 | case CORNER_W: DrawTrackFence(ti, psid, num_sprites, RFO_FLAT_LEFT); break; |
| 2032 | case CORNER_S: DrawTrackFence(ti, psid, num_sprites, RFO_FLAT_LOWER); break; |
| 2033 | case CORNER_E: DrawTrackFence(ti, psid, num_sprites, RFO_FLAT_RIGHT); break; |
| 2034 | case CORNER_N: DrawTrackFence(ti, psid, num_sprites, RFO_FLAT_UPPER); break; |
| 2035 | default: NOT_REACHED(); |
| 2036 | } |
| 2037 | break; |
| 2038 | } |
| 2039 | default: break; |
| 2040 | } |
| 2041 | } |
| 2042 | |
| 2043 | /* SubSprite for drawing the track halftile of 'three-corners-raised'-sloped rail sprites. */ |
| 2044 | static const int INF = 1000; // big number compared to tilesprite size |
no test coverage detected