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

Function DrawTrackDetails

src/rail_cmd.cpp:1992–2041  ·  view source on GitHub ↗

* Draw track fences. * @param ti Tile drawing information. * @param rti Rail type information. */

Source from the content-addressed store, hash-verified

1990 * @param rti Rail type information.
1991 */
1992static 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. */
2044static const int INF = 1000; // big number compared to tilesprite size

Callers 1

DrawTile_TrackFunction · 0.85

Calls 13

GetCustomRailSpriteFunction · 0.85
IsHalftileSlopeFunction · 0.85
GetRailGroundTypeFunction · 0.85
DrawTrackFence_NWFunction · 0.85
DrawTrackFence_SEFunction · 0.85
DrawTrackFence_NEFunction · 0.85
DrawTrackFence_SWFunction · 0.85
DrawTrackFenceFunction · 0.85
GetHalftileSlopeCornerFunction · 0.85
OppositeCornerFunction · 0.85
GetHighestSlopeCornerFunction · 0.85
ComplementSlopeFunction · 0.85

Tested by

no test coverage detected