diff --git a/src/openrct2/paint/tile_element/Paint.Path.cpp b/src/openrct2/paint/tile_element/Paint.Path.cpp index 00f5d84b8a..c7908ed672 100644 --- a/src/openrct2/paint/tile_element/Paint.Path.cpp +++ b/src/openrct2/paint/tile_element/Paint.Path.cpp @@ -991,7 +991,7 @@ void path_paint_box_support( paint_session* session, const TileElement* tileElement, int32_t height, PathSurfaceEntry* footpathEntry, PathRailingsEntry* railingEntry, bool hasSupports, uint32_t imageFlags, uint32_t sceneryImageFlags) { - PathElement* pathElement = tileElement->AsPath(); + const PathElement* pathElement = tileElement->AsPath(); // Rol edges around rotation uint8_t edges = ((tileElement->AsPath()->GetEdges() << session->CurrentRotation) & 0xF) @@ -1141,7 +1141,7 @@ void path_paint_pole_support( paint_session* session, const TileElement* tileElement, int16_t height, PathSurfaceEntry* footpathEntry, PathRailingsEntry* railingEntry, bool hasSupports, uint32_t imageFlags, uint32_t sceneryImageFlags) { - PathElement* pathElement = tileElement->AsPath(); + const PathElement* pathElement = tileElement->AsPath(); // Rol edges around rotation uint8_t edges = ((tileElement->AsPath()->GetEdges() << session->CurrentRotation) & 0xF) diff --git a/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp b/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp index c580bca2a2..4a84cc2b05 100644 --- a/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp +++ b/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp @@ -36,7 +36,7 @@ void scenery_paint(paint_session* session, uint8_t direction, int32_t height, co { return; } - SmallSceneryElement* sceneryElement = tileElement->AsSmallScenery(); + const SmallSceneryElement* sceneryElement = tileElement->AsSmallScenery(); session->InteractionType = VIEWPORT_INTERACTION_ITEM_SCENERY; LocationXYZ16 boxlength; LocationXYZ16 boxoffset; diff --git a/src/openrct2/rct12/RCT12.h b/src/openrct2/rct12/RCT12.h index 39e1212413..932e75ccae 100644 --- a/src/openrct2/rct12/RCT12.h +++ b/src/openrct2/rct12/RCT12.h @@ -301,42 +301,76 @@ struct RCT12TileElementBase struct RCT12TileElement : public RCT12TileElementBase { uint8_t pad_04[4]; - template TType* as() const + template const TType* as() const { - return static_cast(GetType()) == TClass - ? reinterpret_cast(const_cast(this)) - : nullptr; + return static_cast(GetType()) == TClass ? reinterpret_cast(this) : nullptr; + } + template TType* as() + { + return static_cast(GetType()) == TClass ? reinterpret_cast(this) : nullptr; } - RCT12SurfaceElement* AsSurface() const + const RCT12SurfaceElement* AsSurface() const { return as(); } - RCT12PathElement* AsPath() const + RCT12SurfaceElement* AsSurface() + { + return as(); + } + const RCT12PathElement* AsPath() const { return as(); } - RCT12TrackElement* AsTrack() const + RCT12PathElement* AsPath() + { + return as(); + } + const RCT12TrackElement* AsTrack() const { return as(); } - RCT12SmallSceneryElement* AsSmallScenery() const + RCT12TrackElement* AsTrack() + { + return as(); + } + const RCT12SmallSceneryElement* AsSmallScenery() const { return as(); } - RCT12LargeSceneryElement* AsLargeScenery() const + RCT12SmallSceneryElement* AsSmallScenery() + { + return as(); + } + const RCT12LargeSceneryElement* AsLargeScenery() const { return as(); } - RCT12WallElement* AsWall() const + RCT12LargeSceneryElement* AsLargeScenery() + { + return as(); + } + const RCT12WallElement* AsWall() const { return as(); } - RCT12EntranceElement* AsEntrance() const + RCT12WallElement* AsWall() + { + return as(); + } + const RCT12EntranceElement* AsEntrance() const { return as(); } - RCT12BannerElement* AsBanner() const + RCT12EntranceElement* AsEntrance() + { + return as(); + } + const RCT12BannerElement* AsBanner() const + { + return as(); + } + RCT12BannerElement* AsBanner() { return as(); } diff --git a/src/openrct2/world/Footpath.cpp b/src/openrct2/world/Footpath.cpp index 8365e6d620..b1a4db7eae 100644 --- a/src/openrct2/world/Footpath.cpp +++ b/src/openrct2/world/Footpath.cpp @@ -1616,7 +1616,7 @@ void PathElement::SetQueueBannerDirection(uint8_t direction) type |= (direction << 6); } -bool PathElement::ShouldDrawPathOverSupports() +bool PathElement::ShouldDrawPathOverSupports() const { return (GetRailingEntry()->flags & RAILING_ENTRY_FLAG_DRAW_PATH_OVER_SUPPORTS); } diff --git a/src/openrct2/world/TileElement.h b/src/openrct2/world/TileElement.h index 77fc52e552..f25410d3d9 100644 --- a/src/openrct2/world/TileElement.h +++ b/src/openrct2/world/TileElement.h @@ -105,42 +105,77 @@ struct TileElement : public TileElementBase uint8_t pad_04[4]; uint8_t pad_08[8]; - template TType* as() const + template const TType* as() const { - return static_cast(GetType()) == TClass ? reinterpret_cast(const_cast(this)) - : nullptr; + return static_cast(GetType()) == TClass ? reinterpret_cast(this) : nullptr; + } + template TType* as() + { + return static_cast(GetType()) == TClass ? reinterpret_cast(this) : nullptr; } public: - SurfaceElement* AsSurface() const + const SurfaceElement* AsSurface() const { return as(); } - PathElement* AsPath() const + SurfaceElement* AsSurface() + { + return as(); + } + const PathElement* AsPath() const { return as(); } - TrackElement* AsTrack() const + PathElement* AsPath() + { + return as(); + } + const TrackElement* AsTrack() const { return as(); } - SmallSceneryElement* AsSmallScenery() const + TrackElement* AsTrack() + { + return as(); + } + const SmallSceneryElement* AsSmallScenery() const { return as(); } - LargeSceneryElement* AsLargeScenery() const + SmallSceneryElement* AsSmallScenery() + { + return as(); + } + const LargeSceneryElement* AsLargeScenery() const { return as(); } - WallElement* AsWall() const + LargeSceneryElement* AsLargeScenery() + { + return as(); + } + const WallElement* AsWall() const { return as(); } - EntranceElement* AsEntrance() const + WallElement* AsWall() + { + return as(); + } + const EntranceElement* AsEntrance() const { return as(); } - BannerElement* AsBanner() const + EntranceElement* AsEntrance() + { + return as(); + } + const BannerElement* AsBanner() const + { + return as(); + } + BannerElement* AsBanner() { return as(); } @@ -274,7 +309,7 @@ public: uint8_t GetAdditionStatus() const; void SetAdditionStatus(uint8_t newStatus); - bool ShouldDrawPathOverSupports(); + bool ShouldDrawPathOverSupports() const; void SetShouldDrawPathOverSupports(bool on); bool IsLevelCrossing(const CoordsXY& coords) const;