diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 48bdaeb6ef..d901b7bf02 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,6 +1,7 @@ 0.4.1 (in development) ------------------------------------------------------------------------ - Fix: [#16974] Small scenery ghosts can be deleted. +- Improved: [#17050] Transparency can be enabled directly without needing see-through enabled first. - Removed: [#16864] Title sequence editor (replaced by plug-in). 0.4.0 (2022-04-25) diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index 7a324b472b..2bc06dd51c 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -156,6 +156,17 @@ public: } private: + uint32_t ToggleTransparency(uint32_t wflags, uint32_t transparencyFlag, uint32_t seeThroughFlag) + { + wflags ^= transparencyFlag; + if (wflags & transparencyFlag) + { + wflags |= seeThroughFlag; + } + SaveInConfig(wflags); + return wflags; + } + void ToggleViewportFlag(rct_widgetindex widgetIndex) { uint32_t wflags = 0; @@ -187,34 +198,22 @@ private: wflags ^= VIEWPORT_FLAG_HIDE_SUPPORTS; break; case WIDX_INVISIBLE_RIDES: - wflags ^= VIEWPORT_FLAG_INVISIBLE_RIDES; - gConfigGeneral.invisible_rides = wflags & VIEWPORT_FLAG_INVISIBLE_RIDES; - config_save_default(); + wflags = ToggleTransparency(wflags, VIEWPORT_FLAG_INVISIBLE_RIDES, VIEWPORT_FLAG_HIDE_RIDES); break; case WIDX_INVISIBLE_VEHICLES: - wflags ^= VIEWPORT_FLAG_INVISIBLE_VEHICLES; - gConfigGeneral.invisible_vehicles = wflags & VIEWPORT_FLAG_INVISIBLE_VEHICLES; - config_save_default(); + wflags = ToggleTransparency(wflags, VIEWPORT_FLAG_INVISIBLE_VEHICLES, VIEWPORT_FLAG_HIDE_VEHICLES); break; case WIDX_INVISIBLE_SCENERY: - wflags ^= VIEWPORT_FLAG_INVISIBLE_SCENERY; - gConfigGeneral.invisible_scenery = wflags & VIEWPORT_FLAG_INVISIBLE_SCENERY; - config_save_default(); + wflags = ToggleTransparency(wflags, VIEWPORT_FLAG_INVISIBLE_SCENERY, VIEWPORT_FLAG_HIDE_SCENERY); break; case WIDX_INVISIBLE_VEGETATION: - wflags ^= VIEWPORT_FLAG_INVISIBLE_VEGETATION; - gConfigGeneral.invisible_trees = wflags & VIEWPORT_FLAG_INVISIBLE_VEGETATION; - config_save_default(); + wflags = ToggleTransparency(wflags, VIEWPORT_FLAG_INVISIBLE_VEGETATION, VIEWPORT_FLAG_HIDE_VEGETATION); break; case WIDX_INVISIBLE_PATHS: - wflags ^= VIEWPORT_FLAG_INVISIBLE_PATHS; - gConfigGeneral.invisible_paths = wflags & VIEWPORT_FLAG_INVISIBLE_PATHS; - config_save_default(); + wflags = ToggleTransparency(wflags, VIEWPORT_FLAG_INVISIBLE_PATHS, VIEWPORT_FLAG_HIDE_PATHS); break; case WIDX_INVISIBLE_SUPPORTS: - wflags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; - gConfigGeneral.invisible_supports = wflags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS; - config_save_default(); + wflags = ToggleTransparency(wflags, VIEWPORT_FLAG_INVISIBLE_SUPPORTS, VIEWPORT_FLAG_HIDE_SUPPORTS); break; case WIDX_HIDE_GUESTS: wflags ^= VIEWPORT_FLAG_HIDE_GUESTS; @@ -232,6 +231,17 @@ private: w->viewport->flags = wflags; w->Invalidate(); } + + void SaveInConfig(uint32_t wflags) + { + gConfigGeneral.invisible_rides = wflags & VIEWPORT_FLAG_INVISIBLE_RIDES; + gConfigGeneral.invisible_vehicles = wflags & VIEWPORT_FLAG_INVISIBLE_VEHICLES; + gConfigGeneral.invisible_scenery = wflags & VIEWPORT_FLAG_INVISIBLE_SCENERY; + gConfigGeneral.invisible_trees = wflags & VIEWPORT_FLAG_INVISIBLE_VEGETATION; + gConfigGeneral.invisible_paths = wflags & VIEWPORT_FLAG_INVISIBLE_PATHS; + gConfigGeneral.invisible_supports = wflags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS; + config_save_default(); + } }; rct_window* WindowTransparencyOpen()