From fea101289c032b900f44d56c070381341ca53bf0 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 6 Mar 2022 17:33:02 +0000 Subject: [PATCH] Save invisible flags to config --- src/openrct2-ui/windows/Main.cpp | 28 +++++++++++++++++++++--- src/openrct2-ui/windows/Transparency.cpp | 12 ++++++++++ src/openrct2/config/Config.cpp | 14 ++++++++++++ src/openrct2/config/Config.h | 7 ++++++ 4 files changed, 58 insertions(+), 3 deletions(-) diff --git a/src/openrct2-ui/windows/Main.cpp b/src/openrct2-ui/windows/Main.cpp index b4838440c0..8b6be0cee5 100644 --- a/src/openrct2-ui/windows/Main.cpp +++ b/src/openrct2-ui/windows/Main.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -20,7 +21,8 @@ static rct_widget window_main_widgets[] = { WIDGETS_END, }; -void WindowMainPaint(rct_window *w, rct_drawpixelinfo *dpi); +static void WindowMainSetViewportFlags(rct_viewport& viewport); +static void WindowMainPaint(rct_window *w, rct_drawpixelinfo *dpi); static rct_window_event_list window_main_events([](auto& events) { @@ -42,7 +44,10 @@ rct_window* WindowMainOpen() window->widgets = window_main_widgets; viewport_create(window, window->windowPos, window->width, window->height, Focus(CoordsXYZ(0x0FFF, 0x0FFF, 0))); - window->viewport->flags |= VIEWPORT_FLAG_SOUND_ON; + if (window->viewport != nullptr) + { + WindowMainSetViewportFlags(*window->viewport); + } gCurrentRotation = 0; gShowGridLinesRefCount = 0; gShowLandRightsRefCount = 0; @@ -52,13 +57,30 @@ rct_window* WindowMainOpen() return window; } +static void WindowMainSetViewportFlags(rct_viewport& viewport) +{ + viewport.flags |= VIEWPORT_FLAG_SOUND_ON; + if (gConfigGeneral.invisible_rides) + viewport.flags |= VIEWPORT_FLAG_INVISIBLE_RIDES; + if (gConfigGeneral.invisible_vehicles) + viewport.flags |= VIEWPORT_FLAG_INVISIBLE_VEHICLES; + if (gConfigGeneral.invisible_trees) + viewport.flags |= VIEWPORT_FLAG_INVISIBLE_TREES; + if (gConfigGeneral.invisible_scenery) + viewport.flags |= VIEWPORT_FLAG_INVISIBLE_SCENERY; + if (gConfigGeneral.invisible_paths) + viewport.flags |= VIEWPORT_FLAG_INVISIBLE_PATHS; + if (gConfigGeneral.invisible_supports) + viewport.flags |= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; +} + /** * * rct2: 0x66CCAE * This function immediately jumps to 0x00685BE1 this is the second function * decompiled. */ -void WindowMainPaint(rct_window* w, rct_drawpixelinfo* dpi) +static void WindowMainPaint(rct_window* w, rct_drawpixelinfo* dpi) { viewport_render(dpi, w->viewport, { { dpi->x, dpi->y }, { dpi->x + dpi->width, dpi->y + dpi->height } }); } diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index 54975c0e2f..fbc48655e3 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -183,21 +183,33 @@ private: break; case WIDX_INVISIBLE_RIDES: wflags ^= VIEWPORT_FLAG_INVISIBLE_RIDES; + gConfigGeneral.invisible_rides = wflags & VIEWPORT_FLAG_INVISIBLE_RIDES; + config_save_default(); break; case WIDX_INVISIBLE_VEHICLES: wflags ^= VIEWPORT_FLAG_INVISIBLE_VEHICLES; + gConfigGeneral.invisible_vehicles = wflags & VIEWPORT_FLAG_INVISIBLE_VEHICLES; + config_save_default(); break; case WIDX_INVISIBLE_SCENERY: wflags ^= VIEWPORT_FLAG_INVISIBLE_SCENERY; + gConfigGeneral.invisible_scenery = wflags & VIEWPORT_FLAG_INVISIBLE_SCENERY; + config_save_default(); break; case WIDX_INVISIBLE_TREES: wflags ^= VIEWPORT_FLAG_INVISIBLE_TREES; + gConfigGeneral.invisible_trees = wflags & VIEWPORT_FLAG_INVISIBLE_TREES; + config_save_default(); break; case WIDX_INVISIBLE_PATHS: wflags ^= VIEWPORT_FLAG_INVISIBLE_PATHS; + gConfigGeneral.invisible_paths = wflags & VIEWPORT_FLAG_INVISIBLE_PATHS; + config_save_default(); break; case WIDX_INVISIBLE_SUPPORTS: wflags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; + gConfigGeneral.invisible_supports = wflags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS; + config_save_default(); break; case WIDX_INVISIBLE_GUESTS: wflags ^= VIEWPORT_FLAG_HIDE_GUESTS; diff --git a/src/openrct2/config/Config.cpp b/src/openrct2/config/Config.cpp index 0b509b91d9..bc3af9af21 100644 --- a/src/openrct2/config/Config.cpp +++ b/src/openrct2/config/Config.cpp @@ -216,6 +216,14 @@ namespace Config model->allow_early_completion = reader->GetBoolean("allow_early_completion", false); model->transparent_screenshot = reader->GetBoolean("transparent_screenshot", true); model->transparent_water = reader->GetBoolean("transparent_water", true); + + model->invisible_rides = reader->GetBoolean("invisible_rides", false); + model->invisible_vehicles = reader->GetBoolean("invisible_vehicles", false); + model->invisible_trees = reader->GetBoolean("invisible_trees", false); + model->invisible_scenery = reader->GetBoolean("invisible_scenery", false); + model->invisible_paths = reader->GetBoolean("invisible_paths", false); + model->invisible_supports = reader->GetBoolean("invisible_supports", false); + model->last_version_check_time = reader->GetInt64("last_version_check_time", 0); } } @@ -293,6 +301,12 @@ namespace Config writer->WriteEnum("virtual_floor_style", model->virtual_floor_style, Enum_VirtualFloorStyle); writer->WriteBoolean("transparent_screenshot", model->transparent_screenshot); writer->WriteBoolean("transparent_water", model->transparent_water); + writer->WriteBoolean("invisible_rides", model->invisible_rides); + writer->WriteBoolean("invisible_vehicles", model->invisible_vehicles); + writer->WriteBoolean("invisible_trees", model->invisible_trees); + writer->WriteBoolean("invisible_scenery", model->invisible_scenery); + writer->WriteBoolean("invisible_paths", model->invisible_paths); + writer->WriteBoolean("invisible_supports", model->invisible_supports); writer->WriteInt64("last_version_check_time", model->last_version_check_time); } diff --git a/src/openrct2/config/Config.h b/src/openrct2/config/Config.h index 9dc7d55c61..8a9b5fd7c8 100644 --- a/src/openrct2/config/Config.h +++ b/src/openrct2/config/Config.h @@ -60,6 +60,13 @@ struct GeneralConfiguration bool transparent_screenshot; bool transparent_water; + bool invisible_rides; + bool invisible_vehicles; + bool invisible_trees; + bool invisible_scenery; + bool invisible_paths; + bool invisible_supports; + // Localisation int32_t language; MeasurementFormat measurement_format;