From 20cd8465f5dc9b9da59d4f5cdf1c2d7071bbca6f Mon Sep 17 00:00:00 2001 From: Kane Date: Sat, 23 Oct 2021 20:53:13 +1100 Subject: [PATCH] Code cleanup, remove ignore_invisible_flag. Known issues: - Some flat-rides have transparency issues --- src/openrct2-ui/windows/Transparency.cpp | 82 ++++++++++--------- src/openrct2/interface/Viewport.h | 2 - src/openrct2/paint/Paint.Entity.cpp | 2 +- .../paint/tile_element/Paint.Entrance.cpp | 3 +- src/openrct2/ride/Ride.h | 1 - src/openrct2/ride/TrackPaint.cpp | 3 +- 6 files changed, 47 insertions(+), 46 deletions(-) diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index 765c262063..735af25299 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -121,96 +121,102 @@ public: void OnPrepareDraw() override { + uint32_t wflags = 0; + rct_window* w = window_get_main(); + pressed_widgets = 0; disabled_widgets = 0; - rct_window* w = window_get_main(); - if (w == nullptr) - return; + if (w != nullptr) + wflags = w->viewport->flags; - SetWidgetPressed(WIDX_SEE_THROUGH_RIDES, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES)); - SetWidgetPressed(WIDX_SEE_THROUGH_VEHICLES, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES)); - SetWidgetPressed(WIDX_SEE_THROUGH_SCENERY, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_SCENERY)); - SetWidgetPressed(WIDX_SEE_THROUGH_TREES, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_TREES)); - SetWidgetPressed(WIDX_SEE_THROUGH_PATHS, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_PATHS)); - SetWidgetPressed(WIDX_SEE_THROUGH_SUPPORTS, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS)); - SetWidgetPressed(WIDX_INVISIBLE_RIDES, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_RIDES)); - SetWidgetPressed(WIDX_INVISIBLE_VEHICLES, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_VEHICLES)); - SetWidgetPressed(WIDX_INVISIBLE_SCENERY, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SCENERY)); - SetWidgetPressed(WIDX_INVISIBLE_TREES, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_TREES)); - SetWidgetPressed(WIDX_INVISIBLE_PATHS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PATHS)); - SetWidgetPressed(WIDX_INVISIBLE_SUPPORTS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)); - SetWidgetPressed(WIDX_INVISIBLE_GUESTS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_GUESTS)); - SetWidgetPressed(WIDX_INVISIBLE_STAFF, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_STAFF)); + SetWidgetPressed(WIDX_SEE_THROUGH_RIDES, (wflags & VIEWPORT_FLAG_SEETHROUGH_RIDES)); + SetWidgetPressed(WIDX_SEE_THROUGH_VEHICLES, (wflags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES)); + SetWidgetPressed(WIDX_SEE_THROUGH_SCENERY, (wflags & VIEWPORT_FLAG_SEETHROUGH_SCENERY)); + SetWidgetPressed(WIDX_SEE_THROUGH_TREES, (wflags & VIEWPORT_FLAG_SEETHROUGH_TREES)); + SetWidgetPressed(WIDX_SEE_THROUGH_PATHS, (wflags & VIEWPORT_FLAG_SEETHROUGH_PATHS)); + SetWidgetPressed(WIDX_SEE_THROUGH_SUPPORTS, (wflags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS)); + SetWidgetPressed(WIDX_INVISIBLE_RIDES, (wflags & VIEWPORT_FLAG_INVISIBLE_RIDES)); + SetWidgetPressed(WIDX_INVISIBLE_VEHICLES, (wflags & VIEWPORT_FLAG_INVISIBLE_VEHICLES)); + SetWidgetPressed(WIDX_INVISIBLE_SCENERY, (wflags & VIEWPORT_FLAG_INVISIBLE_SCENERY)); + SetWidgetPressed(WIDX_INVISIBLE_TREES, (wflags & VIEWPORT_FLAG_INVISIBLE_TREES)); + SetWidgetPressed(WIDX_INVISIBLE_PATHS, (wflags & VIEWPORT_FLAG_INVISIBLE_PATHS)); + SetWidgetPressed(WIDX_INVISIBLE_SUPPORTS, (wflags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)); + SetWidgetPressed(WIDX_INVISIBLE_GUESTS, (wflags & VIEWPORT_FLAG_INVISIBLE_GUESTS)); + SetWidgetPressed(WIDX_INVISIBLE_STAFF, (wflags & VIEWPORT_FLAG_INVISIBLE_STAFF)); } void OnDraw(rct_drawpixelinfo& dpi) override { DrawWidgets(dpi); // Locate mechanic button image - rct_widget* widget = &widgets[WIDX_INVISIBLE_STAFF]; - auto screenCoords = windowPos + ScreenCoordsXY{ widget->left, widget->top }; + const auto& widget = widgets[WIDX_INVISIBLE_STAFF]; + auto screenCoords = windowPos + ScreenCoordsXY{ widget.left, widget.top }; gfx_draw_sprite( &dpi, (gStaffMechanicColour << 24) | IMAGE_TYPE_REMAP | IMAGE_TYPE_REMAP_2_PLUS | SPR_MECHANIC, screenCoords, 0); } - OpenRCT2String OnTooltip(rct_widgetindex widgetIndex, rct_string_id fallback) override - { - return { fallback, {} }; - } - private: void OnMouseUpMain(rct_widgetindex widgetIndex) { + uint32_t wflags = 0; rct_window* w = window_get_main(); + if (w == nullptr) return; + wflags = w->viewport->flags; + switch (widgetIndex) { case WIDX_SEE_THROUGH_RIDES: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; + wflags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; break; case WIDX_SEE_THROUGH_VEHICLES: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_VEHICLES; + wflags ^= VIEWPORT_FLAG_SEETHROUGH_VEHICLES; break; case WIDX_SEE_THROUGH_SCENERY: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_SCENERY; + wflags ^= VIEWPORT_FLAG_SEETHROUGH_SCENERY; break; case WIDX_SEE_THROUGH_TREES: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_TREES; + wflags ^= VIEWPORT_FLAG_SEETHROUGH_TREES; break; case WIDX_SEE_THROUGH_PATHS: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_PATHS; + wflags ^= VIEWPORT_FLAG_SEETHROUGH_PATHS; break; case WIDX_SEE_THROUGH_SUPPORTS: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_SUPPORTS; + wflags ^= VIEWPORT_FLAG_SEETHROUGH_SUPPORTS; break; case WIDX_INVISIBLE_RIDES: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_RIDES; + wflags ^= VIEWPORT_FLAG_INVISIBLE_RIDES; break; case WIDX_INVISIBLE_VEHICLES: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_VEHICLES; + wflags ^= VIEWPORT_FLAG_INVISIBLE_VEHICLES; break; case WIDX_INVISIBLE_SCENERY: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SCENERY; + wflags ^= VIEWPORT_FLAG_INVISIBLE_SCENERY; break; case WIDX_INVISIBLE_TREES: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_TREES; + wflags ^= VIEWPORT_FLAG_INVISIBLE_TREES; break; case WIDX_INVISIBLE_PATHS: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PATHS; + wflags ^= VIEWPORT_FLAG_INVISIBLE_PATHS; break; case WIDX_INVISIBLE_SUPPORTS: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; + wflags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; break; case WIDX_INVISIBLE_GUESTS: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_GUESTS; + wflags ^= VIEWPORT_FLAG_INVISIBLE_GUESTS; break; case WIDX_INVISIBLE_STAFF: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_STAFF; + wflags ^= VIEWPORT_FLAG_INVISIBLE_STAFF; break; } + + if (w->viewport->flags == wflags) + return; + + w->viewport->flags = wflags; w->Invalidate(); } }; diff --git a/src/openrct2/interface/Viewport.h b/src/openrct2/interface/Viewport.h index 4f223b9ee2..6347512325 100644 --- a/src/openrct2/interface/Viewport.h +++ b/src/openrct2/interface/Viewport.h @@ -40,7 +40,6 @@ enum VIEWPORT_FLAG_LAND_OWNERSHIP = (1 << 8), VIEWPORT_FLAG_CONSTRUCTION_RIGHTS = (1 << 9), VIEWPORT_FLAG_SOUND_ON = (1 << 10), - VIEWPORT_FLAG_INVISIBLE_PEEPS = (1 << 11), // No longer used (seperated into GUESTS and STAFF) VIEWPORT_FLAG_HIDE_BASE = (1 << 12), VIEWPORT_FLAG_HIDE_VERTICAL = (1 << 13), VIEWPORT_FLAG_INVISIBLE_SPRITES = (1 << 14), @@ -59,7 +58,6 @@ enum VIEWPORT_FLAG_SEETHROUGH_TREES = (1 << 27), VIEWPORT_FLAG_INVISIBLE_TREES = (1 << 28), VIEWPORT_FLAG_SEETHROUGH_SUPPORTS = (1 << 29), - VIEWPORT_FLAG_TRANSPARENCY_FOREGROUND = (1 << 30), }; enum class ViewportInteractionItem : uint8_t diff --git a/src/openrct2/paint/Paint.Entity.cpp b/src/openrct2/paint/Paint.Entity.cpp index e7c1c76f5e..f5a9fea625 100644 --- a/src/openrct2/paint/Paint.Entity.cpp +++ b/src/openrct2/paint/Paint.Entity.cpp @@ -79,7 +79,7 @@ void EntityPaintSetup(paint_session& session, const CoordsXY& pos) if (veh != nullptr) { auto ride = get_ride(veh->ride); - if (ride != nullptr && !ride->ignore_invisible_flag) + if (ride != nullptr) return; } } diff --git a/src/openrct2/paint/tile_element/Paint.Entrance.cpp b/src/openrct2/paint/tile_element/Paint.Entrance.cpp index 06083f03f7..12f7623e8f 100644 --- a/src/openrct2/paint/tile_element/Paint.Entrance.cpp +++ b/src/openrct2/paint/tile_element/Paint.Entrance.cpp @@ -125,8 +125,7 @@ static void PaintRideEntranceExit(paint_session& session, uint8_t direction, int return; } - if ((session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) && (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) - && !ride->ignore_invisible_flag) + if ((session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) && (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES)) return; auto stationObj = ride->GetStationObject(); diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index e160844250..53854975cf 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -287,7 +287,6 @@ public: uint16_t inversions; uint16_t holes; uint8_t sheltered_eighths; - bool ignore_invisible_flag = false; std::unique_ptr measurement; diff --git a/src/openrct2/ride/TrackPaint.cpp b/src/openrct2/ride/TrackPaint.cpp index f13ed0bee8..385f0f10d4 100644 --- a/src/openrct2/ride/TrackPaint.cpp +++ b/src/openrct2/ride/TrackPaint.cpp @@ -2195,8 +2195,7 @@ void PaintTrack(paint_session& session, Direction direction, int32_t height, con return; } - if ((session->ViewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES && session->ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) - && ride->ignore_invisible_flag == false) + if (session->ViewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES && session->ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) return; if ((!gTrackDesignSaveMode || rideIndex == gTrackDesignSaveRideIndex)