From 9f78c6f0ce3ca08dc2bffb274d13770b5474df0d Mon Sep 17 00:00:00 2001 From: Kane Date: Mon, 2 Aug 2021 00:12:57 +1000 Subject: [PATCH 01/27] Add option to see-through vehicles --- data/language/en-GB.txt | 1 + src/openrct2-ui/windows/TopToolbar.cpp | 25 ++++++++++++++--------- src/openrct2/interface/Viewport.cpp | 3 ++- src/openrct2/interface/Viewport.h | 1 + src/openrct2/localisation/StringIds.h | 2 ++ src/openrct2/paint/Paint.cpp | 28 ++++++++++++++++++++++---- 6 files changed, 46 insertions(+), 14 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index ca7d4cbfa5..0ff7c6b9f1 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3659,6 +3659,7 @@ STR_6467 :Nausea: {COMMA2DP32} STR_6468 :Not Yet Known STR_6469 :Adjust smaller area of patrol area STR_6470 :Adjust larger area of patrol area +STR_6471 :See-Through Vehicles ############# # Scenarios # diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index 52e71f0852..40507e95e9 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -137,17 +137,18 @@ enum TopToolbarViewMenuDdidx DDIDX_HIDE_VERTICAL = 3, // separator DDIDX_SEETHROUGH_RIDES = 5, - DDIDX_SEETHROUGH_SCENERY = 6, - DDIDX_SEETHROUGH_PATHS = 7, - DDIDX_INVISIBLE_SUPPORTS = 8, - DDIDX_INVISIBLE_PEEPS = 9, + DDIDX_SEETHROUGH_VEHICLES = 6, + DDIDX_SEETHROUGH_SCENERY = 7, + DDIDX_SEETHROUGH_PATHS = 8, + DDIDX_INVISIBLE_SUPPORTS = 9, + DDIDX_INVISIBLE_PEEPS = 10, // separator - DDIDX_LAND_HEIGHTS = 11, - DDIDX_TRACK_HEIGHTS = 12, - DDIDX_PATH_HEIGHTS = 13, + DDIDX_LAND_HEIGHTS = 12, + DDIDX_TRACK_HEIGHTS = 13, + DDIDX_PATH_HEIGHTS = 14, // separator - DDIDX_VIEW_CLIPPING = 15, - DDIDX_HIGHLIGHT_PATH_ISSUES = 16, + DDIDX_VIEW_CLIPPING = 16, + DDIDX_HIGHLIGHT_PATH_ISSUES = 17, TOP_TOOLBAR_VIEW_MENU_COUNT, }; @@ -3624,6 +3625,7 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) ToggleOption(DDIDX_HIDE_VERTICAL, STR_REMOVE_VERTICAL_FACES), Separator(), ToggleOption(DDIDX_SEETHROUGH_RIDES, STR_SEE_THROUGH_RIDES), + ToggleOption(DDIDX_SEETHROUGH_VEHICLES, STR_SEE_THROUGH_VEHICLES), ToggleOption(DDIDX_SEETHROUGH_SCENERY, STR_SEE_THROUGH_SCENERY), ToggleOption(DDIDX_SEETHROUGH_PATHS, STR_SEE_THROUGH_PATHS), ToggleOption(DDIDX_INVISIBLE_SUPPORTS, STR_INVISIBLE_SUPPORTS), @@ -3657,6 +3659,8 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) Dropdown::SetChecked(DDIDX_HIDE_VERTICAL, true); if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES) Dropdown::SetChecked(DDIDX_SEETHROUGH_RIDES, true); + if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) + Dropdown::SetChecked(DDIDX_SEETHROUGH_VEHICLES, true); if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) Dropdown::SetChecked(DDIDX_SEETHROUGH_SCENERY, true); if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_PATHS) @@ -3712,6 +3716,9 @@ static void TopToolbarViewMenuDropdown(int16_t dropdownIndex) case DDIDX_SEETHROUGH_RIDES: w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; break; + case DDIDX_SEETHROUGH_VEHICLES: + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_VEHICLES; + break; case DDIDX_SEETHROUGH_SCENERY: w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_SCENERY; break; diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index bbda3980fb..cbf876bcae 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -1319,7 +1319,8 @@ void viewport_set_visibility(uint8_t mode) uint32_t mask = VIEWPORT_FLAG_UNDERGROUND_INSIDE | VIEWPORT_FLAG_SEETHROUGH_RIDES | VIEWPORT_FLAG_SEETHROUGH_SCENERY | VIEWPORT_FLAG_SEETHROUGH_PATHS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS | VIEWPORT_FLAG_LAND_HEIGHTS | VIEWPORT_FLAG_TRACK_HEIGHTS | VIEWPORT_FLAG_PATH_HEIGHTS - | VIEWPORT_FLAG_INVISIBLE_PEEPS | VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_HIDE_VERTICAL; + | VIEWPORT_FLAG_INVISIBLE_PEEPS | VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_HIDE_VERTICAL + | VIEWPORT_FLAG_SEETHROUGH_VEHICLES; invalidate += vp->flags & mask; vp->flags &= ~mask; diff --git a/src/openrct2/interface/Viewport.h b/src/openrct2/interface/Viewport.h index b2c655c195..4ad0369b58 100644 --- a/src/openrct2/interface/Viewport.h +++ b/src/openrct2/interface/Viewport.h @@ -49,6 +49,7 @@ enum VIEWPORT_FLAG_CLIP_VIEW = (1 << 17), VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES = (1 << 18), VIEWPORT_FLAG_TRANSPARENT_BACKGROUND = (1 << 19), + VIEWPORT_FLAG_SEETHROUGH_VEHICLES = (1 << 20), }; enum class ViewportInteractionItem : uint8_t diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index 5d34226047..a15cd40197 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3928,6 +3928,8 @@ enum : uint16_t STR_ADJUST_SMALLER_PATROL_AREA_TIP = 6469, STR_ADJUST_LARGER_PATROL_AREA_TIP = 6470, + STR_SEE_THROUGH_VEHICLES = 6471, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings }; diff --git a/src/openrct2/paint/Paint.cpp b/src/openrct2/paint/Paint.cpp index 84175fbc77..4001d22619 100644 --- a/src/openrct2/paint/Paint.cpp +++ b/src/openrct2/paint/Paint.cpp @@ -56,7 +56,7 @@ bool gPaintBlockedTiles; static void PaintAttachedPS(rct_drawpixelinfo* dpi, paint_struct* ps, uint32_t viewFlags); static void PaintPSImageWithBoundingBoxes(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId imageId, int32_t x, int32_t y); static void PaintPSImage(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId imageId, int32_t x, int32_t y); -static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem spriteType, uint32_t viewFlags); +static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem spriteType, EntityType entityType, uint32_t viewFlags); static int32_t RemapPositionToQuadrant(const paint_struct& ps, uint8_t rotation) { @@ -482,6 +482,17 @@ void PaintSessionArrange(PaintSessionCore& session) Guard::Assert(false); } +static EntityType GetEntityTypeFromPaintSession(const paint_struct* ps) +{ + auto entityType = EntityType::Null; + auto* entity = reinterpret_cast(ps->tileElement); + if (entity != nullptr) + { + entityType = entity->Type; + } + return entityType; +} + static void PaintDrawStruct(paint_session& session, paint_struct* ps) { rct_drawpixelinfo* dpi = &session.DPI; @@ -503,7 +514,8 @@ static void PaintDrawStruct(paint_session& session, paint_struct* ps) } } - auto imageId = PaintPSColourifyImage(ps->image_id, ps->sprite_type, session.ViewFlags); + auto entityType = GetEntityTypeFromPaintSession(ps); + auto imageId = PaintPSColourifyImage(ps->image_id, ps->sprite_type, entityType, session.ViewFlags); if (gPaintBoundingBoxes && dpi->zoom_level == ZoomLevel{ 0 }) { PaintPSImageWithBoundingBoxes(dpi, ps, imageId, x, y); @@ -553,7 +565,8 @@ static void PaintAttachedPS(rct_drawpixelinfo* dpi, paint_struct* ps, uint32_t v { auto screenCoords = ScreenCoordsXY{ attached_ps->x + ps->x, attached_ps->y + ps->y }; - auto imageId = PaintPSColourifyImage(attached_ps->image_id, ps->sprite_type, viewFlags); + auto entityType = GetEntityTypeFromPaintSession(ps); + auto imageId = PaintPSColourifyImage(attached_ps->image_id, ps->sprite_type, entityType, viewFlags); if (attached_ps->flags & PAINT_STRUCT_FLAG_IS_MASKED) { gfx_draw_sprite_raw_masked(dpi, screenCoords, imageId, attached_ps->colour_image_id); @@ -661,7 +674,7 @@ static void PaintPSImage(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId image gfx_draw_sprite(dpi, imageId, { x, y }); } -static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem spriteType, uint32_t viewFlags) +static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem spriteType, EntityType entityType, uint32_t viewFlags) { auto seeThrough = imageId.WithTransparancy(FilterPaletteID::PaletteDarken1); if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) @@ -671,6 +684,13 @@ static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem sp return seeThrough; } } + if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) + { + if (spriteType == ViewportInteractionItem::Entity && entityType == EntityType::Vehicle) + { + return seeThrough; + } + } if (viewFlags & VIEWPORT_FLAG_UNDERGROUND_INSIDE) { if (spriteType == ViewportInteractionItem::Wall) From 4856c3adafecc9f1622b7a5c6ee377d047b8c5c5 Mon Sep 17 00:00:00 2001 From: Kane Date: Thu, 5 Aug 2021 03:01:27 +1000 Subject: [PATCH 02/27] Implement invisible rides, paths & scenery --- data/language/en-GB.txt | 3 ++ src/openrct2-ui/windows/TopToolbar.cpp | 40 ++++++++++++++++++++------ src/openrct2/interface/Viewport.h | 3 ++ src/openrct2/localisation/StringIds.h | 3 ++ src/openrct2/paint/Paint.cpp | 35 ++++++++++++++++++++++ 5 files changed, 76 insertions(+), 8 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 0ff7c6b9f1..ff8dbde77d 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3660,6 +3660,9 @@ STR_6468 :Not Yet Known STR_6469 :Adjust smaller area of patrol area STR_6470 :Adjust larger area of patrol area STR_6471 :See-Through Vehicles +STR_6472 :Invisible Rides +STR_6473 :Invisible Scenery +STR_6474 :Invisible Paths ############# # Scenarios # diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index 40507e95e9..b55d9e06cd 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -140,15 +140,18 @@ enum TopToolbarViewMenuDdidx DDIDX_SEETHROUGH_VEHICLES = 6, DDIDX_SEETHROUGH_SCENERY = 7, DDIDX_SEETHROUGH_PATHS = 8, - DDIDX_INVISIBLE_SUPPORTS = 9, - DDIDX_INVISIBLE_PEEPS = 10, + DDIDX_INVISIBLE_RIDES = 9, + DDIDX_INVISIBLE_SCENERY = 10, + DDIDX_INVISIBLE_PATHS = 11, + DDIDX_INVISIBLE_SUPPORTS = 12, + DDIDX_INVISIBLE_PEEPS = 13, // separator - DDIDX_LAND_HEIGHTS = 12, - DDIDX_TRACK_HEIGHTS = 13, - DDIDX_PATH_HEIGHTS = 14, + DDIDX_LAND_HEIGHTS = 15, + DDIDX_TRACK_HEIGHTS = 16, + DDIDX_PATH_HEIGHTS = 17, // separator - DDIDX_VIEW_CLIPPING = 16, - DDIDX_HIGHLIGHT_PATH_ISSUES = 17, + DDIDX_VIEW_CLIPPING = 19, + DDIDX_HIGHLIGHT_PATH_ISSUES = 20, TOP_TOOLBAR_VIEW_MENU_COUNT, }; @@ -3628,6 +3631,9 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) ToggleOption(DDIDX_SEETHROUGH_VEHICLES, STR_SEE_THROUGH_VEHICLES), ToggleOption(DDIDX_SEETHROUGH_SCENERY, STR_SEE_THROUGH_SCENERY), ToggleOption(DDIDX_SEETHROUGH_PATHS, STR_SEE_THROUGH_PATHS), + ToggleOption(DDIDX_INVISIBLE_RIDES, STR_INVISIBLE_RIDES), + ToggleOption(DDIDX_INVISIBLE_SCENERY, STR_INVISIBLE_SCENERY), + ToggleOption(DDIDX_INVISIBLE_PATHS, STR_INVISIBLE_PATHS), ToggleOption(DDIDX_INVISIBLE_SUPPORTS, STR_INVISIBLE_SUPPORTS), ToggleOption(DDIDX_INVISIBLE_PEEPS, STR_INVISIBLE_PEOPLE), Separator(), @@ -3665,6 +3671,12 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) Dropdown::SetChecked(DDIDX_SEETHROUGH_SCENERY, true); if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_PATHS) Dropdown::SetChecked(DDIDX_SEETHROUGH_PATHS, true); + if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_RIDES) + Dropdown::SetChecked(DDIDX_INVISIBLE_RIDES, true); + if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_SCENERY) + Dropdown::SetChecked(DDIDX_INVISIBLE_SCENERY, true); + if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_PATHS) + Dropdown::SetChecked(DDIDX_INVISIBLE_PATHS, true); if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) Dropdown::SetChecked(DDIDX_INVISIBLE_SUPPORTS, true); if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS) @@ -3714,7 +3726,10 @@ static void TopToolbarViewMenuDropdown(int16_t dropdownIndex) w->viewport->flags ^= VIEWPORT_FLAG_HIDE_VERTICAL; break; case DDIDX_SEETHROUGH_RIDES: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; + if (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES) + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; + else + w->viewport->flags |= VIEWPORT_FLAG_SEETHROUGH_RIDES | VIEWPORT_FLAG_SEETHROUGH_VEHICLES; break; case DDIDX_SEETHROUGH_VEHICLES: w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_VEHICLES; @@ -3725,6 +3740,15 @@ static void TopToolbarViewMenuDropdown(int16_t dropdownIndex) case DDIDX_SEETHROUGH_PATHS: w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_PATHS; break; + case DDIDX_INVISIBLE_RIDES: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_RIDES; + break; + case DDIDX_INVISIBLE_SCENERY: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SCENERY; + break; + case DDIDX_INVISIBLE_PATHS: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PATHS; + break; case DDIDX_INVISIBLE_SUPPORTS: w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; break; diff --git a/src/openrct2/interface/Viewport.h b/src/openrct2/interface/Viewport.h index 4ad0369b58..750c065362 100644 --- a/src/openrct2/interface/Viewport.h +++ b/src/openrct2/interface/Viewport.h @@ -50,6 +50,9 @@ enum VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES = (1 << 18), VIEWPORT_FLAG_TRANSPARENT_BACKGROUND = (1 << 19), VIEWPORT_FLAG_SEETHROUGH_VEHICLES = (1 << 20), + VIEWPORT_FLAG_INVISIBLE_RIDES = (1 << 21), + VIEWPORT_FLAG_INVISIBLE_SCENERY = (1 << 22), + VIEWPORT_FLAG_INVISIBLE_PATHS = (1 << 23), }; enum class ViewportInteractionItem : uint8_t diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index a15cd40197..2702596917 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3929,6 +3929,9 @@ enum : uint16_t STR_ADJUST_LARGER_PATROL_AREA_TIP = 6470, STR_SEE_THROUGH_VEHICLES = 6471, + STR_INVISIBLE_RIDES = 6472, + STR_INVISIBLE_SCENERY = 6473, + STR_INVISIBLE_PATHS = 6474, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings diff --git a/src/openrct2/paint/Paint.cpp b/src/openrct2/paint/Paint.cpp index 4001d22619..3af0322f39 100644 --- a/src/openrct2/paint/Paint.cpp +++ b/src/openrct2/paint/Paint.cpp @@ -722,6 +722,41 @@ static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem sp break; } } + if (viewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) + { + if (spriteType == ViewportInteractionItem::Ride) + { + return ImageId(); + } + else if (spriteType == ViewportInteractionItem::Entity && entityType == EntityType::Vehicle) + { + return ImageId(); + } + } + if (viewFlags & VIEWPORT_FLAG_INVISIBLE_PATHS) + { + switch (spriteType) + { + case ViewportInteractionItem::Footpath: + case ViewportInteractionItem::FootpathItem: + case ViewportInteractionItem::Banner: + return ImageId(); + default: + break; + } + } + if (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) + { + switch (spriteType) + { + case ViewportInteractionItem::Scenery: + case ViewportInteractionItem::LargeScenery: + case ViewportInteractionItem::Wall: + return ImageId(); + default: + break; + } + } return imageId; } From 204f8ceac13ecda4da4519ba6d9ee94e961b2cdf Mon Sep 17 00:00:00 2001 From: Kane Date: Sun, 8 Aug 2021 04:21:05 +1000 Subject: [PATCH 03/27] Add new Transparency options window. Remove added options from Top Toolbar. Move invisible ride code into ride paint functions. Move invisible vehicle code into sprite paint function. --- src/openrct2-ui/WindowManager.cpp | 2 + src/openrct2-ui/libopenrct2ui.vcxproj | 1 + src/openrct2-ui/windows/Ride.cpp | 12 + src/openrct2-ui/windows/TopToolbar.cpp | 58 +-- src/openrct2-ui/windows/Transparency.cpp | 465 ++++++++++++++++++ src/openrct2-ui/windows/Window.h | 1 + src/openrct2/interface/Window.h | 1 + src/openrct2/paint/Paint.Entity.cpp | 13 +- src/openrct2/paint/Paint.cpp | 11 - .../paint/tile_element/Paint.Entrance.cpp | 3 + src/openrct2/ride/Ride.h | 1 + src/openrct2/ride/TrackPaint.cpp | 3 + 12 files changed, 518 insertions(+), 53 deletions(-) create mode 100644 src/openrct2-ui/windows/Transparency.cpp diff --git a/src/openrct2-ui/WindowManager.cpp b/src/openrct2-ui/WindowManager.cpp index 48ee350982..14a7594dce 100644 --- a/src/openrct2-ui/WindowManager.cpp +++ b/src/openrct2-ui/WindowManager.cpp @@ -133,6 +133,8 @@ public: return WindowViewportOpen(); case WC_WATER: return WindowWaterOpen(); + case WC_TRANSPARENCY: + return WindowTransparencyOpen(); default: Console::Error::WriteLine("Unhandled window class (%d)", wc); return nullptr; diff --git a/src/openrct2-ui/libopenrct2ui.vcxproj b/src/openrct2-ui/libopenrct2ui.vcxproj index 1103d25e87..635125faaf 100644 --- a/src/openrct2-ui/libopenrct2ui.vcxproj +++ b/src/openrct2-ui/libopenrct2ui.vcxproj @@ -188,6 +188,7 @@ + diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index c63a8bf4d2..ccb0e4ae78 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -1374,6 +1374,7 @@ rct_window* WindowRideOpenVehicle(Vehicle* vehicle) static void WindowRideSetPage(rct_window* w, int32_t page) { int32_t listen; + auto ride = get_ride(w->number); if (input_test_flag(INPUT_FLAG_TOOL_ACTIVE)) if (w->classification == gCurrentToolWidget.window_classification && w->number == gCurrentToolWidget.window_number) @@ -1419,6 +1420,17 @@ static void WindowRideSetPage(rct_window* w, int32_t page) WindowInitScrollWidgets(w); w->Invalidate(); + if (listen != 0 && w->viewport != nullptr) + { + ride->is_visible = true; + log_info("Set ride to visible. Ride ID %u Window Number %u", ride->id, w->number); + } + else if (listen == 0 && w->viewport != nullptr) + { + ride->is_visible = false; + log_info("Set ride to invisible. Ride ID %u Window Number %u", ride->id, w->number); + } + if (listen != 0 && w->viewport != nullptr) w->viewport->flags |= VIEWPORT_FLAG_SOUND_ON; } diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index b55d9e06cd..35461b82a7 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -137,21 +137,19 @@ enum TopToolbarViewMenuDdidx DDIDX_HIDE_VERTICAL = 3, // separator DDIDX_SEETHROUGH_RIDES = 5, - DDIDX_SEETHROUGH_VEHICLES = 6, - DDIDX_SEETHROUGH_SCENERY = 7, - DDIDX_SEETHROUGH_PATHS = 8, - DDIDX_INVISIBLE_RIDES = 9, - DDIDX_INVISIBLE_SCENERY = 10, - DDIDX_INVISIBLE_PATHS = 11, - DDIDX_INVISIBLE_SUPPORTS = 12, - DDIDX_INVISIBLE_PEEPS = 13, + DDIDX_SEETHROUGH_SCENERY = 6, + DDIDX_SEETHROUGH_PATHS = 7, + DDIDX_INVISIBLE_SUPPORTS = 8, + DDIDX_INVISIBLE_PEEPS = 9, // separator - DDIDX_LAND_HEIGHTS = 15, - DDIDX_TRACK_HEIGHTS = 16, - DDIDX_PATH_HEIGHTS = 17, + DDIDX_LAND_HEIGHTS = 11, + DDIDX_TRACK_HEIGHTS = 12, + DDIDX_PATH_HEIGHTS = 13, // separator - DDIDX_VIEW_CLIPPING = 19, - DDIDX_HIGHLIGHT_PATH_ISSUES = 20, + DDIDX_VIEW_CLIPPING = 15, + DDIDX_HIGHLIGHT_PATH_ISSUES = 16, + // separator + DDIDX_TRANSPARENCY = 18, TOP_TOOLBAR_VIEW_MENU_COUNT, }; @@ -3628,12 +3626,8 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) ToggleOption(DDIDX_HIDE_VERTICAL, STR_REMOVE_VERTICAL_FACES), Separator(), ToggleOption(DDIDX_SEETHROUGH_RIDES, STR_SEE_THROUGH_RIDES), - ToggleOption(DDIDX_SEETHROUGH_VEHICLES, STR_SEE_THROUGH_VEHICLES), ToggleOption(DDIDX_SEETHROUGH_SCENERY, STR_SEE_THROUGH_SCENERY), ToggleOption(DDIDX_SEETHROUGH_PATHS, STR_SEE_THROUGH_PATHS), - ToggleOption(DDIDX_INVISIBLE_RIDES, STR_INVISIBLE_RIDES), - ToggleOption(DDIDX_INVISIBLE_SCENERY, STR_INVISIBLE_SCENERY), - ToggleOption(DDIDX_INVISIBLE_PATHS, STR_INVISIBLE_PATHS), ToggleOption(DDIDX_INVISIBLE_SUPPORTS, STR_INVISIBLE_SUPPORTS), ToggleOption(DDIDX_INVISIBLE_PEEPS, STR_INVISIBLE_PEOPLE), Separator(), @@ -3643,6 +3637,8 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) Separator(), ToggleOption(DDIDX_VIEW_CLIPPING, STR_VIEW_CLIPPING_MENU), ToggleOption(DDIDX_HIGHLIGHT_PATH_ISSUES, STR_HIGHLIGHT_PATH_ISSUES_MENU), + Separator(), + ToggleOption(DDIDX_TRANSPARENCY, STR_INVISIBLE_PEOPLE), }; static_assert(ItemIDsMatchIndices(items)); @@ -3665,18 +3661,10 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) Dropdown::SetChecked(DDIDX_HIDE_VERTICAL, true); if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES) Dropdown::SetChecked(DDIDX_SEETHROUGH_RIDES, true); - if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) - Dropdown::SetChecked(DDIDX_SEETHROUGH_VEHICLES, true); if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) Dropdown::SetChecked(DDIDX_SEETHROUGH_SCENERY, true); if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_PATHS) Dropdown::SetChecked(DDIDX_SEETHROUGH_PATHS, true); - if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_RIDES) - Dropdown::SetChecked(DDIDX_INVISIBLE_RIDES, true); - if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_SCENERY) - Dropdown::SetChecked(DDIDX_INVISIBLE_SCENERY, true); - if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_PATHS) - Dropdown::SetChecked(DDIDX_INVISIBLE_PATHS, true); if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) Dropdown::SetChecked(DDIDX_INVISIBLE_SUPPORTS, true); if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS) @@ -3726,13 +3714,7 @@ static void TopToolbarViewMenuDropdown(int16_t dropdownIndex) w->viewport->flags ^= VIEWPORT_FLAG_HIDE_VERTICAL; break; case DDIDX_SEETHROUGH_RIDES: - if (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES) - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; - else - w->viewport->flags |= VIEWPORT_FLAG_SEETHROUGH_RIDES | VIEWPORT_FLAG_SEETHROUGH_VEHICLES; - break; - case DDIDX_SEETHROUGH_VEHICLES: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_VEHICLES; + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; break; case DDIDX_SEETHROUGH_SCENERY: w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_SCENERY; @@ -3740,15 +3722,6 @@ static void TopToolbarViewMenuDropdown(int16_t dropdownIndex) case DDIDX_SEETHROUGH_PATHS: w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_PATHS; break; - case DDIDX_INVISIBLE_RIDES: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_RIDES; - break; - case DDIDX_INVISIBLE_SCENERY: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SCENERY; - break; - case DDIDX_INVISIBLE_PATHS: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PATHS; - break; case DDIDX_INVISIBLE_SUPPORTS: w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; break; @@ -3778,6 +3751,9 @@ static void TopToolbarViewMenuDropdown(int16_t dropdownIndex) case DDIDX_HIGHLIGHT_PATH_ISSUES: w->viewport->flags ^= VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES; break; + case DDIDX_TRANSPARENCY: + context_open_window(WC_TRANSPARENCY); + break; default: return; } diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp new file mode 100644 index 0000000000..271849499e --- /dev/null +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -0,0 +1,465 @@ +/***************************************************************************** + * Copyright (c) 2014-2020 OpenRCT2 developers + * + * For a complete list of all authors, please refer to contributors.md + * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is licensed under the GNU General Public License version 3. + *****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// clang-format off +enum +{ + WINDOW_TRANSPARENCY_PAGE_MAIN, + WINDOW_TRANSPARENCY_PAGE_RIDES, + WINDOW_TRANSPARENCY_PAGE_MISC, + WINDOW_TRANSPARENCY_PAGE_COUNT, +}; + +enum WINDOW_TRANSPARENCY_WIDGET_IDX +{ + WIDX_BACKGROUND, + WIDX_TITLE, + WIDX_CLOSE, + WIDX_PAGE_BACKGROUND, + WIDX_TAB_1, + WIDX_TAB_2, + WIDX_TAB_3, + WIDX_TAB_CONTENT, + + WIDX_TERRAIN_GROUP = WIDX_TAB_CONTENT, + WIDX_UNDERGROUND_VIEW, + WIDX_TRANSPARENT_WATER, + WIDX_HIDE_BASE_LAND, + WIDX_HIDE_VERTICAL_FACES, + WIDX_SEE_THROUGH_GROUP, + WIDX_SEE_THROUGH_RIDES, + WIDX_SEE_THROUGH_VEHICLES, + WIDX_SEE_THROUGH_SCENERY, + WIDX_SEE_THROUGH_PATHS, + WIDX_INVISIBLE_GROUP, + WIDX_INVISIBLE_RIDES, + WIDX_INVISIBLE_SCENERY, + WIDX_INVISIBLE_PATHS, + WIDX_INVISIBLE_SUPPORTS, + WIDX_INVISIBLE_GUESTS, + WIDX_INVISIBLE_STAFF, + + WIDX_PLACEHOLDER_RIDES = WIDX_TAB_CONTENT, + + WIDX_PLACEHOLDER_MISC = WIDX_TAB_CONTENT, +}; + +#pragma region MEASUREMENTS + +static constexpr const rct_string_id WINDOW_TITLE = STR_CHEAT_TITLE; +static constexpr const int32_t WW = 249; +static constexpr const int32_t WH = 300; + +static constexpr ScreenSize CHEAT_BUTTON = {110, 17}; +static constexpr ScreenSize CHEAT_CHECK = {221, 12}; +static constexpr ScreenSize CHEAT_SPINNER = {117, 14}; +static constexpr ScreenSize MINMAX_BUTTON = {55, 17}; + +static constexpr const int32_t TAB_WIDTH = 31; +static constexpr const int32_t TAB_START = 3; + + +#pragma endregion + +#define MAIN_TRANSPARENCY_WIDGETS \ + WINDOW_SHIM(WINDOW_TITLE, WW, WH), \ + MakeWidget({ 0, 43}, {WW, 257}, WindowWidgetType::ImgBtn, WindowColour::Secondary), /* tab content panel */ \ + MakeTab ({ 3, 17}, STR_FINANCIAL_CHEATS_TIP ), /* tab 1 */ \ + MakeTab ({34, 17}, STR_RIDE_CHEATS_TIP ), /* tab 2 */ \ + MakeTab ({65, 17}, STR_PARK_CHEATS_TIP ) /* tab 3 */ + +// 15px group padding top, 17px margin between lines, 17px group padding bottom. 22px group margin bottom +static rct_widget window_transparency_main_widgets[] = +{ + MAIN_TRANSPARENCY_WIDGETS, + MakeWidget({ 5, 48}, {238, 83}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // General parameters group frame + + MakeWidget({ 11, 63}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_UNDERGROUND_VIEW, STR_UNDERGROUND_VIEW), + MakeWidget({ 11, 80}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_VIEWPORT_TRANSPARENT_WATER, STR_VIEWPORT_TRANSPARENT_WATER), + MakeWidget({ 11, 97}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_REMOVE_BASE_LAND, STR_REMOVE_BASE_LAND), + MakeWidget({ 11, 114}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_REMOVE_VERTICAL_FACES, STR_REMOVE_VERTICAL_FACES), + + MakeWidget({ 5, 136}, {238, 83}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // See-through parameters group frame + + MakeWidget({ 11, 151}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_RIDES, STR_SEE_THROUGH_RIDES), + MakeWidget({ 11, 168}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_VEHICLES, STR_SEE_THROUGH_VEHICLES), + MakeWidget({ 11, 185}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_SCENERY, STR_SEE_THROUGH_SCENERY), + MakeWidget({ 11, 202}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_PATHS, STR_SEE_THROUGH_PATHS), + + MakeWidget({ 5, 224}, {238, 117}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // Invisible parameters group frame + + MakeWidget({ 11, 239}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_RIDES, STR_INVISIBLE_RIDES), + MakeWidget({ 11, 256}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_SCENERY, STR_INVISIBLE_SCENERY), + MakeWidget({ 11, 273}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_PATHS, STR_INVISIBLE_PATHS), + MakeWidget({ 11, 290}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_SUPPORTS, STR_INVISIBLE_SUPPORTS), + MakeWidget({ 11, 307}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_PEOPLE, STR_INVISIBLE_PEOPLE), + MakeWidget({ 11, 324}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_PEOPLE, STR_INVISIBLE_PEOPLE), + + { WIDGETS_END }, +}; + +static rct_widget window_transparency_rides_widgets[] = +{ + MAIN_TRANSPARENCY_WIDGETS, + MakeWidget({ 5, 48}, {238, 279}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS ), // Guests parameters group frame + { WIDGETS_END }, +}; + +//Strings for following moved to window_cheats_paint() +static rct_widget window_transparency_misc_widgets[] = +{ + MAIN_TRANSPARENCY_WIDGETS, + MakeWidget ({ 5, 48}, {238, 60}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_GENERAL_GROUP ), // General group + { WIDGETS_END }, +}; + +static rct_widget *window_transparency_page_widgets[] = +{ + window_transparency_main_widgets, + window_transparency_rides_widgets, + window_transparency_misc_widgets, +}; + +#define MAIN_TRANSPARENCY_ENABLED_WIDGETS (1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) + +static uint64_t window_transparency_page_enabled_widgets[] = { + MAIN_TRANSPARENCY_ENABLED_WIDGETS | + (1ULL << WIDX_TERRAIN_GROUP) | + (1ULL << WIDX_UNDERGROUND_VIEW) | + (1ULL << WIDX_TRANSPARENT_WATER) | + (1ULL << WIDX_HIDE_BASE_LAND) | + (1ULL << WIDX_HIDE_VERTICAL_FACES) | + (1ULL << WIDX_SEE_THROUGH_GROUP) | + (1ULL << WIDX_SEE_THROUGH_RIDES) | + (1ULL << WIDX_SEE_THROUGH_VEHICLES) | + (1ULL << WIDX_SEE_THROUGH_SCENERY) | + (1ULL << WIDX_SEE_THROUGH_PATHS) | + (1ULL << WIDX_INVISIBLE_GROUP) | + (1ULL << WIDX_INVISIBLE_RIDES) | + (1ULL << WIDX_INVISIBLE_SCENERY) | + (1ULL << WIDX_INVISIBLE_PATHS) | + (1ULL << WIDX_INVISIBLE_SUPPORTS) | + (1ULL << WIDX_INVISIBLE_GUESTS) | + (1ULL << WIDX_INVISIBLE_STAFF), + + MAIN_TRANSPARENCY_ENABLED_WIDGETS | + (1ULL << WIDX_PLACEHOLDER_RIDES), + + MAIN_TRANSPARENCY_ENABLED_WIDGETS | + (1ULL << WIDX_PLACEHOLDER_MISC) +}; + +static uint64_t window_transparency_page_hold_down_widgets[] = { + WIDX_UNDERGROUND_VIEW, +}; + +static rct_string_id window_transparency_page_titles[] = { + STR_CHEAT_TITLE_FINANCIAL, + STR_CHEAT_TITLE_RIDE, + STR_CHEAT_TITLE_PARK, +}; +// clang-format on + +class TransparencyWindow final : public Window +{ +private: +public: + void OnOpen() override + { + SetPage(WINDOW_TRANSPARENCY_PAGE_MAIN); + } + + void OnUpdate() override + { + frame_no++; + InvalidateWidget(WIDX_TAB_1 + page); + } + + void OnMouseDown(rct_widgetindex widgetIndex) override + { + // switch (page) + } + + void OnMouseUp(rct_widgetindex widgetIndex) override + { + switch (widgetIndex) + { + case WIDX_CLOSE: + Close(); + break; + case WIDX_TAB_1: + case WIDX_TAB_2: + case WIDX_TAB_3: + SetPage(widgetIndex - WIDX_TAB_1); + break; + default: + switch (page) + { + case WINDOW_TRANSPARENCY_PAGE_MAIN: + OnMouseUpMain(widgetIndex); + break; + } + break; + } + } + + void OnDropdown(rct_widgetindex widgetIndex, int32_t selectedIndex) override + { + } + + void OnMouseUpMain(rct_widgetindex widgetIndex) + { + rct_window* w = window_get_main(); + if (w == nullptr) + return; + + switch (widgetIndex) + { + case WIDX_UNDERGROUND_VIEW: + w->viewport->flags ^= VIEWPORT_FLAG_UNDERGROUND_INSIDE; + break; + case WIDX_TRANSPARENT_WATER: + gConfigGeneral.transparent_water ^= 1; + config_save_default(); + break; + case WIDX_HIDE_BASE_LAND: + w->viewport->flags ^= VIEWPORT_FLAG_HIDE_BASE; + break; + case WIDX_HIDE_VERTICAL_FACES: + w->viewport->flags ^= VIEWPORT_FLAG_HIDE_VERTICAL; + break; + case WIDX_SEE_THROUGH_RIDES: + if (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES) + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; + else + w->viewport->flags |= VIEWPORT_FLAG_SEETHROUGH_RIDES | VIEWPORT_FLAG_SEETHROUGH_VEHICLES; + break; + case WIDX_SEE_THROUGH_VEHICLES: + if (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_VEHICLES; + else + w->viewport->flags |= VIEWPORT_FLAG_SEETHROUGH_RIDES | VIEWPORT_FLAG_SEETHROUGH_VEHICLES; + break; + case WIDX_SEE_THROUGH_SCENERY: + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_SCENERY; + break; + case WIDX_SEE_THROUGH_PATHS: + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_PATHS; + break; + case WIDX_INVISIBLE_RIDES: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_RIDES; + break; + case WIDX_INVISIBLE_SCENERY: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SCENERY; + break; + case WIDX_INVISIBLE_PATHS: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PATHS; + break; + case WIDX_INVISIBLE_SUPPORTS: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; + break; + case WIDX_INVISIBLE_GUESTS: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PEEPS; + break; + case WIDX_INVISIBLE_STAFF: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PEEPS; + break; + } + } + + void OnPrepareDraw() override + { + auto* targetWidgets = window_transparency_page_widgets[page]; + if (widgets != targetWidgets) + { + widgets = targetWidgets; + WindowInitScrollWidgets(this); + } + + pressed_widgets = 0; + disabled_widgets = 0; + + // Set correct active tab + for (auto i = 0; i < WINDOW_TRANSPARENCY_PAGE_COUNT; i++) + SetWidgetPressed(WIDX_TAB_1 + i, false); + SetWidgetPressed(WIDX_TAB_1 + page, true); + + // Set title + widgets[WIDX_TITLE].text = window_transparency_page_titles[page]; + + rct_window* w = window_get_main(); + if (w == nullptr) + return; + + switch (page) + { + case WINDOW_TRANSPARENCY_PAGE_MAIN: + SetCheckboxValue(WIDX_UNDERGROUND_VIEW, (w->viewport->flags & VIEWPORT_FLAG_UNDERGROUND_INSIDE)); + SetCheckboxValue(WIDX_TRANSPARENT_WATER, (gConfigGeneral.transparent_water == 1)); + SetCheckboxValue(WIDX_HIDE_BASE_LAND, (w->viewport->flags & VIEWPORT_FLAG_HIDE_BASE)); + SetCheckboxValue(WIDX_HIDE_VERTICAL_FACES, (w->viewport->flags & VIEWPORT_FLAG_HIDE_VERTICAL)); + SetCheckboxValue(WIDX_SEE_THROUGH_RIDES, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES)); + SetCheckboxValue(WIDX_SEE_THROUGH_VEHICLES, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES)); + SetCheckboxValue(WIDX_SEE_THROUGH_SCENERY, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_SCENERY)); + SetCheckboxValue(WIDX_SEE_THROUGH_PATHS, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_PATHS)); + SetCheckboxValue(WIDX_INVISIBLE_RIDES, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_RIDES)); + SetCheckboxValue(WIDX_INVISIBLE_PATHS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PATHS)); + SetCheckboxValue(WIDX_INVISIBLE_SUPPORTS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)); + SetCheckboxValue(WIDX_INVISIBLE_GUESTS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)); + SetCheckboxValue(WIDX_INVISIBLE_STAFF, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)); + break; + } + } + + void OnDraw(rct_drawpixelinfo& dpi) override + { + UpdateTabPositions(); + DrawWidgets(dpi); + DrawTabImages(dpi); + } + + void OnTextInput(rct_widgetindex widgetIndex, std::string_view text) override + { + } + + OpenRCT2String OnTooltip(rct_widgetindex widgetIndex, rct_string_id fallback) override + { + return { fallback, {} }; + } + +private: + void SetPage(int32_t p) + { + page = p; + frame_no = 0; + + enabled_widgets = window_transparency_page_enabled_widgets[p]; + hold_down_widgets = window_transparency_page_hold_down_widgets[p]; + pressed_widgets = 0; + widgets = window_transparency_page_widgets[p]; + + auto maxY = 0; + auto* widget = &widgets[WIDX_TAB_CONTENT]; + while (widget->type != WindowWidgetType::Last) + { + maxY = std::max(maxY, widget->bottom); + widget++; + } + maxY += 6; + + Invalidate(); + height = maxY; + widgets[WIDX_BACKGROUND].bottom = maxY - 1; + widgets[WIDX_PAGE_BACKGROUND].bottom = maxY - 1; + Invalidate(); + } + + void UpdateTabPositions() + { + constexpr const uint16_t tabs[] = { + WIDX_TAB_1, + WIDX_TAB_2, + WIDX_TAB_3, + }; + + auto left = TAB_START; + for (auto tab : tabs) + { + widgets[tab].left = left; + if (!IsWidgetDisabled(tab)) + { + left += TAB_WIDTH; + } + } + } + + void DrawTabImages(rct_drawpixelinfo& dpi) + { + // Money tab + if (!IsWidgetDisabled(WIDX_TAB_1)) + { + uint32_t sprite_idx = SPR_TAB_FINANCES_SUMMARY_0; + if (page == WINDOW_TRANSPARENCY_PAGE_MAIN) + sprite_idx += (frame_no / 2) % 8; + gfx_draw_sprite( + &dpi, ImageId(sprite_idx), windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_1].left, widgets[WIDX_TAB_1].top }); + } + + // Rides tab + if (!IsWidgetDisabled(WIDX_TAB_2)) + { + uint32_t sprite_idx = SPR_TAB_RIDE_0; + if (page == WINDOW_TRANSPARENCY_PAGE_RIDES) + sprite_idx += (frame_no / 4) % 16; + gfx_draw_sprite( + &dpi, ImageId(sprite_idx), windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_2].left, widgets[WIDX_TAB_2].top }); + } + + // Guests tab + if (!IsWidgetDisabled(WIDX_TAB_3)) + { + uint32_t sprite_idx = SPR_TAB_GUESTS_0; + if (page == WINDOW_TRANSPARENCY_PAGE_MISC) + sprite_idx += (frame_no / 3) % 8; + gfx_draw_sprite( + &dpi, ImageId(sprite_idx), windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_3].left, widgets[WIDX_TAB_3].top }); + } + } + + void OnMouseDownMisc(rct_widgetindex widgetIndex) + { + // auto* widget = &widgets[widgetIndex]; + } + + void OnMouseUpMisc(rct_widgetindex widgetIndex) + { + } + + void OnDropdownMisc(rct_widgetindex widgetIndex, int32_t dropdownIndex) + { + } + + void OnMouseDownRides(rct_widgetindex widgetIndex) + { + } + + void OnMouseUpRides(rct_widgetindex widgetIndex) + { + } +}; + +rct_window* WindowTransparencyOpen() +{ + auto* window = window_bring_to_front_by_class(WC_TRANSPARENCY); + if (window == nullptr) + { + window = WindowCreate(WC_TRANSPARENCY, ScreenCoordsXY(32, 32), WW, WH); + } + return window; +} diff --git a/src/openrct2-ui/windows/Window.h b/src/openrct2-ui/windows/Window.h index ae814db5d4..e2df438e6a 100644 --- a/src/openrct2-ui/windows/Window.h +++ b/src/openrct2-ui/windows/Window.h @@ -75,6 +75,7 @@ rct_window* WindowTitleOptionsOpen(); rct_window* WindowViewportOpen(); rct_window* WindowWaterOpen(); rct_window* WindowViewClippingOpen(); +rct_window* WindowTransparencyOpen(); // WC_FINANCES rct_window* WindowFinancesOpen(); diff --git a/src/openrct2/interface/Window.h b/src/openrct2/interface/Window.h index eb10c816f9..1723e87b91 100644 --- a/src/openrct2/interface/Window.h +++ b/src/openrct2/interface/Window.h @@ -463,6 +463,7 @@ enum WC_VIEW_CLIPPING = 131, WC_OBJECT_LOAD_ERROR = 132, WC_PATROL_AREA = 133, + WC_TRANSPARENCY = 134, // Only used for colour schemes WC_STAFF = 220, diff --git a/src/openrct2/paint/Paint.Entity.cpp b/src/openrct2/paint/Paint.Entity.cpp index d8681e85f5..5d648689b7 100644 --- a/src/openrct2/paint/Paint.Entity.cpp +++ b/src/openrct2/paint/Paint.Entity.cpp @@ -73,8 +73,19 @@ void EntityPaintSetup(paint_session& session, const CoordsXY& pos) } } - const auto entityPos = spr->GetLocation(); + if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) && spr->Type == EntityType::Vehicle) + { + const auto veh = spr->As(); + if (veh != nullptr) + { + auto ride = get_ride(veh->ride); + if (ride != nullptr && !ride->is_visible) + return; + } + } + const auto entityPos = spr->GetLocation(); + // Only paint sprites that are below the clip height and inside the clip selection. // Here converting from land/path/etc height scale to pixel height scale. // Note: peeps/scenery on slopes will be above the base diff --git a/src/openrct2/paint/Paint.cpp b/src/openrct2/paint/Paint.cpp index 3af0322f39..5944b47c87 100644 --- a/src/openrct2/paint/Paint.cpp +++ b/src/openrct2/paint/Paint.cpp @@ -722,17 +722,6 @@ static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem sp break; } } - if (viewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) - { - if (spriteType == ViewportInteractionItem::Ride) - { - return ImageId(); - } - else if (spriteType == ViewportInteractionItem::Entity && entityType == EntityType::Vehicle) - { - return ImageId(); - } - } if (viewFlags & VIEWPORT_FLAG_INVISIBLE_PATHS) { switch (spriteType) diff --git a/src/openrct2/paint/tile_element/Paint.Entrance.cpp b/src/openrct2/paint/tile_element/Paint.Entrance.cpp index c30394c164..0822dd511a 100644 --- a/src/openrct2/paint/tile_element/Paint.Entrance.cpp +++ b/src/openrct2/paint/tile_element/Paint.Entrance.cpp @@ -124,6 +124,9 @@ static void PaintRideEntranceExit(paint_session& session, uint8_t direction, int { return; } + + if ((session->ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) && ride->is_visible == false) + return; auto stationObj = ride->GetStationObject(); if (stationObj == nullptr || stationObj->BaseImageId == ImageIndexUndefined) diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index 53854975cf..dda626da7d 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -287,6 +287,7 @@ public: uint16_t inversions; uint16_t holes; uint8_t sheltered_eighths; + bool is_visible = false; std::unique_ptr measurement; diff --git a/src/openrct2/ride/TrackPaint.cpp b/src/openrct2/ride/TrackPaint.cpp index 04fac377a4..466cccfb0e 100644 --- a/src/openrct2/ride/TrackPaint.cpp +++ b/src/openrct2/ride/TrackPaint.cpp @@ -2195,6 +2195,9 @@ void PaintTrack(paint_session& session, Direction direction, int32_t height, con return; } + if ((session->ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) && ride->is_visible == false) + return; + if ((!gTrackDesignSaveMode || rideIndex == gTrackDesignSaveRideIndex) && !(session.ViewFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES)) { From e134be9538c4660bb4e111d4dabfd064aa4316b2 Mon Sep 17 00:00:00 2001 From: Kane Date: Tue, 10 Aug 2021 02:35:56 +1000 Subject: [PATCH 04/27] Implement more options - Invisible guests - Invisible staff - See-through trees - Invisible trees - Strings/Ids --- data/language/en-GB.txt | 12 ++- src/openrct2-ui/windows/TopToolbar.cpp | 2 +- src/openrct2-ui/windows/Transparency.cpp | 81 ++++++++++++------- src/openrct2/entity/Peep.cpp | 10 ++- src/openrct2/interface/Viewport.h | 4 + src/openrct2/localisation/StringIds.h | 12 ++- .../paint/tile_element/Paint.SmallScenery.cpp | 9 +++ src/openrct2/ride/gentle/MiniGolf.cpp | 4 +- 8 files changed, 93 insertions(+), 41 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index ff8dbde77d..a14f298fea 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3660,9 +3660,15 @@ STR_6468 :Not Yet Known STR_6469 :Adjust smaller area of patrol area STR_6470 :Adjust larger area of patrol area STR_6471 :See-Through Vehicles -STR_6472 :Invisible Rides -STR_6473 :Invisible Scenery -STR_6474 :Invisible Paths +STR_6472 :See-Through Trees +STR_6473 :Invisible Rides +STR_6474 :Invisible Scenery +STR_6475 :Invisible Trees +STR_6476 :Invisible Paths +STR_6477 :Invisible Guests +STR_6478 :Invisible Staff +STR_6479 :Transparency Options +STR_6480 :Transparency Options ############# # Scenarios # diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index 35461b82a7..91b7953f46 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -3638,7 +3638,7 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) ToggleOption(DDIDX_VIEW_CLIPPING, STR_VIEW_CLIPPING_MENU), ToggleOption(DDIDX_HIGHLIGHT_PATH_ISSUES, STR_HIGHLIGHT_PATH_ISSUES_MENU), Separator(), - ToggleOption(DDIDX_TRANSPARENCY, STR_INVISIBLE_PEOPLE), + ToggleOption(DDIDX_TRANSPARENCY, STR_TRANSPARENCY_OPTIONS), }; static_assert(ItemIDsMatchIndices(items)); diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index 271849499e..ad6d7e718e 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -56,10 +56,12 @@ enum WINDOW_TRANSPARENCY_WIDGET_IDX WIDX_SEE_THROUGH_RIDES, WIDX_SEE_THROUGH_VEHICLES, WIDX_SEE_THROUGH_SCENERY, + WIDX_SEE_THROUGH_TREES, WIDX_SEE_THROUGH_PATHS, WIDX_INVISIBLE_GROUP, WIDX_INVISIBLE_RIDES, WIDX_INVISIBLE_SCENERY, + WIDX_INVISIBLE_TREES, WIDX_INVISIBLE_PATHS, WIDX_INVISIBLE_SUPPORTS, WIDX_INVISIBLE_GUESTS, @@ -72,7 +74,7 @@ enum WINDOW_TRANSPARENCY_WIDGET_IDX #pragma region MEASUREMENTS -static constexpr const rct_string_id WINDOW_TITLE = STR_CHEAT_TITLE; +static constexpr const rct_string_id WINDOW_TITLE = STR_TRANSPARENCY_OPTIONS_TITLE; static constexpr const int32_t WW = 249; static constexpr const int32_t WH = 300; @@ -100,26 +102,28 @@ static rct_widget window_transparency_main_widgets[] = MAIN_TRANSPARENCY_WIDGETS, MakeWidget({ 5, 48}, {238, 83}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // General parameters group frame - MakeWidget({ 11, 63}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_UNDERGROUND_VIEW, STR_UNDERGROUND_VIEW), - MakeWidget({ 11, 80}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_VIEWPORT_TRANSPARENT_WATER, STR_VIEWPORT_TRANSPARENT_WATER), - MakeWidget({ 11, 97}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_REMOVE_BASE_LAND, STR_REMOVE_BASE_LAND), - MakeWidget({ 11, 114}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_REMOVE_VERTICAL_FACES, STR_REMOVE_VERTICAL_FACES), + MakeWidget({ 11, 63}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_UNDERGROUND_VIEW, STR_UNDERGROUND_VIEW), + MakeWidget({ 11, 80}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_VIEWPORT_TRANSPARENT_WATER, STR_VIEWPORT_TRANSPARENT_WATER), + MakeWidget({ 11, 97}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_REMOVE_BASE_LAND, STR_REMOVE_BASE_LAND), + MakeWidget({ 11, 114}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_REMOVE_VERTICAL_FACES, STR_REMOVE_VERTICAL_FACES), - MakeWidget({ 5, 136}, {238, 83}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // See-through parameters group frame + MakeWidget({ 5, 136}, {238, 100}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // See-through parameters group frame - MakeWidget({ 11, 151}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_RIDES, STR_SEE_THROUGH_RIDES), - MakeWidget({ 11, 168}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_VEHICLES, STR_SEE_THROUGH_VEHICLES), - MakeWidget({ 11, 185}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_SCENERY, STR_SEE_THROUGH_SCENERY), - MakeWidget({ 11, 202}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_PATHS, STR_SEE_THROUGH_PATHS), + MakeWidget({ 11, 151}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_RIDES, STR_SEE_THROUGH_RIDES), + MakeWidget({ 11, 168}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_VEHICLES, STR_SEE_THROUGH_VEHICLES), + MakeWidget({ 11, 185}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_SCENERY, STR_SEE_THROUGH_SCENERY), + MakeWidget({ 11, 202}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_TREES, STR_SEE_THROUGH_TREES), // Trees + MakeWidget({ 11, 219}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_PATHS, STR_SEE_THROUGH_PATHS), - MakeWidget({ 5, 224}, {238, 117}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // Invisible parameters group frame + MakeWidget({ 5, 241}, {238, 134}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // Invisible parameters group frame - MakeWidget({ 11, 239}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_RIDES, STR_INVISIBLE_RIDES), - MakeWidget({ 11, 256}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_SCENERY, STR_INVISIBLE_SCENERY), - MakeWidget({ 11, 273}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_PATHS, STR_INVISIBLE_PATHS), - MakeWidget({ 11, 290}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_SUPPORTS, STR_INVISIBLE_SUPPORTS), - MakeWidget({ 11, 307}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_PEOPLE, STR_INVISIBLE_PEOPLE), - MakeWidget({ 11, 324}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_PEOPLE, STR_INVISIBLE_PEOPLE), + MakeWidget({ 11, 256}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_RIDES, STR_INVISIBLE_RIDES), + MakeWidget({ 11, 273}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_SCENERY, STR_INVISIBLE_SCENERY), + MakeWidget({ 11, 290}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_TREES, STR_INVISIBLE_TREES), // Trees + MakeWidget({ 11, 307}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_PATHS, STR_INVISIBLE_PATHS), + MakeWidget({ 11, 324}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_SUPPORTS, STR_INVISIBLE_SUPPORTS), + MakeWidget({ 11, 341}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_GUESTS, STR_INVISIBLE_GUESTS), // Guests + MakeWidget({ 11, 358}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_STAFF, STR_INVISIBLE_STAFF), // Staff { WIDGETS_END }, }; @@ -127,7 +131,7 @@ static rct_widget window_transparency_main_widgets[] = static rct_widget window_transparency_rides_widgets[] = { MAIN_TRANSPARENCY_WIDGETS, - MakeWidget({ 5, 48}, {238, 279}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS ), // Guests parameters group frame + MakeWidget({ 5, 48}, {238, 279}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // Guests parameters group frame { WIDGETS_END }, }; @@ -135,7 +139,7 @@ static rct_widget window_transparency_rides_widgets[] = static rct_widget window_transparency_misc_widgets[] = { MAIN_TRANSPARENCY_WIDGETS, - MakeWidget ({ 5, 48}, {238, 60}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_GENERAL_GROUP ), // General group + MakeWidget ({ 5, 48}, {238, 60}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_GENERAL_GROUP), // General group { WIDGETS_END }, }; @@ -159,10 +163,12 @@ static uint64_t window_transparency_page_enabled_widgets[] = { (1ULL << WIDX_SEE_THROUGH_RIDES) | (1ULL << WIDX_SEE_THROUGH_VEHICLES) | (1ULL << WIDX_SEE_THROUGH_SCENERY) | + (1ULL << WIDX_SEE_THROUGH_TREES) | (1ULL << WIDX_SEE_THROUGH_PATHS) | (1ULL << WIDX_INVISIBLE_GROUP) | (1ULL << WIDX_INVISIBLE_RIDES) | (1ULL << WIDX_INVISIBLE_SCENERY) | + (1ULL << WIDX_INVISIBLE_TREES) | (1ULL << WIDX_INVISIBLE_PATHS) | (1ULL << WIDX_INVISIBLE_SUPPORTS) | (1ULL << WIDX_INVISIBLE_GUESTS) | @@ -255,20 +261,17 @@ public: w->viewport->flags ^= VIEWPORT_FLAG_HIDE_VERTICAL; break; case WIDX_SEE_THROUGH_RIDES: - if (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES) - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; - else - w->viewport->flags |= VIEWPORT_FLAG_SEETHROUGH_RIDES | VIEWPORT_FLAG_SEETHROUGH_VEHICLES; + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; break; case WIDX_SEE_THROUGH_VEHICLES: - if (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_VEHICLES; - else - w->viewport->flags |= VIEWPORT_FLAG_SEETHROUGH_RIDES | VIEWPORT_FLAG_SEETHROUGH_VEHICLES; + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_VEHICLES; break; case WIDX_SEE_THROUGH_SCENERY: w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_SCENERY; break; + case WIDX_SEE_THROUGH_TREES: + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_TREES; + break; case WIDX_SEE_THROUGH_PATHS: w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_PATHS; break; @@ -278,6 +281,9 @@ public: case WIDX_INVISIBLE_SCENERY: w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SCENERY; break; + case WIDX_INVISIBLE_TREES: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_TREES; + break; case WIDX_INVISIBLE_PATHS: w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PATHS; break; @@ -285,10 +291,14 @@ public: w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; break; case WIDX_INVISIBLE_GUESTS: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PEEPS; + if (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS) + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PEEPS; + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_GUESTS; break; case WIDX_INVISIBLE_STAFF: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PEEPS; + if (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS) + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PEEPS; + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_STAFF; break; } } @@ -327,12 +337,21 @@ public: SetCheckboxValue(WIDX_SEE_THROUGH_RIDES, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES)); SetCheckboxValue(WIDX_SEE_THROUGH_VEHICLES, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES)); SetCheckboxValue(WIDX_SEE_THROUGH_SCENERY, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_SCENERY)); + SetCheckboxValue(WIDX_SEE_THROUGH_TREES, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_TREES)); SetCheckboxValue(WIDX_SEE_THROUGH_PATHS, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_PATHS)); SetCheckboxValue(WIDX_INVISIBLE_RIDES, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_RIDES)); + SetCheckboxValue(WIDX_INVISIBLE_SCENERY, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SCENERY)); + SetCheckboxValue(WIDX_INVISIBLE_TREES, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_TREES)); SetCheckboxValue(WIDX_INVISIBLE_PATHS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PATHS)); SetCheckboxValue(WIDX_INVISIBLE_SUPPORTS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)); - SetCheckboxValue(WIDX_INVISIBLE_GUESTS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)); - SetCheckboxValue(WIDX_INVISIBLE_STAFF, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)); + SetCheckboxValue( + WIDX_INVISIBLE_GUESTS, + (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_GUESTS) + || (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)); + SetCheckboxValue( + WIDX_INVISIBLE_STAFF, + (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_STAFF) + || (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)); break; } } diff --git a/src/openrct2/entity/Peep.cpp b/src/openrct2/entity/Peep.cpp index 946906d13e..0ece4f2e33 100644 --- a/src/openrct2/entity/Peep.cpp +++ b/src/openrct2/entity/Peep.cpp @@ -2737,6 +2737,14 @@ void Peep::Paint(paint_session& session, int32_t imageDirection) const { return; } + if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS) && Is()) + { + return; + } + if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_STAFF) && Is()) + { + return; + } PeepActionSpriteType actionSpriteType = ActionSpriteType; uint8_t imageOffset = ActionSpriteImageOffset; @@ -2753,7 +2761,7 @@ void Peep::Paint(paint_session& session, int32_t imageDirection) const uint32_t imageId = baseImageId | TshirtColour << 19 | TrousersColour << 24 | IMAGE_TYPE_REMAP | IMAGE_TYPE_REMAP_2_PLUS; PaintAddImageAsParent(session, imageId, { 0, 0, z }, { 1, 1, 11 }, { 0, 0, z + 5 }); - auto* guest = As(); + auto* guest = As(); if (guest != nullptr) { if (baseImageId >= 10717 && baseImageId < 10749) diff --git a/src/openrct2/interface/Viewport.h b/src/openrct2/interface/Viewport.h index 750c065362..55c74d9858 100644 --- a/src/openrct2/interface/Viewport.h +++ b/src/openrct2/interface/Viewport.h @@ -53,6 +53,10 @@ enum VIEWPORT_FLAG_INVISIBLE_RIDES = (1 << 21), VIEWPORT_FLAG_INVISIBLE_SCENERY = (1 << 22), VIEWPORT_FLAG_INVISIBLE_PATHS = (1 << 23), + VIEWPORT_FLAG_INVISIBLE_GUESTS = (1 << 24), + VIEWPORT_FLAG_INVISIBLE_STAFF = (1 << 25), + VIEWPORT_FLAG_SEETHROUGH_TREES = (1 << 26), + VIEWPORT_FLAG_INVISIBLE_TREES = (1 << 27), }; enum class ViewportInteractionItem : uint8_t diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index 2702596917..f2814ddcbf 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3929,9 +3929,15 @@ enum : uint16_t STR_ADJUST_LARGER_PATROL_AREA_TIP = 6470, STR_SEE_THROUGH_VEHICLES = 6471, - STR_INVISIBLE_RIDES = 6472, - STR_INVISIBLE_SCENERY = 6473, - STR_INVISIBLE_PATHS = 6474, + STR_SEE_THROUGH_TREES = 6472, + STR_INVISIBLE_RIDES = 6473, + STR_INVISIBLE_SCENERY = 6474, + STR_INVISIBLE_TREES = 6475, + STR_INVISIBLE_PATHS = 6476, + STR_INVISIBLE_GUESTS = 6477, + STR_INVISIBLE_STAFF = 6478, + STR_TRANSPARENCY_OPTIONS = 6479, + STR_TRANSPARENCY_OPTIONS_TITLE = 6480, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings diff --git a/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp b/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp index b47cf74b3d..24dc44b1f2 100644 --- a/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp +++ b/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp @@ -122,6 +122,11 @@ void PaintSmallScenery(paint_session& session, uint8_t direction, int32_t height return; } + if (sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE) && (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_TREES)) + { + return; + } + session.InteractionType = ViewportInteractionItem::Scenery; CoordsXYZ boxLength; CoordsXYZ boxOffset{ 0, 0, height }; @@ -142,6 +147,10 @@ void PaintSmallScenery(paint_session& session, uint8_t direction, int32_t height { imageTemplate = ImageId().WithRemap(FilterPaletteID::Palette44); } + else if (sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE) && (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_TREES)) + { + imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); + } boxLength.x = 2; boxLength.y = 2; diff --git a/src/openrct2/ride/gentle/MiniGolf.cpp b/src/openrct2/ride/gentle/MiniGolf.cpp index 95c896496f..5eaae31483 100644 --- a/src/openrct2/ride/gentle/MiniGolf.cpp +++ b/src/openrct2/ride/gentle/MiniGolf.cpp @@ -1213,7 +1213,7 @@ void vehicle_visual_mini_golf_player( return; } - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_PEEPS) + if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_PEEPS) || (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS)) { return; } @@ -1255,7 +1255,7 @@ void vehicle_visual_mini_golf_ball( return; } - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_PEEPS) + if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_PEEPS) || (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS)) { return; } From 1c306e0a1a67b8c0275b85308923bda248db4aac Mon Sep 17 00:00:00 2001 From: Kane Date: Tue, 10 Aug 2021 04:38:14 +1000 Subject: [PATCH 05/27] Fix supports changing when trees were invisible --- .../paint/tile_element/Paint.SmallScenery.cpp | 89 ++++++++++--------- 1 file changed, 47 insertions(+), 42 deletions(-) diff --git a/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp b/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp index 24dc44b1f2..43eeb74ca3 100644 --- a/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp +++ b/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp @@ -103,54 +103,15 @@ static void SetSupportHeights( } } -/** - * - * rct2: 0x006DFF47 - */ -void PaintSmallScenery(paint_session& session, uint8_t direction, int32_t height, const SmallSceneryElement& sceneryElement) +static void PaintSmallSceneryBody( + paint_session& session, uint8_t direction, int32_t height, const SmallSceneryElement& sceneryElement, + const SmallSceneryEntry* sceneryEntry, ImageId imageTemplate) { PROFILED_FUNCTION(); - if (session.ViewFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES) - { - return; - } - - auto* sceneryEntry = sceneryElement.GetEntry(); - if (sceneryEntry == nullptr) - { - return; - } - - if (sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE) && (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_TREES)) - { - return; - } - session.InteractionType = ViewportInteractionItem::Scenery; CoordsXYZ boxLength; CoordsXYZ boxOffset{ 0, 0, height }; - ImageId imageTemplate; - if (gTrackDesignSaveMode) - { - if (!track_design_save_contains_tile_element(reinterpret_cast(&sceneryElement))) - { - imageTemplate = ImageId().WithRemap(FilterPaletteID::Palette46); - } - } - if (sceneryElement.IsGhost()) - { - session.InteractionType = ViewportInteractionItem::None; - imageTemplate = ImageId().WithRemap(FilterPaletteID::Palette44); - } - else if (OpenRCT2::TileInspector::IsElementSelected(reinterpret_cast(&sceneryElement))) - { - imageTemplate = ImageId().WithRemap(FilterPaletteID::Palette44); - } - else if (sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE) && (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_TREES)) - { - imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); - } boxLength.x = 2; boxLength.y = 2; @@ -344,6 +305,50 @@ void PaintSmallScenery(paint_session& session, uint8_t direction, int32_t height } } } +} + +void PaintSmallScenery(paint_session& session, uint8_t direction, int32_t height, const SmallSceneryElement& sceneryElement) +{ + PROFILED_FUNCTION(); + + if (session.ViewFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES) + { + return; + } + + auto* sceneryEntry = sceneryElement.GetEntry(); + if (sceneryEntry == nullptr) + { + return; + } + + session.InteractionType = ViewportInteractionItem::Scenery; + ImageId imageTemplate; + if (gTrackDesignSaveMode) + { + if (!track_design_save_contains_tile_element(reinterpret_cast(&sceneryElement))) + { + imageTemplate = ImageId().WithRemap(FilterPaletteID::Palette46); + } + } + if (sceneryElement.IsGhost()) + { + session.InteractionType = ViewportInteractionItem::None; + imageTemplate = ImageId().WithRemap(FilterPaletteID::Palette44); + } + else if (OpenRCT2::TileInspector::IsElementSelected(reinterpret_cast(&sceneryElement))) + { + imageTemplate = ImageId().WithRemap(FilterPaletteID::Palette44); + } + else if (sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE) && (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_TREES)) + { + imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); + } + + if (!sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE) || !(session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_TREES)) + { + PaintSmallSceneryBody(session, direction, height, sceneryElement, sceneryEntry, imageTemplate); + } PaintSmallScenerySupports(session, *sceneryEntry, sceneryElement, direction, height, imageTemplate); SetSupportHeights(session, *sceneryEntry, sceneryElement, height); From 503a351422af81f46dae7a32b3a476fd3ad3828c Mon Sep 17 00:00:00 2001 From: Kane Date: Tue, 10 Aug 2021 04:38:26 +1000 Subject: [PATCH 06/27] Start to implement ride selection list --- src/openrct2-ui/windows/Transparency.cpp | 82 ++++++++++++++++++++++-- src/openrct2/localisation/StringIds.h | 3 + 2 files changed, 78 insertions(+), 7 deletions(-) diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index ad6d7e718e..d4911e714d 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -67,7 +68,7 @@ enum WINDOW_TRANSPARENCY_WIDGET_IDX WIDX_INVISIBLE_GUESTS, WIDX_INVISIBLE_STAFF, - WIDX_PLACEHOLDER_RIDES = WIDX_TAB_CONTENT, + WIDX_LIST = WIDX_TAB_CONTENT, WIDX_PLACEHOLDER_MISC = WIDX_TAB_CONTENT, }; @@ -131,7 +132,7 @@ static rct_widget window_transparency_main_widgets[] = static rct_widget window_transparency_rides_widgets[] = { MAIN_TRANSPARENCY_WIDGETS, - MakeWidget({ 5, 48}, {238, 279}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // Guests parameters group frame + MakeWidget({ 4, 60}, {288, 327}, WindowWidgetType::Scroll, WindowColour::Secondary, SCROLL_VERTICAL), { WIDGETS_END }, }; @@ -175,7 +176,7 @@ static uint64_t window_transparency_page_enabled_widgets[] = { (1ULL << WIDX_INVISIBLE_STAFF), MAIN_TRANSPARENCY_ENABLED_WIDGETS | - (1ULL << WIDX_PLACEHOLDER_RIDES), + (1ULL << WIDX_LIST), MAIN_TRANSPARENCY_ENABLED_WIDGETS | (1ULL << WIDX_PLACEHOLDER_MISC) @@ -186,19 +187,23 @@ static uint64_t window_transparency_page_hold_down_widgets[] = { }; static rct_string_id window_transparency_page_titles[] = { - STR_CHEAT_TITLE_FINANCIAL, - STR_CHEAT_TITLE_RIDE, - STR_CHEAT_TITLE_PARK, + STR_TRANSPARENCY_OPTIONS_TITLE_MAIN, + STR_TRANSPARENCY_OPTIONS_TITLE_RIDE, + STR_TRANSPARENCY_OPTIONS_TITLE_MISC, }; // clang-format on class TransparencyWindow final : public Window { private: + int32_t _selected_list_item = -1; + std::vector _rideList; + public: void OnOpen() override { SetPage(WINDOW_TRANSPARENCY_PAGE_MAIN); + RefreshRideList(); } void OnUpdate() override @@ -230,6 +235,9 @@ public: case WINDOW_TRANSPARENCY_PAGE_MAIN: OnMouseUpMain(widgetIndex); break; + case WINDOW_TRANSPARENCY_PAGE_RIDES: + OnMouseUpRides(widgetIndex); + break; } break; } @@ -303,6 +311,11 @@ public: } } + void OnMouseUpRides(rct_widgetindex widgetIndex) + { + // TODO: Get the clicked on ride id, get the ride, set toggle is_visible + } + void OnPrepareDraw() override { auto* targetWidgets = window_transparency_page_widgets[page]; @@ -468,8 +481,63 @@ private: { } - void OnMouseUpRides(rct_widgetindex widgetIndex) + void OnScrollDraw(int32_t scrollIndex, rct_drawpixelinfo& dpi) override { + ScreenCoordsXY screenCoords; + auto bgColour = ThemeGetColour(WC_CUSTOM, 0); + + //uint8_t paletteIndex = ColourMapA[w->colours[1]].mid_light; + //gfx_clear(dpi, paletteIndex); + + screenCoords.y = 2; + for (size_t i = 0; i < _rideList.size(); i++) + { + auto ridec = get_ride(_rideList[i]); + if (ridec == nullptr) + continue; + + if (screenCoords.y + SCROLLABLE_ROW_HEIGHT >= dpi.y && screenCoords.y <= dpi.y + dpi.height) + { + gfx_fill_rect_inset(&dpi, { { 2, screenCoords.y }, { 11, screenCoords.y + 10 } }, bgColour, INSET_RECT_F_E0); + + // Draw checkmark + if (ridec->is_visible == true) + { + screenCoords.x = 2; + FontSpriteBase fontSpriteBase = FontSpriteBase::MEDIUM_DARK; + colour_t colour2 = NOT_TRANSLUCENT(bgColour); + gfx_draw_string( + &dpi, screenCoords, static_cast(CheckBoxMarkString), + { static_cast(colour2), fontSpriteBase }); + } + + screenCoords.x = 13; + + int32_t width_limit = widgets[WIDX_LIST].width() - screenCoords.x; + + // Ride name + auto ft = Formatter(); + ridec->FormatNameTo(ft); + DrawTextEllipsised(&dpi, { screenCoords.x, screenCoords.y }, width_limit, STR_WINDOW_COLOUR_2_STRINGID, ft); + } + screenCoords.y += SCROLLABLE_ROW_HEIGHT; + } + } + + void RefreshRideList() + { + _rideList.clear(); + + size_t list_index = 0; + for (auto& ridec : GetRideManager()) + { + auto rided = &ridec; + _rideList.push_back(rided->id); + list_index++; + } + + _selected_list_item = -1; + Invalidate(); } }; diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index f2814ddcbf..59151a0b9e 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3938,6 +3938,9 @@ enum : uint16_t STR_INVISIBLE_STAFF = 6478, STR_TRANSPARENCY_OPTIONS = 6479, STR_TRANSPARENCY_OPTIONS_TITLE = 6480, + STR_TRANSPARENCY_OPTIONS_TITLE_MAIN = 6481, + STR_TRANSPARENCY_OPTIONS_TITLE_RIDE = 6482, + STR_TRANSPARENCY_OPTIONS_TITLE_MISC = 6483, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings From 2e93e42a71e8798c9a19b61567c015c25d74d95b Mon Sep 17 00:00:00 2001 From: Kane Date: Thu, 12 Aug 2021 03:09:44 +1000 Subject: [PATCH 07/27] More finishing touches - Changes all references of `VIEWPORT_FLAG_INVISIBLE_PEEPS` to `VIEWPORT_FLAG_INVISIBLE_GUESTS` and `VIEWPORT_FLAG_INVISIBLE_STAFF` - Updates Invisible People menu item and shortcut. - Added new viewport flags into the `viewport_set_visibility` function - Invisible options only work if see-through is activated as well - Added see-through supports - Regression: Exclude ride from invisible no longer works (ride is still see-through) --- data/language/en-GB.txt | 5 + src/openrct2-ui/input/Shortcuts.cpp | 36 ++- src/openrct2-ui/windows/Ride.cpp | 11 - src/openrct2-ui/windows/TopToolbar.cpp | 15 +- src/openrct2-ui/windows/Transparency.cpp | 298 ++++++++---------- src/openrct2/entity/Peep.cpp | 4 - src/openrct2/interface/Screenshot.cpp | 2 +- src/openrct2/interface/Viewport.cpp | 6 +- src/openrct2/interface/Viewport.h | 19 +- src/openrct2/localisation/StringIds.h | 2 + src/openrct2/paint/Paint.cpp | 4 +- src/openrct2/paint/Supports.cpp | 70 ++-- .../paint/tile_element/Paint.Entrance.cpp | 3 +- src/openrct2/ride/TrackPaint.cpp | 3 +- src/openrct2/ride/gentle/MiniGolf.cpp | 4 +- 15 files changed, 255 insertions(+), 227 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index a14f298fea..510300ccab 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3669,6 +3669,11 @@ STR_6477 :Invisible Guests STR_6478 :Invisible Staff STR_6479 :Transparency Options STR_6480 :Transparency Options +STR_6481 :Transparency Options +STR_6482 :Ride Exclusions +STR_6483 :Other Options +STR_6484 :Invisible Vehicles +STR_6485 :See-Through Supports ############# # Scenarios # diff --git a/src/openrct2-ui/input/Shortcuts.cpp b/src/openrct2-ui/input/Shortcuts.cpp index 401bd826c0..9322f436fb 100644 --- a/src/openrct2-ui/input/Shortcuts.cpp +++ b/src/openrct2-ui/input/Shortcuts.cpp @@ -622,6 +622,38 @@ static void ShortcutToggleConsole() } } +static void ShortcutToggleInvisiblePeeps() +{ + if (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) + return; + + auto w = window_get_main(); + if (w != nullptr) + { + if (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_GUESTS || w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_STAFF) + w->viewport->flags = w->viewport->flags & ~(VIEWPORT_FLAG_INVISIBLE_GUESTS | VIEWPORT_FLAG_INVISIBLE_STAFF); + else + w->viewport->flags |= (VIEWPORT_FLAG_INVISIBLE_GUESTS | VIEWPORT_FLAG_INVISIBLE_STAFF); + w->Invalidate(); + } +} + +static void ShortcutToggleInvisibleSupports() +{ + if (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) + return; + + auto w = window_get_main(); + if (w != nullptr) + { + if (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS || w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) + w->viewport->flags = w->viewport->flags & ~(VIEWPORT_FLAG_SEETHROUGH_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); + else + w->viewport->flags |= (VIEWPORT_FLAG_SEETHROUGH_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); + w->Invalidate(); + } +} + static void ShortcutConstructionTurnLeft() { if (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) @@ -847,8 +879,8 @@ void ShortcutManager::RegisterDefaultShortcuts() RegisterShortcut(ShortcutId::ViewToggleRides, STR_SHORTCUT_SEE_THROUGH_RIDES_TOGGLE, "3", []() { ToggleViewFlag(VIEWPORT_FLAG_SEETHROUGH_RIDES); }); RegisterShortcut(ShortcutId::ViewToggleScenery, STR_SHORTCUT_SEE_THROUGH_SCENERY_TOGGLE, "4", []() { ToggleViewFlag(VIEWPORT_FLAG_SEETHROUGH_SCENERY); }); RegisterShortcut(ShortcutId::ViewToggleFootpaths, STR_SHORTCUT_SEE_THROUGH_PATHS_TOGGLE, []() { ToggleViewFlag(VIEWPORT_FLAG_SEETHROUGH_PATHS); }); - RegisterShortcut(ShortcutId::ViewToggleSupports, STR_SHORTCUT_INVISIBLE_SUPPORTS_TOGGLE, "5", []() { ToggleViewFlag(VIEWPORT_FLAG_INVISIBLE_SUPPORTS); }); - RegisterShortcut(ShortcutId::ViewTogglePeeps, STR_SHORTCUT_INVISIBLE_PEOPLE_TOGGLE, "6", []() { ToggleViewFlag(VIEWPORT_FLAG_INVISIBLE_PEEPS); }); + RegisterShortcut(ShortcutId::ViewToggleSupports, STR_SHORTCUT_INVISIBLE_SUPPORTS_TOGGLE, "5", []() { ShortcutToggleInvisibleSupports(); }); + RegisterShortcut(ShortcutId::ViewTogglePeeps, STR_SHORTCUT_INVISIBLE_PEOPLE_TOGGLE, "6", []() { ShortcutToggleInvisiblePeeps(); }); RegisterShortcut(ShortcutId::ViewToggleLandHeightMarkers, STR_SHORTCUT_HEIGHT_MARKS_ON_LAND_TOGGLE, "8", []() { ToggleViewFlag(VIEWPORT_FLAG_LAND_HEIGHTS); }); RegisterShortcut(ShortcutId::ViewToggleTrackHeightMarkers, STR_SHORTCUT_HEIGHT_MARKS_ON_RIDE_TRACKS_TOGGLE, "9", []() { ToggleViewFlag(VIEWPORT_FLAG_TRACK_HEIGHTS); }); RegisterShortcut(ShortcutId::ViewToggleFootpathHeightMarkers, STR_SHORTCUT_HEIGHT_MARKS_ON_PATHS_TOGGLE, "0", []() { ToggleViewFlag(VIEWPORT_FLAG_PATH_HEIGHTS); }); diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index ccb0e4ae78..8fee7c7865 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -1420,17 +1420,6 @@ static void WindowRideSetPage(rct_window* w, int32_t page) WindowInitScrollWidgets(w); w->Invalidate(); - if (listen != 0 && w->viewport != nullptr) - { - ride->is_visible = true; - log_info("Set ride to visible. Ride ID %u Window Number %u", ride->id, w->number); - } - else if (listen == 0 && w->viewport != nullptr) - { - ride->is_visible = false; - log_info("Set ride to invisible. Ride ID %u Window Number %u", ride->id, w->number); - } - if (listen != 0 && w->viewport != nullptr) w->viewport->flags |= VIEWPORT_FLAG_SOUND_ON; } diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index 91b7953f46..50e732c0bb 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -3665,9 +3665,9 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) Dropdown::SetChecked(DDIDX_SEETHROUGH_SCENERY, true); if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_PATHS) Dropdown::SetChecked(DDIDX_SEETHROUGH_PATHS, true); - if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) + if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) Dropdown::SetChecked(DDIDX_INVISIBLE_SUPPORTS, true); - if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS) + if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_GUESTS || mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_STAFF) Dropdown::SetChecked(DDIDX_INVISIBLE_PEEPS, true); if (mainViewport->flags & VIEWPORT_FLAG_LAND_HEIGHTS) Dropdown::SetChecked(DDIDX_LAND_HEIGHTS, true); @@ -3723,10 +3723,17 @@ static void TopToolbarViewMenuDropdown(int16_t dropdownIndex) w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_PATHS; break; case DDIDX_INVISIBLE_SUPPORTS: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; + if (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) + w->viewport->flags = w->viewport->flags + & ~(VIEWPORT_FLAG_SEETHROUGH_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); + else + w->viewport->flags |= (VIEWPORT_FLAG_SEETHROUGH_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); break; case DDIDX_INVISIBLE_PEEPS: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PEEPS; + if (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_GUESTS || w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_STAFF) + w->viewport->flags = w->viewport->flags & ~(VIEWPORT_FLAG_INVISIBLE_GUESTS | VIEWPORT_FLAG_INVISIBLE_STAFF); + else + w->viewport->flags |= (VIEWPORT_FLAG_INVISIBLE_GUESTS | VIEWPORT_FLAG_INVISIBLE_STAFF); break; case DDIDX_LAND_HEIGHTS: w->viewport->flags ^= VIEWPORT_FLAG_LAND_HEIGHTS; diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index d4911e714d..6b8b17751d 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -9,8 +9,8 @@ #include #include -#include #include +#include #include #include #include @@ -45,32 +45,26 @@ enum WINDOW_TRANSPARENCY_WIDGET_IDX WIDX_PAGE_BACKGROUND, WIDX_TAB_1, WIDX_TAB_2, - WIDX_TAB_3, WIDX_TAB_CONTENT, - WIDX_TERRAIN_GROUP = WIDX_TAB_CONTENT, - WIDX_UNDERGROUND_VIEW, - WIDX_TRANSPARENT_WATER, - WIDX_HIDE_BASE_LAND, - WIDX_HIDE_VERTICAL_FACES, - WIDX_SEE_THROUGH_GROUP, - WIDX_SEE_THROUGH_RIDES, + WIDX_SEE_THROUGH_RIDES = WIDX_TAB_CONTENT, WIDX_SEE_THROUGH_VEHICLES, WIDX_SEE_THROUGH_SCENERY, WIDX_SEE_THROUGH_TREES, WIDX_SEE_THROUGH_PATHS, - WIDX_INVISIBLE_GROUP, + WIDX_SEE_THROUGH_SUPPORTS, + WIDX_INVISIBLE_GUESTS, + WIDX_INVISIBLE_STAFF, WIDX_INVISIBLE_RIDES, + WIDX_INVISIBLE_VEHICLES, WIDX_INVISIBLE_SCENERY, WIDX_INVISIBLE_TREES, WIDX_INVISIBLE_PATHS, WIDX_INVISIBLE_SUPPORTS, - WIDX_INVISIBLE_GUESTS, - WIDX_INVISIBLE_STAFF, WIDX_LIST = WIDX_TAB_CONTENT, - WIDX_PLACEHOLDER_MISC = WIDX_TAB_CONTENT, + WIDX_MISC_GROUP = WIDX_TAB_CONTENT, }; #pragma region MEASUREMENTS @@ -79,6 +73,9 @@ static constexpr const rct_string_id WINDOW_TITLE = STR_TRANSPARENCY_OPTIONS_TIT static constexpr const int32_t WW = 249; static constexpr const int32_t WH = 300; +static constexpr ScreenSize ICON_BUTTON = {24, 24}; +static constexpr ScreenSize FLAT_BUTTON = {24, 12}; + static constexpr ScreenSize CHEAT_BUTTON = {110, 17}; static constexpr ScreenSize CHEAT_CHECK = {221, 12}; static constexpr ScreenSize CHEAT_SPINNER = {117, 14}; @@ -92,39 +89,30 @@ static constexpr const int32_t TAB_START = 3; #define MAIN_TRANSPARENCY_WIDGETS \ WINDOW_SHIM(WINDOW_TITLE, WW, WH), \ - MakeWidget({ 0, 43}, {WW, 257}, WindowWidgetType::ImgBtn, WindowColour::Secondary), /* tab content panel */ \ - MakeTab ({ 3, 17}, STR_FINANCIAL_CHEATS_TIP ), /* tab 1 */ \ - MakeTab ({34, 17}, STR_RIDE_CHEATS_TIP ), /* tab 2 */ \ - MakeTab ({65, 17}, STR_PARK_CHEATS_TIP ) /* tab 3 */ + MakeWidget({ 0, 81}, {WW, 257}, WindowWidgetType::ImgBtn, WindowColour::Secondary), /* tab content panel */ \ + MakeTab ({ 3, 55}, STR_TRANSPARENCY_OPTIONS_TITLE_MAIN), /* tab 1 */ \ + MakeTab ({34, 55}, STR_TRANSPARENCY_OPTIONS_TITLE_RIDE) // 15px group padding top, 17px margin between lines, 17px group padding bottom. 22px group margin bottom static rct_widget window_transparency_main_widgets[] = { MAIN_TRANSPARENCY_WIDGETS, - MakeWidget({ 5, 48}, {238, 83}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // General parameters group frame - MakeWidget({ 11, 63}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_UNDERGROUND_VIEW, STR_UNDERGROUND_VIEW), - MakeWidget({ 11, 80}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_VIEWPORT_TRANSPARENT_WATER, STR_VIEWPORT_TRANSPARENT_WATER), - MakeWidget({ 11, 97}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_REMOVE_BASE_LAND, STR_REMOVE_BASE_LAND), - MakeWidget({ 11, 114}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_REMOVE_VERTICAL_FACES, STR_REMOVE_VERTICAL_FACES), - - MakeWidget({ 5, 136}, {238, 100}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // See-through parameters group frame + MakeWidget({102, 15}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_RIDE, STR_SEE_THROUGH_RIDES), + MakeWidget({127, 15}, ICON_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_NONE, STR_SEE_THROUGH_VEHICLES), + MakeWidget({ 27, 15}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_LARGE_SCENERY, STR_SEE_THROUGH_SCENERY), + MakeWidget({ 2, 15}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_TREES, STR_SEE_THROUGH_TREES), + MakeWidget({ 52, 15}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_FOOTPATH, STR_SEE_THROUGH_PATHS), + MakeWidget({ 77, 15}, ICON_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_NONE, STR_SEE_THROUGH_SUPPORTS), + MakeWidget({152, 15}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_GUESTS, STR_INVISIBLE_GUESTS), + MakeWidget({177, 15}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_MECHANIC, STR_INVISIBLE_STAFF), - MakeWidget({ 11, 151}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_RIDES, STR_SEE_THROUGH_RIDES), - MakeWidget({ 11, 168}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_VEHICLES, STR_SEE_THROUGH_VEHICLES), - MakeWidget({ 11, 185}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_SCENERY, STR_SEE_THROUGH_SCENERY), - MakeWidget({ 11, 202}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_TREES, STR_SEE_THROUGH_TREES), // Trees - MakeWidget({ 11, 219}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_PATHS, STR_SEE_THROUGH_PATHS), - - MakeWidget({ 5, 241}, {238, 134}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // Invisible parameters group frame - - MakeWidget({ 11, 256}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_RIDES, STR_INVISIBLE_RIDES), - MakeWidget({ 11, 273}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_SCENERY, STR_INVISIBLE_SCENERY), - MakeWidget({ 11, 290}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_TREES, STR_INVISIBLE_TREES), // Trees - MakeWidget({ 11, 307}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_PATHS, STR_INVISIBLE_PATHS), - MakeWidget({ 11, 324}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_SUPPORTS, STR_INVISIBLE_SUPPORTS), - MakeWidget({ 11, 341}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_GUESTS, STR_INVISIBLE_GUESTS), // Guests - MakeWidget({ 11, 358}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_STAFF, STR_INVISIBLE_STAFF), // Staff + MakeWidget({102, 40}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_RIDES), + MakeWidget({127, 40}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_VEHICLES), + MakeWidget({ 27, 40}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_SCENERY), + MakeWidget({ 2, 40}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_TREES), + MakeWidget({ 52, 40}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_PATHS), + MakeWidget({ 77, 40}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_SUPPORTS), { WIDGETS_END }, }; @@ -132,15 +120,7 @@ static rct_widget window_transparency_main_widgets[] = static rct_widget window_transparency_rides_widgets[] = { MAIN_TRANSPARENCY_WIDGETS, - MakeWidget({ 4, 60}, {288, 327}, WindowWidgetType::Scroll, WindowColour::Secondary, SCROLL_VERTICAL), - { WIDGETS_END }, -}; - -//Strings for following moved to window_cheats_paint() -static rct_widget window_transparency_misc_widgets[] = -{ - MAIN_TRANSPARENCY_WIDGETS, - MakeWidget ({ 5, 48}, {238, 60}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_GENERAL_GROUP), // General group + MakeWidget({ 4, 95}, {160, 120}, WindowWidgetType::Scroll, WindowColour::Secondary, SCROLL_VERTICAL), { WIDGETS_END }, }; @@ -148,42 +128,39 @@ static rct_widget *window_transparency_page_widgets[] = { window_transparency_main_widgets, window_transparency_rides_widgets, - window_transparency_misc_widgets, }; -#define MAIN_TRANSPARENCY_ENABLED_WIDGETS (1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) +#define MAIN_TRANSPARENCY_ENABLED_WIDGETS (1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) static uint64_t window_transparency_page_enabled_widgets[] = { MAIN_TRANSPARENCY_ENABLED_WIDGETS | - (1ULL << WIDX_TERRAIN_GROUP) | - (1ULL << WIDX_UNDERGROUND_VIEW) | - (1ULL << WIDX_TRANSPARENT_WATER) | - (1ULL << WIDX_HIDE_BASE_LAND) | - (1ULL << WIDX_HIDE_VERTICAL_FACES) | - (1ULL << WIDX_SEE_THROUGH_GROUP) | (1ULL << WIDX_SEE_THROUGH_RIDES) | (1ULL << WIDX_SEE_THROUGH_VEHICLES) | (1ULL << WIDX_SEE_THROUGH_SCENERY) | (1ULL << WIDX_SEE_THROUGH_TREES) | (1ULL << WIDX_SEE_THROUGH_PATHS) | - (1ULL << WIDX_INVISIBLE_GROUP) | (1ULL << WIDX_INVISIBLE_RIDES) | + (1ULL << WIDX_INVISIBLE_VEHICLES) | (1ULL << WIDX_INVISIBLE_SCENERY) | (1ULL << WIDX_INVISIBLE_TREES) | (1ULL << WIDX_INVISIBLE_PATHS) | (1ULL << WIDX_INVISIBLE_SUPPORTS) | (1ULL << WIDX_INVISIBLE_GUESTS) | - (1ULL << WIDX_INVISIBLE_STAFF), + (1ULL << WIDX_INVISIBLE_STAFF) | + (1ULL << WIDX_SEE_THROUGH_SUPPORTS), MAIN_TRANSPARENCY_ENABLED_WIDGETS | (1ULL << WIDX_LIST), MAIN_TRANSPARENCY_ENABLED_WIDGETS | - (1ULL << WIDX_PLACEHOLDER_MISC) + (1ULL << WIDX_MISC_GROUP) +}; +static uint64_t window_transparency_page_disabled_widgets[] = { + 0, }; static uint64_t window_transparency_page_hold_down_widgets[] = { - WIDX_UNDERGROUND_VIEW, + 0, }; static rct_string_id window_transparency_page_titles[] = { @@ -226,7 +203,6 @@ public: break; case WIDX_TAB_1: case WIDX_TAB_2: - case WIDX_TAB_3: SetPage(widgetIndex - WIDX_TAB_1); break; default: @@ -238,6 +214,9 @@ public: case WINDOW_TRANSPARENCY_PAGE_RIDES: OnMouseUpRides(widgetIndex); break; + case WINDOW_TRANSPARENCY_PAGE_MISC: + OnMouseUpMisc(widgetIndex); + break; } break; } @@ -247,73 +226,27 @@ public: { } - void OnMouseUpMain(rct_widgetindex widgetIndex) - { - rct_window* w = window_get_main(); - if (w == nullptr) - return; - - switch (widgetIndex) - { - case WIDX_UNDERGROUND_VIEW: - w->viewport->flags ^= VIEWPORT_FLAG_UNDERGROUND_INSIDE; - break; - case WIDX_TRANSPARENT_WATER: - gConfigGeneral.transparent_water ^= 1; - config_save_default(); - break; - case WIDX_HIDE_BASE_LAND: - w->viewport->flags ^= VIEWPORT_FLAG_HIDE_BASE; - break; - case WIDX_HIDE_VERTICAL_FACES: - w->viewport->flags ^= VIEWPORT_FLAG_HIDE_VERTICAL; - break; - case WIDX_SEE_THROUGH_RIDES: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; - break; - case WIDX_SEE_THROUGH_VEHICLES: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_VEHICLES; - break; - case WIDX_SEE_THROUGH_SCENERY: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_SCENERY; - break; - case WIDX_SEE_THROUGH_TREES: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_TREES; - break; - case WIDX_SEE_THROUGH_PATHS: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_PATHS; - break; - case WIDX_INVISIBLE_RIDES: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_RIDES; - break; - case WIDX_INVISIBLE_SCENERY: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SCENERY; - break; - case WIDX_INVISIBLE_TREES: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_TREES; - break; - case WIDX_INVISIBLE_PATHS: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PATHS; - break; - case WIDX_INVISIBLE_SUPPORTS: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; - break; - case WIDX_INVISIBLE_GUESTS: - if (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS) - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PEEPS; - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_GUESTS; - break; - case WIDX_INVISIBLE_STAFF: - if (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS) - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PEEPS; - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_STAFF; - break; - } - } - void OnMouseUpRides(rct_widgetindex widgetIndex) { - // TODO: Get the clicked on ride id, get the ride, set toggle is_visible + } + + void OnScrollMouseDown(int32_t scrollIndex, const ScreenCoordsXY& screenCoords) override + { + auto i = screenCoords.y / SCROLLABLE_ROW_HEIGHT; + // i += static_cast(_selectedPage * GUESTS_PER_PAGE); + for (const auto& rideItem : _rideList) + { + if (i == 0) + { + auto ridec = get_ride(rideItem); + if (ridec != nullptr) + { + ridec->is_visible = (ridec->is_visible == true ? false : true); + } + break; + } + i--; + } } void OnPrepareDraw() override @@ -343,29 +276,23 @@ public: switch (page) { case WINDOW_TRANSPARENCY_PAGE_MAIN: - SetCheckboxValue(WIDX_UNDERGROUND_VIEW, (w->viewport->flags & VIEWPORT_FLAG_UNDERGROUND_INSIDE)); - SetCheckboxValue(WIDX_TRANSPARENT_WATER, (gConfigGeneral.transparent_water == 1)); - SetCheckboxValue(WIDX_HIDE_BASE_LAND, (w->viewport->flags & VIEWPORT_FLAG_HIDE_BASE)); - SetCheckboxValue(WIDX_HIDE_VERTICAL_FACES, (w->viewport->flags & VIEWPORT_FLAG_HIDE_VERTICAL)); - SetCheckboxValue(WIDX_SEE_THROUGH_RIDES, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES)); - SetCheckboxValue(WIDX_SEE_THROUGH_VEHICLES, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES)); - SetCheckboxValue(WIDX_SEE_THROUGH_SCENERY, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_SCENERY)); - SetCheckboxValue(WIDX_SEE_THROUGH_TREES, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_TREES)); - SetCheckboxValue(WIDX_SEE_THROUGH_PATHS, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_PATHS)); - SetCheckboxValue(WIDX_INVISIBLE_RIDES, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_RIDES)); - SetCheckboxValue(WIDX_INVISIBLE_SCENERY, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SCENERY)); - SetCheckboxValue(WIDX_INVISIBLE_TREES, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_TREES)); - SetCheckboxValue(WIDX_INVISIBLE_PATHS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PATHS)); - SetCheckboxValue(WIDX_INVISIBLE_SUPPORTS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)); - SetCheckboxValue( - WIDX_INVISIBLE_GUESTS, - (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_GUESTS) - || (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)); - SetCheckboxValue( - WIDX_INVISIBLE_STAFF, - (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_STAFF) - || (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)); - break; + 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)); + break; + case WINDOW_TRANSPARENCY_PAGE_MISC: + break; } } @@ -417,7 +344,6 @@ private: constexpr const uint16_t tabs[] = { WIDX_TAB_1, WIDX_TAB_2, - WIDX_TAB_3, }; auto left = TAB_START; @@ -433,7 +359,7 @@ private: void DrawTabImages(rct_drawpixelinfo& dpi) { - // Money tab + // Main tab if (!IsWidgetDisabled(WIDX_TAB_1)) { uint32_t sprite_idx = SPR_TAB_FINANCES_SUMMARY_0; @@ -452,21 +378,60 @@ private: gfx_draw_sprite( &dpi, ImageId(sprite_idx), windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_2].left, widgets[WIDX_TAB_2].top }); } - - // Guests tab - if (!IsWidgetDisabled(WIDX_TAB_3)) - { - uint32_t sprite_idx = SPR_TAB_GUESTS_0; - if (page == WINDOW_TRANSPARENCY_PAGE_MISC) - sprite_idx += (frame_no / 3) % 8; - gfx_draw_sprite( - &dpi, ImageId(sprite_idx), windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_3].left, widgets[WIDX_TAB_3].top }); - } } - void OnMouseDownMisc(rct_widgetindex widgetIndex) + void OnMouseUpMain(rct_widgetindex widgetIndex) { - // auto* widget = &widgets[widgetIndex]; + rct_window* w = window_get_main(); + if (w == nullptr) + return; + + switch (widgetIndex) + { + case WIDX_SEE_THROUGH_RIDES: + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; + break; + case WIDX_SEE_THROUGH_VEHICLES: + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_VEHICLES; + break; + case WIDX_SEE_THROUGH_SCENERY: + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_SCENERY; + break; + case WIDX_SEE_THROUGH_TREES: + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_TREES; + break; + case WIDX_SEE_THROUGH_PATHS: + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_PATHS; + break; + case WIDX_SEE_THROUGH_SUPPORTS: + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_SUPPORTS; + break; + case WIDX_INVISIBLE_RIDES: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_RIDES; + break; + case WIDX_INVISIBLE_VEHICLES: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_VEHICLES; + break; + case WIDX_INVISIBLE_SCENERY: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SCENERY; + break; + case WIDX_INVISIBLE_TREES: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_TREES; + break; + case WIDX_INVISIBLE_PATHS: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PATHS; + break; + case WIDX_INVISIBLE_SUPPORTS: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; + break; + case WIDX_INVISIBLE_GUESTS: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_GUESTS; + break; + case WIDX_INVISIBLE_STAFF: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_STAFF; + break; + } + w->Invalidate(); } void OnMouseUpMisc(rct_widgetindex widgetIndex) @@ -477,18 +442,11 @@ private: { } - void OnMouseDownRides(rct_widgetindex widgetIndex) - { - } - void OnScrollDraw(int32_t scrollIndex, rct_drawpixelinfo& dpi) override { ScreenCoordsXY screenCoords; auto bgColour = ThemeGetColour(WC_CUSTOM, 0); - //uint8_t paletteIndex = ColourMapA[w->colours[1]].mid_light; - //gfx_clear(dpi, paletteIndex); - screenCoords.y = 2; for (size_t i = 0; i < _rideList.size(); i++) { diff --git a/src/openrct2/entity/Peep.cpp b/src/openrct2/entity/Peep.cpp index 0ece4f2e33..64deb807ba 100644 --- a/src/openrct2/entity/Peep.cpp +++ b/src/openrct2/entity/Peep.cpp @@ -2733,10 +2733,6 @@ void Peep::Paint(paint_session& session, int32_t imageDirection) const return; } - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_PEEPS) - { - return; - } if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS) && Is()) { return; diff --git a/src/openrct2/interface/Screenshot.cpp b/src/openrct2/interface/Screenshot.cpp index 3522cb3c55..b45a84ccee 100644 --- a/src/openrct2/interface/Screenshot.cpp +++ b/src/openrct2/interface/Screenshot.cpp @@ -564,7 +564,7 @@ static void ApplyOptions(const ScreenshotOptions* options, rct_viewport& viewpor if (options->hide_guests) { - viewport.flags |= VIEWPORT_FLAG_INVISIBLE_PEEPS; + viewport.flags |= VIEWPORT_FLAG_INVISIBLE_GUESTS | VIEWPORT_FLAG_INVISIBLE_STAFF; } if (options->hide_sprites) diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index cbf876bcae..f5f550e0a3 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -1319,8 +1319,10 @@ void viewport_set_visibility(uint8_t mode) uint32_t mask = VIEWPORT_FLAG_UNDERGROUND_INSIDE | VIEWPORT_FLAG_SEETHROUGH_RIDES | VIEWPORT_FLAG_SEETHROUGH_SCENERY | VIEWPORT_FLAG_SEETHROUGH_PATHS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS | VIEWPORT_FLAG_LAND_HEIGHTS | VIEWPORT_FLAG_TRACK_HEIGHTS | VIEWPORT_FLAG_PATH_HEIGHTS - | VIEWPORT_FLAG_INVISIBLE_PEEPS | VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_HIDE_VERTICAL - | VIEWPORT_FLAG_SEETHROUGH_VEHICLES; + | VIEWPORT_FLAG_INVISIBLE_GUESTS | VIEWPORT_FLAG_INVISIBLE_STAFF | VIEWPORT_FLAG_HIDE_BASE + | VIEWPORT_FLAG_HIDE_VERTICAL | VIEWPORT_FLAG_SEETHROUGH_VEHICLES | VIEWPORT_FLAG_INVISIBLE_RIDES + | VIEWPORT_FLAG_INVISIBLE_VEHICLES | VIEWPORT_FLAG_SEETHROUGH_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_PATHS + | VIEWPORT_FLAG_INVISIBLE_SCENERY | VIEWPORT_FLAG_SEETHROUGH_TREES | VIEWPORT_FLAG_INVISIBLE_TREES; invalidate += vp->flags & mask; vp->flags &= ~mask; diff --git a/src/openrct2/interface/Viewport.h b/src/openrct2/interface/Viewport.h index 55c74d9858..4f223b9ee2 100644 --- a/src/openrct2/interface/Viewport.h +++ b/src/openrct2/interface/Viewport.h @@ -40,7 +40,7 @@ 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), + 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), @@ -50,13 +50,16 @@ enum VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES = (1 << 18), VIEWPORT_FLAG_TRANSPARENT_BACKGROUND = (1 << 19), VIEWPORT_FLAG_SEETHROUGH_VEHICLES = (1 << 20), - VIEWPORT_FLAG_INVISIBLE_RIDES = (1 << 21), - VIEWPORT_FLAG_INVISIBLE_SCENERY = (1 << 22), - VIEWPORT_FLAG_INVISIBLE_PATHS = (1 << 23), - VIEWPORT_FLAG_INVISIBLE_GUESTS = (1 << 24), - VIEWPORT_FLAG_INVISIBLE_STAFF = (1 << 25), - VIEWPORT_FLAG_SEETHROUGH_TREES = (1 << 26), - VIEWPORT_FLAG_INVISIBLE_TREES = (1 << 27), + VIEWPORT_FLAG_INVISIBLE_VEHICLES = (1 << 21), + VIEWPORT_FLAG_INVISIBLE_RIDES = (1 << 22), + VIEWPORT_FLAG_INVISIBLE_SCENERY = (1 << 23), + VIEWPORT_FLAG_INVISIBLE_PATHS = (1 << 24), + VIEWPORT_FLAG_INVISIBLE_GUESTS = (1 << 25), + VIEWPORT_FLAG_INVISIBLE_STAFF = (1 << 26), + 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/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index 59151a0b9e..e56082ad8c 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3941,6 +3941,8 @@ enum : uint16_t STR_TRANSPARENCY_OPTIONS_TITLE_MAIN = 6481, STR_TRANSPARENCY_OPTIONS_TITLE_RIDE = 6482, STR_TRANSPARENCY_OPTIONS_TITLE_MISC = 6483, + STR_INVISIBLE_VEHICLES = 6484, + STR_SEE_THROUGH_SUPPORTS = 6485, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings diff --git a/src/openrct2/paint/Paint.cpp b/src/openrct2/paint/Paint.cpp index 5944b47c87..448e67f025 100644 --- a/src/openrct2/paint/Paint.cpp +++ b/src/openrct2/paint/Paint.cpp @@ -722,7 +722,7 @@ static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem sp break; } } - if (viewFlags & VIEWPORT_FLAG_INVISIBLE_PATHS) + if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_PATHS && viewFlags & VIEWPORT_FLAG_INVISIBLE_PATHS) { switch (spriteType) { @@ -734,7 +734,7 @@ static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem sp break; } } - if (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) + if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY && viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) { switch (spriteType) { diff --git a/src/openrct2/paint/Supports.cpp b/src/openrct2/paint/Supports.cpp index a990a7bd4a..ce7279a5a1 100644 --- a/src/openrct2/paint/Supports.cpp +++ b/src/openrct2/paint/Supports.cpp @@ -445,6 +445,10 @@ static constexpr const uint16_t word_97B3C4[] = { 15, 0, }; + +constexpr uint32_t primaryColour = COLOUR_BRIGHT_YELLOW; +constexpr uint32_t secondaryColour = COLOUR_GREY; +constexpr uint32_t seeThoughFlags = IMAGE_TYPE_TRANSPARENT | (primaryColour << 19) | (secondaryColour << 24); // clang-format on bool wooden_a_supports_paint_setup( @@ -472,14 +476,19 @@ bool wooden_b_supports_paint_setup( bool wooden_a_supports_paint_setup( paint_session& session, int32_t supportType, int32_t special, int32_t height, ImageId imageTemplate) { + if (!(session.Flags & PaintSessionFlags::PassedSurface)) + { + return false; + } + if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) { return false; } - if (!(session.Flags & PaintSessionFlags::PassedSurface)) + if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) { - return false; + imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); } int32_t z = floor2(session.Support.height + 15, 16); @@ -629,16 +638,19 @@ bool wooden_a_supports_paint_setup( bool wooden_b_supports_paint_setup( paint_session& session, int32_t supportType, int32_t special, int32_t height, ImageId imageTemplate) { - bool _9E32B1 = false; + if (!(session.Flags & PaintSessionFlags::PassedSurface)) + { + return false; + } if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) { return false; } - if (!(session.Flags & PaintSessionFlags::PassedSurface)) + if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) { - return false; + imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); } uint16_t baseHeight = ceil2(session.Support.height, 16); @@ -651,8 +663,8 @@ bool wooden_b_supports_paint_setup( int16_t heightSteps = supportLength / 16; + bool _9E32B1 = false; bool goTo662E8B = false; - if (session.Support.slope & 0x20) { goTo662E8B = true; @@ -801,14 +813,19 @@ bool metal_a_supports_paint_setup( { support_height* supportSegments = session.SupportSegments; + if (!(session.Flags & PaintSessionFlags::PassedSurface)) + { + return false; + } + if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) { return false; } - if (!(session.Flags & PaintSessionFlags::PassedSurface)) + if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) { - return false; + imageColourFlags = ImageId(0).WithTransparancy(FilterPaletteID::PaletteDarken1).ToUInt32(); } int16_t originalHeight = height; @@ -1000,14 +1017,19 @@ bool metal_b_supports_paint_setup( support_height* supportSegments = session.SupportSegments; uint8_t originalSegment = segment; - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) + if (!(session.Flags & PaintSessionFlags::PassedSurface)) { return false; // AND } - if (!(session.Flags & PaintSessionFlags::PassedSurface)) + if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) { - return false; // AND + return false; + } + + if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) + { + imageColourFlags = ImageId(0).WithTransparancy(FilterPaletteID::PaletteDarken1).ToUInt32(); } uint16_t _9E3294 = 0xFFFF; @@ -1180,14 +1202,19 @@ bool path_a_supports_paint_setup( *underground = false; // AND } + if (!(session.Flags & PaintSessionFlags::PassedSurface)) + { + return false; + } + if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) { return false; } - if (!(session.Flags & PaintSessionFlags::PassedSurface)) + if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) { - return false; + imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); } uint16_t baseHeight = ceil2(session.Support.height, 16); @@ -1330,14 +1357,19 @@ bool path_b_supports_paint_setup( { support_height* supportSegments = session.SupportSegments; - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) - { - return false; // AND - } - if (!(session.Flags & PaintSessionFlags::PassedSurface)) { - return false; // AND + return false; + } + + if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) + { + return false; + } + + if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) + { + imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); } if (height < supportSegments[segment].height) diff --git a/src/openrct2/paint/tile_element/Paint.Entrance.cpp b/src/openrct2/paint/tile_element/Paint.Entrance.cpp index 0822dd511a..0e28aa6b67 100644 --- a/src/openrct2/paint/tile_element/Paint.Entrance.cpp +++ b/src/openrct2/paint/tile_element/Paint.Entrance.cpp @@ -125,7 +125,8 @@ static void PaintRideEntranceExit(paint_session& session, uint8_t direction, int return; } - if ((session->ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) && ride->is_visible == false) + if ((session->ViewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES && session->ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) + && ride->is_visible == false) return; auto stationObj = ride->GetStationObject(); diff --git a/src/openrct2/ride/TrackPaint.cpp b/src/openrct2/ride/TrackPaint.cpp index 466cccfb0e..e075f84bc2 100644 --- a/src/openrct2/ride/TrackPaint.cpp +++ b/src/openrct2/ride/TrackPaint.cpp @@ -2195,7 +2195,8 @@ void PaintTrack(paint_session& session, Direction direction, int32_t height, con return; } - if ((session->ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) && ride->is_visible == false) + if ((session->ViewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES && session->ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) + && ride->is_visible == false) return; if ((!gTrackDesignSaveMode || rideIndex == gTrackDesignSaveRideIndex) diff --git a/src/openrct2/ride/gentle/MiniGolf.cpp b/src/openrct2/ride/gentle/MiniGolf.cpp index 5eaae31483..65671bf759 100644 --- a/src/openrct2/ride/gentle/MiniGolf.cpp +++ b/src/openrct2/ride/gentle/MiniGolf.cpp @@ -1213,7 +1213,7 @@ void vehicle_visual_mini_golf_player( return; } - if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_PEEPS) || (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS)) + if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS) { return; } @@ -1255,7 +1255,7 @@ void vehicle_visual_mini_golf_ball( return; } - if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_PEEPS) || (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS)) + if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS) { return; } From 564dee2671b9d40a7499314b3ca2d64b588edd94 Mon Sep 17 00:00:00 2001 From: Kane Date: Thu, 12 Aug 2021 22:56:21 +1000 Subject: [PATCH 08/27] Remove unused variables --- src/openrct2-ui/windows/Ride.cpp | 1 - src/openrct2-ui/windows/Transparency.cpp | 5 ----- 2 files changed, 6 deletions(-) diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 8fee7c7865..c63a8bf4d2 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -1374,7 +1374,6 @@ rct_window* WindowRideOpenVehicle(Vehicle* vehicle) static void WindowRideSetPage(rct_window* w, int32_t page) { int32_t listen; - auto ride = get_ride(w->number); if (input_test_flag(INPUT_FLAG_TOOL_ACTIVE)) if (w->classification == gCurrentToolWidget.window_classification && w->number == gCurrentToolWidget.window_number) diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index 6b8b17751d..a7d0ccb775 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -76,11 +76,6 @@ static constexpr const int32_t WH = 300; static constexpr ScreenSize ICON_BUTTON = {24, 24}; static constexpr ScreenSize FLAT_BUTTON = {24, 12}; -static constexpr ScreenSize CHEAT_BUTTON = {110, 17}; -static constexpr ScreenSize CHEAT_CHECK = {221, 12}; -static constexpr ScreenSize CHEAT_SPINNER = {117, 14}; -static constexpr ScreenSize MINMAX_BUTTON = {55, 17}; - static constexpr const int32_t TAB_WIDTH = 31; static constexpr const int32_t TAB_START = 3; From 9bf003c018d0a575065163ae60bc1f52f63e09a0 Mon Sep 17 00:00:00 2001 From: Kane Date: Fri, 13 Aug 2021 20:04:50 +1000 Subject: [PATCH 09/27] Add new sprites --- resources/g2/icons/coaster_train.png | Bin 0 -> 15134 bytes resources/g2/icons/supports.png | Bin 0 -> 12419 bytes resources/g2/sprites.json | 6 ++++++ src/openrct2-ui/windows/Transparency.cpp | 6 +++--- src/openrct2/sprites.h | 5 ++++- 5 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 resources/g2/icons/coaster_train.png create mode 100644 resources/g2/icons/supports.png diff --git a/resources/g2/icons/coaster_train.png b/resources/g2/icons/coaster_train.png new file mode 100644 index 0000000000000000000000000000000000000000..97d47a93cf16b33a11dfe00c95dc9784d6601c9b GIT binary patch literal 15134 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 gm+S4Dr~O;#LJjhz{YSA|h+tYk={EnH{ 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 SLKJ3R0Eni6Mva Date: Sat, 14 Aug 2021 00:54:16 +1000 Subject: [PATCH 10/27] Misc. clean ups Define see-through paint colours in Paint.h for global use Color staff sprite button Change ride->is_visible bool to ignore_invisible_flag bool Add shortcut to open transparency options (CTRL+T) --- data/language/en-GB.txt | 9 +- src/openrct2-ui/input/ShortcutIds.h | 1 + src/openrct2-ui/input/Shortcuts.cpp | 9 + src/openrct2-ui/windows/Transparency.cpp | 187 +++++------------- src/openrct2/localisation/StringIds.h | 9 +- src/openrct2/paint/Paint.Entity.cpp | 2 +- src/openrct2/paint/Paint.cpp | 2 +- .../paint/tile_element/Paint.Entrance.cpp | 2 +- src/openrct2/ride/Ride.h | 2 +- src/openrct2/ride/TrackPaint.cpp | 2 +- 10 files changed, 76 insertions(+), 149 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 510300ccab..8a1ef7a1e6 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3669,11 +3669,10 @@ STR_6477 :Invisible Guests STR_6478 :Invisible Staff STR_6479 :Transparency Options STR_6480 :Transparency Options -STR_6481 :Transparency Options -STR_6482 :Ride Exclusions -STR_6483 :Other Options -STR_6484 :Invisible Vehicles -STR_6485 :See-Through Supports +STR_6481 :Invisible Vehicles +STR_6482 :See-Through Supports +STR_6483 :Open transparency options +STR_6484 :Ride Exclusions ############# # Scenarios # diff --git a/src/openrct2-ui/input/ShortcutIds.h b/src/openrct2-ui/input/ShortcutIds.h index 5cf208fab5..eca4834a53 100644 --- a/src/openrct2-ui/input/ShortcutIds.h +++ b/src/openrct2-ui/input/ShortcutIds.h @@ -52,6 +52,7 @@ namespace OpenRCT2::Ui::ShortcutId constexpr std::string_view InterfaceOpenMessages = "interface.open.messages"; constexpr std::string_view InterfaceOpenMap = "interface.open.map"; constexpr std::string_view InterfaceShowOptions = "interface.open.options"; + constexpr std::string_view InterfaceOpenTransparencyOptions = "interface.open.transparency_options"; constexpr std::string_view InterfaceOpenCheats = "interface.open.cheats"; constexpr std::string_view InterfaceOpenTileInspector = "interface.open.tileinspector"; constexpr std::string_view MultiplayerShow = "interface.open.multiplayer"; diff --git a/src/openrct2-ui/input/Shortcuts.cpp b/src/openrct2-ui/input/Shortcuts.cpp index 9322f436fb..54090fd96d 100644 --- a/src/openrct2-ui/input/Shortcuts.cpp +++ b/src/openrct2-ui/input/Shortcuts.cpp @@ -391,6 +391,14 @@ static void ShortcutOpenCheatWindow() context_open_window(WC_CHEATS); } +static void ShortcutOpenTransparencyWindow() +{ + if (gScreenFlags != SCREEN_FLAGS_PLAYING) + return; + + context_open_window(WC_TRANSPARENCY); +} + static void ShortcutClearScenery() { if (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) @@ -833,6 +841,7 @@ void ShortcutManager::RegisterDefaultShortcuts() RegisterShortcut(ShortcutId::InterfaceSceneryPicker, STR_SHORTCUT_OPEN_SCENERY_PICKER, []() { ShortcutOpenSceneryPicker(); }); RegisterShortcut(ShortcutId::InterfaceShowOptions, STR_SHORTCUT_SHOW_OPTIONS, []() { context_open_window(WC_OPTIONS); }); + RegisterShortcut(ShortcutId::InterfaceOpenTransparencyOptions, STR_SHORTCUT_OPEN_TRANSPARENCY_OPTIONS, "CTRL+T", []() { ShortcutOpenTransparencyWindow(); }); RegisterShortcut(ShortcutId::InterfaceOpenCheats, STR_SHORTCUT_OPEN_CHEATS_WINDOW, "CTRL+ALT+C", []() { ShortcutOpenCheatWindow(); }); RegisterShortcut(ShortcutId::InterfaceOpenMap, STR_SHORTCUT_SHOW_MAP, "TAB", []() { ShortcutShowMap(); }); RegisterShortcut(ShortcutId::InterfaceClearScenery, STR_SHORTCUT_CLEAR_SCENERY, "B", []() { ShortcutClearScenery(); }); diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index a2bd7767bc..f80e6850fe 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -33,7 +34,6 @@ enum { WINDOW_TRANSPARENCY_PAGE_MAIN, WINDOW_TRANSPARENCY_PAGE_RIDES, - WINDOW_TRANSPARENCY_PAGE_MISC, WINDOW_TRANSPARENCY_PAGE_COUNT, }; @@ -63,51 +63,44 @@ enum WINDOW_TRANSPARENCY_WIDGET_IDX WIDX_INVISIBLE_SUPPORTS, WIDX_LIST = WIDX_TAB_CONTENT, - - WIDX_MISC_GROUP = WIDX_TAB_CONTENT, }; #pragma region MEASUREMENTS static constexpr const rct_string_id WINDOW_TITLE = STR_TRANSPARENCY_OPTIONS_TITLE; -static constexpr const int32_t WW = 249; -static constexpr const int32_t WH = 300; +static constexpr const int32_t WW = 203; +static constexpr const int32_t WH = 70; static constexpr ScreenSize ICON_BUTTON = {24, 24}; static constexpr ScreenSize FLAT_BUTTON = {24, 12}; -static constexpr const int32_t TAB_WIDTH = 31; -static constexpr const int32_t TAB_START = 3; - - #pragma endregion #define MAIN_TRANSPARENCY_WIDGETS \ WINDOW_SHIM(WINDOW_TITLE, WW, WH), \ - MakeWidget({ 0, 81}, {WW, 257}, WindowWidgetType::ImgBtn, WindowColour::Secondary), /* tab content panel */ \ - MakeTab ({ 3, 55}, STR_TRANSPARENCY_OPTIONS_TITLE_MAIN), /* tab 1 */ \ - MakeTab ({34, 55}, STR_TRANSPARENCY_OPTIONS_TITLE_RIDE) + MakeWidget({ 0, 0}, { 0, 0}, WindowWidgetType::ImgBtn, WindowColour::Secondary), /* tab content panel */ \ + MakeWidget({189, 42}, { 12, 6}, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_TRANSPARENCY_OPTIONS_TITLE), \ + MakeWidget({189, 48}, { 12, 6}, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_TRANSPARENCY_OPTIONS_TITLE_RIDE) -// 15px group padding top, 17px margin between lines, 17px group padding bottom. 22px group margin bottom static rct_widget window_transparency_main_widgets[] = { MAIN_TRANSPARENCY_WIDGETS, - MakeWidget({102, 15}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_RIDE, STR_SEE_THROUGH_RIDES), - MakeWidget({127, 15}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_COASTER_TRAIN, STR_SEE_THROUGH_VEHICLES), - MakeWidget({ 27, 15}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_LARGE_SCENERY, STR_SEE_THROUGH_SCENERY), - MakeWidget({ 2, 15}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_TREES, STR_SEE_THROUGH_TREES), - MakeWidget({ 52, 15}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_FOOTPATH, STR_SEE_THROUGH_PATHS), - MakeWidget({ 77, 15}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_SUPPORTS, STR_SEE_THROUGH_SUPPORTS), - MakeWidget({152, 15}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_GUESTS, STR_INVISIBLE_GUESTS), - MakeWidget({177, 15}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_MECHANIC, STR_INVISIBLE_STAFF), // TODO: Color clothing in sprite + MakeWidget({ 77, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_RIDE, STR_SEE_THROUGH_RIDES), + MakeWidget({102, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_COASTER_TRAIN, STR_SEE_THROUGH_VEHICLES), + MakeWidget({ 27, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_LARGE_SCENERY, STR_SEE_THROUGH_SCENERY), + MakeWidget({ 2, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_TREES, STR_SEE_THROUGH_TREES), + MakeWidget({ 52, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_FOOTPATH, STR_SEE_THROUGH_PATHS), + MakeWidget({127, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_SUPPORTS, STR_SEE_THROUGH_SUPPORTS), + MakeWidget({152, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_GUESTS, STR_INVISIBLE_GUESTS), + MakeWidget({177, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, 0xFFFFFFFF, STR_INVISIBLE_STAFF), - MakeWidget({102, 40}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_RIDES), - MakeWidget({127, 40}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_VEHICLES), - MakeWidget({ 27, 40}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_SCENERY), - MakeWidget({ 2, 40}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_TREES), - MakeWidget({ 52, 40}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_PATHS), - MakeWidget({ 77, 40}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_SUPPORTS), + MakeWidget({ 77, 42}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_RIDES), + MakeWidget({102, 42}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_VEHICLES), + MakeWidget({ 27, 42}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_SCENERY), + MakeWidget({ 2, 42}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_TREES), + MakeWidget({ 52, 42}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_PATHS), + MakeWidget({127, 42}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_SUPPORTS), { WIDGETS_END }, }; @@ -115,7 +108,7 @@ static rct_widget window_transparency_main_widgets[] = static rct_widget window_transparency_rides_widgets[] = { MAIN_TRANSPARENCY_WIDGETS, - MakeWidget({ 4, 95}, {160, 120}, WindowWidgetType::Scroll, WindowColour::Secondary, SCROLL_VERTICAL), + MakeWidget({ 2, 17}, {160, 200}, WindowWidgetType::Scroll, WindowColour::Secondary, SCROLL_VERTICAL), { WIDGETS_END }, }; @@ -145,23 +138,12 @@ static uint64_t window_transparency_page_enabled_widgets[] = { (1ULL << WIDX_SEE_THROUGH_SUPPORTS), MAIN_TRANSPARENCY_ENABLED_WIDGETS | - (1ULL << WIDX_LIST), - - MAIN_TRANSPARENCY_ENABLED_WIDGETS | - (1ULL << WIDX_MISC_GROUP) -}; -static uint64_t window_transparency_page_disabled_widgets[] = { - 0, -}; - -static uint64_t window_transparency_page_hold_down_widgets[] = { - 0, + (1ULL << WIDX_LIST) }; static rct_string_id window_transparency_page_titles[] = { - STR_TRANSPARENCY_OPTIONS_TITLE_MAIN, - STR_TRANSPARENCY_OPTIONS_TITLE_RIDE, - STR_TRANSPARENCY_OPTIONS_TITLE_MISC, + STR_TRANSPARENCY_OPTIONS_TITLE, + STR_TRANSPARENCY_OPTIONS_TITLE_RIDE }; // clang-format on @@ -175,20 +157,19 @@ public: void OnOpen() override { SetPage(WINDOW_TRANSPARENCY_PAGE_MAIN); + + auto* w = window_get_main(); + if (w != nullptr) + windowPos.x = ((w->width / 2) - (width / 2)); + RefreshRideList(); } void OnUpdate() override { - frame_no++; InvalidateWidget(WIDX_TAB_1 + page); } - void OnMouseDown(rct_widgetindex widgetIndex) override - { - // switch (page) - } - void OnMouseUp(rct_widgetindex widgetIndex) override { switch (widgetIndex) @@ -206,41 +187,30 @@ public: case WINDOW_TRANSPARENCY_PAGE_MAIN: OnMouseUpMain(widgetIndex); break; - case WINDOW_TRANSPARENCY_PAGE_RIDES: - OnMouseUpRides(widgetIndex); - break; - case WINDOW_TRANSPARENCY_PAGE_MISC: - OnMouseUpMisc(widgetIndex); - break; } break; } } - void OnDropdown(rct_widgetindex widgetIndex, int32_t selectedIndex) override - { - } - - void OnMouseUpRides(rct_widgetindex widgetIndex) - { - } - void OnScrollMouseDown(int32_t scrollIndex, const ScreenCoordsXY& screenCoords) override { - auto i = screenCoords.y / SCROLLABLE_ROW_HEIGHT; - // i += static_cast(_selectedPage * GUESTS_PER_PAGE); - for (const auto& rideItem : _rideList) + if (page == WINDOW_TRANSPARENCY_PAGE_RIDES) { - if (i == 0) + auto i = screenCoords.y / SCROLLABLE_ROW_HEIGHT; + // i += static_cast(_selectedPage * GUESTS_PER_PAGE); + for (const auto& rideItem : _rideList) { - auto ridec = get_ride(rideItem); - if (ridec != nullptr) + if (i == 0) { - ridec->is_visible = (ridec->is_visible == true ? false : true); + auto ridec = get_ride(rideItem); + if (ridec != nullptr) + { + ridec->ignore_invisible_flag = (ridec->ignore_invisible_flag == true ? false : true); + } + break; } - break; + i--; } - i--; } } @@ -286,20 +256,22 @@ public: SetWidgetPressed(WIDX_INVISIBLE_GUESTS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_GUESTS)); SetWidgetPressed(WIDX_INVISIBLE_STAFF, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_STAFF)); break; - case WINDOW_TRANSPARENCY_PAGE_MISC: - break; } } void OnDraw(rct_drawpixelinfo& dpi) override { - UpdateTabPositions(); DrawWidgets(dpi); - DrawTabImages(dpi); - } - void OnTextInput(rct_widgetindex widgetIndex, std::string_view text) override - { + if (page == WINDOW_TRANSPARENCY_PAGE_MAIN) + { + // Locate mechanic button image + rct_widget* 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 @@ -311,10 +283,7 @@ private: void SetPage(int32_t p) { page = p; - frame_no = 0; - enabled_widgets = window_transparency_page_enabled_widgets[p]; - hold_down_widgets = window_transparency_page_hold_down_widgets[p]; pressed_widgets = 0; widgets = window_transparency_page_widgets[p]; @@ -325,7 +294,7 @@ private: maxY = std::max(maxY, widget->bottom); widget++; } - maxY += 6; + maxY += 4; Invalidate(); height = maxY; @@ -334,47 +303,6 @@ private: Invalidate(); } - void UpdateTabPositions() - { - constexpr const uint16_t tabs[] = { - WIDX_TAB_1, - WIDX_TAB_2, - }; - - auto left = TAB_START; - for (auto tab : tabs) - { - widgets[tab].left = left; - if (!IsWidgetDisabled(tab)) - { - left += TAB_WIDTH; - } - } - } - - void DrawTabImages(rct_drawpixelinfo& dpi) - { - // Main tab - if (!IsWidgetDisabled(WIDX_TAB_1)) - { - uint32_t sprite_idx = SPR_TAB_FINANCES_SUMMARY_0; - if (page == WINDOW_TRANSPARENCY_PAGE_MAIN) - sprite_idx += (frame_no / 2) % 8; - gfx_draw_sprite( - &dpi, ImageId(sprite_idx), windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_1].left, widgets[WIDX_TAB_1].top }); - } - - // Rides tab - if (!IsWidgetDisabled(WIDX_TAB_2)) - { - uint32_t sprite_idx = SPR_TAB_RIDE_0; - if (page == WINDOW_TRANSPARENCY_PAGE_RIDES) - sprite_idx += (frame_no / 4) % 16; - gfx_draw_sprite( - &dpi, ImageId(sprite_idx), windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_2].left, widgets[WIDX_TAB_2].top }); - } - } - void OnMouseUpMain(rct_widgetindex widgetIndex) { rct_window* w = window_get_main(); @@ -429,14 +357,6 @@ private: w->Invalidate(); } - void OnMouseUpMisc(rct_widgetindex widgetIndex) - { - } - - void OnDropdownMisc(rct_widgetindex widgetIndex, int32_t dropdownIndex) - { - } - void OnScrollDraw(int32_t scrollIndex, rct_drawpixelinfo& dpi) override { ScreenCoordsXY screenCoords; @@ -454,7 +374,7 @@ private: gfx_fill_rect_inset(&dpi, { { 2, screenCoords.y }, { 11, screenCoords.y + 10 } }, bgColour, INSET_RECT_F_E0); // Draw checkmark - if (ridec->is_visible == true) + if (ridec->ignore_invisible_flag == true) { screenCoords.x = 2; FontSpriteBase fontSpriteBase = FontSpriteBase::MEDIUM_DARK; @@ -498,8 +418,7 @@ rct_window* WindowTransparencyOpen() { auto* window = window_bring_to_front_by_class(WC_TRANSPARENCY); if (window == nullptr) - { window = WindowCreate(WC_TRANSPARENCY, ScreenCoordsXY(32, 32), WW, WH); - } + return window; } diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index e56082ad8c..e8c7d74b08 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3938,11 +3938,10 @@ enum : uint16_t STR_INVISIBLE_STAFF = 6478, STR_TRANSPARENCY_OPTIONS = 6479, STR_TRANSPARENCY_OPTIONS_TITLE = 6480, - STR_TRANSPARENCY_OPTIONS_TITLE_MAIN = 6481, - STR_TRANSPARENCY_OPTIONS_TITLE_RIDE = 6482, - STR_TRANSPARENCY_OPTIONS_TITLE_MISC = 6483, - STR_INVISIBLE_VEHICLES = 6484, - STR_SEE_THROUGH_SUPPORTS = 6485, + STR_INVISIBLE_VEHICLES = 6481, + STR_SEE_THROUGH_SUPPORTS = 6482, + STR_SHORTCUT_OPEN_TRANSPARENCY_OPTIONS = 6483, + STR_TRANSPARENCY_OPTIONS_TITLE_RIDE = 6484, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings diff --git a/src/openrct2/paint/Paint.Entity.cpp b/src/openrct2/paint/Paint.Entity.cpp index 5d648689b7..aaa5116a55 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->is_visible) + if (ride != nullptr && !ride->ignore_invisible_flag) return; } } diff --git a/src/openrct2/paint/Paint.cpp b/src/openrct2/paint/Paint.cpp index 448e67f025..b04c226d1f 100644 --- a/src/openrct2/paint/Paint.cpp +++ b/src/openrct2/paint/Paint.cpp @@ -684,7 +684,7 @@ static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem sp return seeThrough; } } - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) + if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES && !(viewFlags & VIEWPORT_FLAG_INVISIBLE_VEHICLES)) { if (spriteType == ViewportInteractionItem::Entity && entityType == EntityType::Vehicle) { diff --git a/src/openrct2/paint/tile_element/Paint.Entrance.cpp b/src/openrct2/paint/tile_element/Paint.Entrance.cpp index 0e28aa6b67..43d5b62d06 100644 --- a/src/openrct2/paint/tile_element/Paint.Entrance.cpp +++ b/src/openrct2/paint/tile_element/Paint.Entrance.cpp @@ -126,7 +126,7 @@ static void PaintRideEntranceExit(paint_session& session, uint8_t direction, int } if ((session->ViewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES && session->ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) - && ride->is_visible == false) + && ride->ignore_invisible_flag == false) return; auto stationObj = ride->GetStationObject(); diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index dda626da7d..e160844250 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -287,7 +287,7 @@ public: uint16_t inversions; uint16_t holes; uint8_t sheltered_eighths; - bool is_visible = false; + bool ignore_invisible_flag = false; std::unique_ptr measurement; diff --git a/src/openrct2/ride/TrackPaint.cpp b/src/openrct2/ride/TrackPaint.cpp index e075f84bc2..f13ed0bee8 100644 --- a/src/openrct2/ride/TrackPaint.cpp +++ b/src/openrct2/ride/TrackPaint.cpp @@ -2196,7 +2196,7 @@ void PaintTrack(paint_session& session, Direction direction, int32_t height, con } if ((session->ViewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES && session->ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) - && ride->is_visible == false) + && ride->ignore_invisible_flag == false) return; if ((!gTrackDesignSaveMode || rideIndex == gTrackDesignSaveRideIndex) From 26d558c4d04cee33843938380cbe9cba209a474c Mon Sep 17 00:00:00 2001 From: Kane Date: Sat, 14 Aug 2021 01:56:31 +1000 Subject: [PATCH 11/27] Resolve merge conflict. Fix tree hiding. --- src/openrct2/paint/tile_element/Paint.Entrance.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/openrct2/paint/tile_element/Paint.Entrance.cpp b/src/openrct2/paint/tile_element/Paint.Entrance.cpp index 43d5b62d06..06083f03f7 100644 --- a/src/openrct2/paint/tile_element/Paint.Entrance.cpp +++ b/src/openrct2/paint/tile_element/Paint.Entrance.cpp @@ -124,9 +124,9 @@ 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 == false) + + if ((session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) && (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) + && !ride->ignore_invisible_flag) return; auto stationObj = ride->GetStationObject(); From 5d7f7485aac87cd22c2cd406e0ff7f7428fbfe14 Mon Sep 17 00:00:00 2001 From: Kane Date: Sun, 10 Oct 2021 21:40:14 +1100 Subject: [PATCH 12/27] Update for rebase, add window theme, fix bugs - Along with rebasing the code it became nessecary to update various calls to `scenery_small_entry_has_flag` and `EntityBase`. - Added a new window theme with default colours. - Fixed bug with see-through supports not working. - Removed incomplete "ride exclusions" tab - Removed unused text string (Ride Exclusions) --- data/language/en-GB.txt | 1 - src/openrct2-ui/interface/Theme.cpp | 1 + src/openrct2-ui/windows/Themes.cpp | 1 + src/openrct2-ui/windows/Transparency.cpp | 263 +++-------------------- src/openrct2/localisation/StringIds.h | 1 - 5 files changed, 34 insertions(+), 233 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 8a1ef7a1e6..96b4f893d8 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3672,7 +3672,6 @@ STR_6480 :Transparency Options STR_6481 :Invisible Vehicles STR_6482 :See-Through Supports STR_6483 :Open transparency options -STR_6484 :Ride Exclusions ############# # Scenarios # diff --git a/src/openrct2-ui/interface/Theme.cpp b/src/openrct2-ui/interface/Theme.cpp index 65ef37be3b..02b2eb3bf2 100644 --- a/src/openrct2-ui/interface/Theme.cpp +++ b/src/openrct2-ui/interface/Theme.cpp @@ -175,6 +175,7 @@ static constexpr const WindowThemeDesc WindowThemeDescriptors[] = { THEME_WC(WC_TILE_INSPECTOR), STR_TILE_INSPECTOR_TITLE, COLOURS_2(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, { THEME_WC(WC_VIEW_CLIPPING), STR_VIEW_CLIPPING_TITLE, COLOURS_1(COLOUR_DARK_GREEN ) }, { THEME_WC(WC_PATROL_AREA), STR_SET_PATROL_AREA, COLOURS_3(COLOUR_LIGHT_PURPLE, COLOUR_LIGHT_PURPLE, COLOUR_LIGHT_PURPLE ) }, + { THEME_WC(WC_TRANSPARENCY), STR_TRANSPARENCY_OPTIONS_TITLE, COLOURS_3(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, { THEME_WC(WC_ABOUT), STR_ABOUT, COLOURS_2(COLOUR_GREY, COLOUR_LIGHT_BLUE ) }, { THEME_WC(WC_CHANGELOG), STR_CHANGELOG_TITLE, COLOURS_2(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, { THEME_WC(WC_MULTIPLAYER), STR_MULTIPLAYER, COLOURS_3(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, diff --git a/src/openrct2-ui/windows/Themes.cpp b/src/openrct2-ui/windows/Themes.cpp index 5af77f7cbd..d6d095bc59 100644 --- a/src/openrct2-ui/windows/Themes.cpp +++ b/src/openrct2-ui/windows/Themes.cpp @@ -222,6 +222,7 @@ static rct_windowclass window_themes_tab_6_classes[] = { WC_CHEATS, WC_TILE_INSPECTOR, WC_VIEW_CLIPPING, + WC_TRANSPARENCY, WC_THEMES, WC_TITLE_EDITOR, WC_OPTIONS, diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index f80e6850fe..765c262063 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -30,24 +30,13 @@ #include // clang-format off -enum -{ - WINDOW_TRANSPARENCY_PAGE_MAIN, - WINDOW_TRANSPARENCY_PAGE_RIDES, - WINDOW_TRANSPARENCY_PAGE_COUNT, -}; - enum WINDOW_TRANSPARENCY_WIDGET_IDX { WIDX_BACKGROUND, WIDX_TITLE, WIDX_CLOSE, - WIDX_PAGE_BACKGROUND, - WIDX_TAB_1, - WIDX_TAB_2, - WIDX_TAB_CONTENT, - WIDX_SEE_THROUGH_RIDES = WIDX_TAB_CONTENT, + WIDX_SEE_THROUGH_RIDES, WIDX_SEE_THROUGH_VEHICLES, WIDX_SEE_THROUGH_SCENERY, WIDX_SEE_THROUGH_TREES, @@ -61,31 +50,22 @@ enum WINDOW_TRANSPARENCY_WIDGET_IDX WIDX_INVISIBLE_TREES, WIDX_INVISIBLE_PATHS, WIDX_INVISIBLE_SUPPORTS, - - WIDX_LIST = WIDX_TAB_CONTENT, }; #pragma region MEASUREMENTS static constexpr const rct_string_id WINDOW_TITLE = STR_TRANSPARENCY_OPTIONS_TITLE; -static constexpr const int32_t WW = 203; -static constexpr const int32_t WH = 70; +static constexpr const int32_t WW = 204; +static constexpr const int32_t WH = 57; static constexpr ScreenSize ICON_BUTTON = {24, 24}; static constexpr ScreenSize FLAT_BUTTON = {24, 12}; #pragma endregion -#define MAIN_TRANSPARENCY_WIDGETS \ - WINDOW_SHIM(WINDOW_TITLE, WW, WH), \ - MakeWidget({ 0, 0}, { 0, 0}, WindowWidgetType::ImgBtn, WindowColour::Secondary), /* tab content panel */ \ - MakeWidget({189, 42}, { 12, 6}, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_TRANSPARENCY_OPTIONS_TITLE), \ - MakeWidget({189, 48}, { 12, 6}, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_TRANSPARENCY_OPTIONS_TITLE_RIDE) - static rct_widget window_transparency_main_widgets[] = { - MAIN_TRANSPARENCY_WIDGETS, - + WINDOW_SHIM(WINDOW_TITLE, WW, WH), MakeWidget({ 77, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_RIDE, STR_SEE_THROUGH_RIDES), MakeWidget({102, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_COASTER_TRAIN, STR_SEE_THROUGH_VEHICLES), MakeWidget({ 27, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_LARGE_SCENERY, STR_SEE_THROUGH_SCENERY), @@ -104,70 +84,26 @@ static rct_widget window_transparency_main_widgets[] = { WIDGETS_END }, }; - -static rct_widget window_transparency_rides_widgets[] = -{ - MAIN_TRANSPARENCY_WIDGETS, - MakeWidget({ 2, 17}, {160, 200}, WindowWidgetType::Scroll, WindowColour::Secondary, SCROLL_VERTICAL), - { WIDGETS_END }, -}; - -static rct_widget *window_transparency_page_widgets[] = -{ - window_transparency_main_widgets, - window_transparency_rides_widgets, -}; - -#define MAIN_TRANSPARENCY_ENABLED_WIDGETS (1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) - -static uint64_t window_transparency_page_enabled_widgets[] = { - MAIN_TRANSPARENCY_ENABLED_WIDGETS | - (1ULL << WIDX_SEE_THROUGH_RIDES) | - (1ULL << WIDX_SEE_THROUGH_VEHICLES) | - (1ULL << WIDX_SEE_THROUGH_SCENERY) | - (1ULL << WIDX_SEE_THROUGH_TREES) | - (1ULL << WIDX_SEE_THROUGH_PATHS) | - (1ULL << WIDX_INVISIBLE_RIDES) | - (1ULL << WIDX_INVISIBLE_VEHICLES) | - (1ULL << WIDX_INVISIBLE_SCENERY) | - (1ULL << WIDX_INVISIBLE_TREES) | - (1ULL << WIDX_INVISIBLE_PATHS) | - (1ULL << WIDX_INVISIBLE_SUPPORTS) | - (1ULL << WIDX_INVISIBLE_GUESTS) | - (1ULL << WIDX_INVISIBLE_STAFF) | - (1ULL << WIDX_SEE_THROUGH_SUPPORTS), - - MAIN_TRANSPARENCY_ENABLED_WIDGETS | - (1ULL << WIDX_LIST) -}; - -static rct_string_id window_transparency_page_titles[] = { - STR_TRANSPARENCY_OPTIONS_TITLE, - STR_TRANSPARENCY_OPTIONS_TITLE_RIDE -}; // clang-format on class TransparencyWindow final : public Window { private: - int32_t _selected_list_item = -1; - std::vector _rideList; - public: void OnOpen() override { - SetPage(WINDOW_TRANSPARENCY_PAGE_MAIN); + widgets = window_transparency_main_widgets; + enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_SEE_THROUGH_RIDES) | (1ULL << WIDX_SEE_THROUGH_VEHICLES) + | (1ULL << WIDX_SEE_THROUGH_SCENERY) | (1ULL << WIDX_SEE_THROUGH_TREES) | (1ULL << WIDX_SEE_THROUGH_PATHS) + | (1ULL << WIDX_INVISIBLE_RIDES) | (1ULL << WIDX_INVISIBLE_VEHICLES) | (1ULL << WIDX_INVISIBLE_SCENERY) + | (1ULL << WIDX_INVISIBLE_TREES) | (1ULL << WIDX_INVISIBLE_PATHS) | (1ULL << WIDX_INVISIBLE_SUPPORTS) + | (1ULL << WIDX_INVISIBLE_GUESTS) | (1ULL << WIDX_INVISIBLE_STAFF) | (1ULL << WIDX_SEE_THROUGH_SUPPORTS); + + window_push_others_below(this); auto* w = window_get_main(); if (w != nullptr) windowPos.x = ((w->width / 2) - (width / 2)); - - RefreshRideList(); - } - - void OnUpdate() override - { - InvalidateWidget(WIDX_TAB_1 + page); } void OnMouseUp(rct_widgetindex widgetIndex) override @@ -177,101 +113,45 @@ public: case WIDX_CLOSE: Close(); break; - case WIDX_TAB_1: - case WIDX_TAB_2: - SetPage(widgetIndex - WIDX_TAB_1); - break; default: - switch (page) - { - case WINDOW_TRANSPARENCY_PAGE_MAIN: - OnMouseUpMain(widgetIndex); - break; - } + OnMouseUpMain(widgetIndex); break; } } - void OnScrollMouseDown(int32_t scrollIndex, const ScreenCoordsXY& screenCoords) override - { - if (page == WINDOW_TRANSPARENCY_PAGE_RIDES) - { - auto i = screenCoords.y / SCROLLABLE_ROW_HEIGHT; - // i += static_cast(_selectedPage * GUESTS_PER_PAGE); - for (const auto& rideItem : _rideList) - { - if (i == 0) - { - auto ridec = get_ride(rideItem); - if (ridec != nullptr) - { - ridec->ignore_invisible_flag = (ridec->ignore_invisible_flag == true ? false : true); - } - break; - } - i--; - } - } - } - void OnPrepareDraw() override { - auto* targetWidgets = window_transparency_page_widgets[page]; - if (widgets != targetWidgets) - { - widgets = targetWidgets; - WindowInitScrollWidgets(this); - } - pressed_widgets = 0; disabled_widgets = 0; - // Set correct active tab - for (auto i = 0; i < WINDOW_TRANSPARENCY_PAGE_COUNT; i++) - SetWidgetPressed(WIDX_TAB_1 + i, false); - SetWidgetPressed(WIDX_TAB_1 + page, true); - - // Set title - widgets[WIDX_TITLE].text = window_transparency_page_titles[page]; - rct_window* w = window_get_main(); if (w == nullptr) return; - switch (page) - { - case WINDOW_TRANSPARENCY_PAGE_MAIN: - 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)); - break; - } + 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)); } void OnDraw(rct_drawpixelinfo& dpi) override { DrawWidgets(dpi); - - if (page == WINDOW_TRANSPARENCY_PAGE_MAIN) - { - // Locate mechanic button image - rct_widget* 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); - } + // Locate mechanic button image + rct_widget* 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 @@ -280,29 +160,6 @@ public: } private: - void SetPage(int32_t p) - { - page = p; - enabled_widgets = window_transparency_page_enabled_widgets[p]; - pressed_widgets = 0; - widgets = window_transparency_page_widgets[p]; - - auto maxY = 0; - auto* widget = &widgets[WIDX_TAB_CONTENT]; - while (widget->type != WindowWidgetType::Last) - { - maxY = std::max(maxY, widget->bottom); - widget++; - } - maxY += 4; - - Invalidate(); - height = maxY; - widgets[WIDX_BACKGROUND].bottom = maxY - 1; - widgets[WIDX_PAGE_BACKGROUND].bottom = maxY - 1; - Invalidate(); - } - void OnMouseUpMain(rct_widgetindex widgetIndex) { rct_window* w = window_get_main(); @@ -356,62 +213,6 @@ private: } w->Invalidate(); } - - void OnScrollDraw(int32_t scrollIndex, rct_drawpixelinfo& dpi) override - { - ScreenCoordsXY screenCoords; - auto bgColour = ThemeGetColour(WC_CUSTOM, 0); - - screenCoords.y = 2; - for (size_t i = 0; i < _rideList.size(); i++) - { - auto ridec = get_ride(_rideList[i]); - if (ridec == nullptr) - continue; - - if (screenCoords.y + SCROLLABLE_ROW_HEIGHT >= dpi.y && screenCoords.y <= dpi.y + dpi.height) - { - gfx_fill_rect_inset(&dpi, { { 2, screenCoords.y }, { 11, screenCoords.y + 10 } }, bgColour, INSET_RECT_F_E0); - - // Draw checkmark - if (ridec->ignore_invisible_flag == true) - { - screenCoords.x = 2; - FontSpriteBase fontSpriteBase = FontSpriteBase::MEDIUM_DARK; - colour_t colour2 = NOT_TRANSLUCENT(bgColour); - gfx_draw_string( - &dpi, screenCoords, static_cast(CheckBoxMarkString), - { static_cast(colour2), fontSpriteBase }); - } - - screenCoords.x = 13; - - int32_t width_limit = widgets[WIDX_LIST].width() - screenCoords.x; - - // Ride name - auto ft = Formatter(); - ridec->FormatNameTo(ft); - DrawTextEllipsised(&dpi, { screenCoords.x, screenCoords.y }, width_limit, STR_WINDOW_COLOUR_2_STRINGID, ft); - } - screenCoords.y += SCROLLABLE_ROW_HEIGHT; - } - } - - void RefreshRideList() - { - _rideList.clear(); - - size_t list_index = 0; - for (auto& ridec : GetRideManager()) - { - auto rided = &ridec; - _rideList.push_back(rided->id); - list_index++; - } - - _selected_list_item = -1; - Invalidate(); - } }; rct_window* WindowTransparencyOpen() diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index e8c7d74b08..292b8cb607 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3941,7 +3941,6 @@ enum : uint16_t STR_INVISIBLE_VEHICLES = 6481, STR_SEE_THROUGH_SUPPORTS = 6482, STR_SHORTCUT_OPEN_TRANSPARENCY_OPTIONS = 6483, - STR_TRANSPARENCY_OPTIONS_TITLE_RIDE = 6484, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings From ffb5affee25bdd953ef92bf509286ccd62eaa938 Mon Sep 17 00:00:00 2001 From: Kane Date: Sun, 10 Oct 2021 21:56:27 +1100 Subject: [PATCH 13/27] Fix code formatting --- src/openrct2/paint/Paint.Entity.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openrct2/paint/Paint.Entity.cpp b/src/openrct2/paint/Paint.Entity.cpp index aaa5116a55..e7c1c76f5e 100644 --- a/src/openrct2/paint/Paint.Entity.cpp +++ b/src/openrct2/paint/Paint.Entity.cpp @@ -85,7 +85,7 @@ void EntityPaintSetup(paint_session& session, const CoordsXY& pos) } const auto entityPos = spr->GetLocation(); - + // Only paint sprites that are below the clip height and inside the clip selection. // Here converting from land/path/etc height scale to pixel height scale. // Note: peeps/scenery on slopes will be above the base From 20cd8465f5dc9b9da59d4f5cdf1c2d7071bbca6f Mon Sep 17 00:00:00 2001 From: Kane Date: Sat, 23 Oct 2021 20:53:13 +1100 Subject: [PATCH 14/27] 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) From b83e21a953120bd39e96f18990fa6ba266610307 Mon Sep 17 00:00:00 2001 From: Kane Date: Thu, 28 Oct 2021 20:09:22 +1100 Subject: [PATCH 15/27] Improve code readability (added parentheses) --- src/openrct2-ui/input/Shortcuts.cpp | 2 +- src/openrct2-ui/windows/Transparency.cpp | 7 +++++-- src/openrct2/paint/Paint.cpp | 6 +++--- src/openrct2/ride/TrackPaint.cpp | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/openrct2-ui/input/Shortcuts.cpp b/src/openrct2-ui/input/Shortcuts.cpp index 54090fd96d..f1beef04e2 100644 --- a/src/openrct2-ui/input/Shortcuts.cpp +++ b/src/openrct2-ui/input/Shortcuts.cpp @@ -654,7 +654,7 @@ static void ShortcutToggleInvisibleSupports() auto w = window_get_main(); if (w != nullptr) { - if (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS || w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) + if ((w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) || (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)) w->viewport->flags = w->viewport->flags & ~(VIEWPORT_FLAG_SEETHROUGH_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); else w->viewport->flags |= (VIEWPORT_FLAG_SEETHROUGH_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index 735af25299..9813cabc1e 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -114,7 +114,7 @@ public: Close(); break; default: - OnMouseUpMain(widgetIndex); + ToggleViewportFlag(widgetIndex); break; } } @@ -157,7 +157,7 @@ public: } private: - void OnMouseUpMain(rct_widgetindex widgetIndex) + void ToggleViewportFlag(rct_widgetindex widgetIndex) { uint32_t wflags = 0; rct_window* w = window_get_main(); @@ -211,6 +211,9 @@ private: case WIDX_INVISIBLE_STAFF: wflags ^= VIEWPORT_FLAG_INVISIBLE_STAFF; break; + default: + return; + break; } if (w->viewport->flags == wflags) diff --git a/src/openrct2/paint/Paint.cpp b/src/openrct2/paint/Paint.cpp index b04c226d1f..6cc496d9ed 100644 --- a/src/openrct2/paint/Paint.cpp +++ b/src/openrct2/paint/Paint.cpp @@ -684,7 +684,7 @@ static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem sp return seeThrough; } } - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES && !(viewFlags & VIEWPORT_FLAG_INVISIBLE_VEHICLES)) + if ((viewFlags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) && !(viewFlags & VIEWPORT_FLAG_INVISIBLE_VEHICLES)) { if (spriteType == ViewportInteractionItem::Entity && entityType == EntityType::Vehicle) { @@ -722,7 +722,7 @@ static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem sp break; } } - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_PATHS && viewFlags & VIEWPORT_FLAG_INVISIBLE_PATHS) + if ((viewFlags & VIEWPORT_FLAG_SEETHROUGH_PATHS) && (viewFlags & VIEWPORT_FLAG_INVISIBLE_PATHS)) { switch (spriteType) { @@ -734,7 +734,7 @@ static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem sp break; } } - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY && viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) + if ((viewFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) && (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY)) { switch (spriteType) { diff --git a/src/openrct2/ride/TrackPaint.cpp b/src/openrct2/ride/TrackPaint.cpp index 385f0f10d4..3519e52dbc 100644 --- a/src/openrct2/ride/TrackPaint.cpp +++ b/src/openrct2/ride/TrackPaint.cpp @@ -2195,7 +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) + if ((session->ViewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) && (session->ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES)) return; if ((!gTrackDesignSaveMode || rideIndex == gTrackDesignSaveRideIndex) From ba2fea88fd07e5078f993e394db8c172a1add599 Mon Sep 17 00:00:00 2001 From: Ted John Date: Thu, 3 Mar 2022 23:01:08 +0000 Subject: [PATCH 16/27] Fix build failure --- src/openrct2-ui/windows/Transparency.cpp | 8 +------- src/openrct2/entity/Peep.cpp | 2 +- src/openrct2/ride/TrackPaint.cpp | 2 +- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index 9813cabc1e..0cdc3c011d 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -19,10 +19,10 @@ #include #include #include +#include #include #include #include -#include #include #include #include @@ -93,12 +93,6 @@ public: void OnOpen() override { widgets = window_transparency_main_widgets; - enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_SEE_THROUGH_RIDES) | (1ULL << WIDX_SEE_THROUGH_VEHICLES) - | (1ULL << WIDX_SEE_THROUGH_SCENERY) | (1ULL << WIDX_SEE_THROUGH_TREES) | (1ULL << WIDX_SEE_THROUGH_PATHS) - | (1ULL << WIDX_INVISIBLE_RIDES) | (1ULL << WIDX_INVISIBLE_VEHICLES) | (1ULL << WIDX_INVISIBLE_SCENERY) - | (1ULL << WIDX_INVISIBLE_TREES) | (1ULL << WIDX_INVISIBLE_PATHS) | (1ULL << WIDX_INVISIBLE_SUPPORTS) - | (1ULL << WIDX_INVISIBLE_GUESTS) | (1ULL << WIDX_INVISIBLE_STAFF) | (1ULL << WIDX_SEE_THROUGH_SUPPORTS); - window_push_others_below(this); auto* w = window_get_main(); diff --git a/src/openrct2/entity/Peep.cpp b/src/openrct2/entity/Peep.cpp index 64deb807ba..f23bff8305 100644 --- a/src/openrct2/entity/Peep.cpp +++ b/src/openrct2/entity/Peep.cpp @@ -2757,7 +2757,7 @@ void Peep::Paint(paint_session& session, int32_t imageDirection) const uint32_t imageId = baseImageId | TshirtColour << 19 | TrousersColour << 24 | IMAGE_TYPE_REMAP | IMAGE_TYPE_REMAP_2_PLUS; PaintAddImageAsParent(session, imageId, { 0, 0, z }, { 1, 1, 11 }, { 0, 0, z + 5 }); - auto* guest = As(); + auto* guest = As(); if (guest != nullptr) { if (baseImageId >= 10717 && baseImageId < 10749) diff --git a/src/openrct2/ride/TrackPaint.cpp b/src/openrct2/ride/TrackPaint.cpp index 3519e52dbc..41d6ddd55f 100644 --- a/src/openrct2/ride/TrackPaint.cpp +++ b/src/openrct2/ride/TrackPaint.cpp @@ -2195,7 +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)) + if ((session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) && (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES)) return; if ((!gTrackDesignSaveMode || rideIndex == gTrackDesignSaveRideIndex) From 79989a5e84dd4cec9bb6c92f63c40ffc9304efb6 Mon Sep 17 00:00:00 2001 From: Ted John Date: Fri, 4 Mar 2022 00:39:22 +0000 Subject: [PATCH 17/27] Fix transparency issues --- src/openrct2/paint/Paint.Entity.cpp | 2 +- src/openrct2/paint/Paint.cpp | 38 ++++--------------- .../paint/tile_element/Paint.SmallScenery.cpp | 2 +- 3 files changed, 10 insertions(+), 32 deletions(-) diff --git a/src/openrct2/paint/Paint.Entity.cpp b/src/openrct2/paint/Paint.Entity.cpp index f5a9fea625..e1296bd394 100644 --- a/src/openrct2/paint/Paint.Entity.cpp +++ b/src/openrct2/paint/Paint.Entity.cpp @@ -73,7 +73,7 @@ void EntityPaintSetup(paint_session& session, const CoordsXY& pos) } } - if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) && spr->Type == EntityType::Vehicle) + if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_VEHICLES) && spr->Type == EntityType::Vehicle) { const auto veh = spr->As(); if (veh != nullptr) diff --git a/src/openrct2/paint/Paint.cpp b/src/openrct2/paint/Paint.cpp index 6cc496d9ed..2b3067c0e5 100644 --- a/src/openrct2/paint/Paint.cpp +++ b/src/openrct2/paint/Paint.cpp @@ -56,7 +56,8 @@ bool gPaintBlockedTiles; static void PaintAttachedPS(rct_drawpixelinfo* dpi, paint_struct* ps, uint32_t viewFlags); static void PaintPSImageWithBoundingBoxes(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId imageId, int32_t x, int32_t y); static void PaintPSImage(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId imageId, int32_t x, int32_t y); -static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem spriteType, EntityType entityType, uint32_t viewFlags); +static ImageId PaintPSColourifyImage( + ImageId imageId, ViewportInteractionItem spriteType, EntityType entityType, uint32_t viewFlags); static int32_t RemapPositionToQuadrant(const paint_struct& ps, uint8_t rotation) { @@ -674,7 +675,8 @@ static void PaintPSImage(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId image gfx_draw_sprite(dpi, imageId, { x, y }); } -static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem spriteType, EntityType entityType, uint32_t viewFlags) +static ImageId PaintPSColourifyImage( + ImageId imageId, ViewportInteractionItem spriteType, EntityType entityType, uint32_t viewFlags) { auto seeThrough = imageId.WithTransparancy(FilterPaletteID::PaletteDarken1); if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) @@ -684,11 +686,11 @@ static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem sp return seeThrough; } } - if ((viewFlags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) && !(viewFlags & VIEWPORT_FLAG_INVISIBLE_VEHICLES)) + if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) { if (spriteType == ViewportInteractionItem::Entity && entityType == EntityType::Vehicle) { - return seeThrough; + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_VEHICLES) ? ImageId() : seeThrough; } } if (viewFlags & VIEWPORT_FLAG_UNDERGROUND_INSIDE) @@ -705,7 +707,7 @@ static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem sp case ViewportInteractionItem::Footpath: case ViewportInteractionItem::FootpathItem: case ViewportInteractionItem::Banner: - return seeThrough; + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_PATHS) ? ImageId() : seeThrough; default: break; } @@ -717,31 +719,7 @@ static ImageId PaintPSColourifyImage(ImageId imageId, ViewportInteractionItem sp case ViewportInteractionItem::Scenery: case ViewportInteractionItem::LargeScenery: case ViewportInteractionItem::Wall: - return seeThrough; - default: - break; - } - } - if ((viewFlags & VIEWPORT_FLAG_SEETHROUGH_PATHS) && (viewFlags & VIEWPORT_FLAG_INVISIBLE_PATHS)) - { - switch (spriteType) - { - case ViewportInteractionItem::Footpath: - case ViewportInteractionItem::FootpathItem: - case ViewportInteractionItem::Banner: - return ImageId(); - default: - break; - } - } - if ((viewFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) && (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY)) - { - switch (spriteType) - { - case ViewportInteractionItem::Scenery: - case ViewportInteractionItem::LargeScenery: - case ViewportInteractionItem::Wall: - return ImageId(); + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? ImageId() : seeThrough; default: break; } diff --git a/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp b/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp index 43eeb74ca3..94d36403d1 100644 --- a/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp +++ b/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp @@ -345,7 +345,7 @@ void PaintSmallScenery(paint_session& session, uint8_t direction, int32_t height imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); } - if (!sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE) || !(session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_TREES)) + if (!sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE) || !((session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_TREES) && (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_TREES))) { PaintSmallSceneryBody(session, direction, height, sceneryElement, sceneryEntry, imageTemplate); } From 8aafab2a70eadb462cbd523783beb670913d19b0 Mon Sep 17 00:00:00 2001 From: Ted John Date: Fri, 4 Mar 2022 01:33:08 +0000 Subject: [PATCH 18/27] Split paint item into element and entity --- src/openrct2/interface/Viewport.cpp | 1 + src/openrct2/interface/Viewport.h | 7 +-- src/openrct2/paint/Paint.Entity.cpp | 15 +----- src/openrct2/paint/Paint.cpp | 30 ++++------- src/openrct2/paint/Paint.h | 5 +- src/openrct2/paint/Painter.cpp | 3 +- src/openrct2/paint/Supports.cpp | 54 +++++++++---------- .../paint/tile_element/Paint.Entrance.cpp | 3 -- .../paint/tile_element/Paint.TileElement.cpp | 4 +- src/openrct2/ride/TrackPaint.cpp | 3 -- src/openrct2/ride/gentle/Circus.cpp | 7 ++- src/openrct2/ride/gentle/CrookedHouse.cpp | 11 ++-- src/openrct2/ride/gentle/FerrisWheel.cpp | 6 +-- src/openrct2/ride/gentle/HauntedHouse.cpp | 6 +-- src/openrct2/ride/gentle/MerryGoRound.cpp | 5 +- src/openrct2/ride/gentle/SpaceRings.cpp | 6 +-- src/openrct2/ride/thrill/3dCinema.cpp | 7 ++- src/openrct2/ride/thrill/Enterprise.cpp | 5 +- src/openrct2/ride/thrill/MagicCarpet.cpp | 8 ++- src/openrct2/ride/thrill/MotionSimulator.cpp | 5 +- .../ride/thrill/SwingingInverterShip.cpp | 6 +-- src/openrct2/ride/thrill/SwingingShip.cpp | 6 +-- src/openrct2/ride/thrill/TopSpin.cpp | 10 ++-- src/openrct2/ride/thrill/Twist.cpp | 6 +-- src/openrct2/ride/water/SplashBoats.cpp | 22 +++----- test/testpaint/TestTrack.cpp | 10 ++-- 26 files changed, 98 insertions(+), 153 deletions(-) diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index f5f550e0a3..1299878974 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -65,6 +65,7 @@ static uint32_t _currentImageType; InteractionInfo::InteractionInfo(const paint_struct* ps) : Loc(ps->map_x, ps->map_y) , Element(ps->tileElement) + , Entity(ps->entity) , SpriteType(ps->sprite_type) { } diff --git a/src/openrct2/interface/Viewport.h b/src/openrct2/interface/Viewport.h index 6347512325..542b76d1f8 100644 --- a/src/openrct2/interface/Viewport.h +++ b/src/openrct2/interface/Viewport.h @@ -84,11 +84,8 @@ struct InteractionInfo InteractionInfo() = default; InteractionInfo(const paint_struct* ps); CoordsXY Loc; - union - { - TileElement* Element = nullptr; - EntityBase* Entity; - }; + TileElement* Element{}; + EntityBase* Entity{}; ViewportInteractionItem SpriteType = ViewportInteractionItem::None; }; diff --git a/src/openrct2/paint/Paint.Entity.cpp b/src/openrct2/paint/Paint.Entity.cpp index e1296bd394..ebe828793e 100644 --- a/src/openrct2/paint/Paint.Entity.cpp +++ b/src/openrct2/paint/Paint.Entity.cpp @@ -55,7 +55,7 @@ void EntityPaintSetup(paint_session& session, const CoordsXY& pos) const bool highlightPathIssues = (session.ViewFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES); - for (const auto* spr : EntityTileList(pos)) + for (auto* spr : EntityTileList(pos)) { if (highlightPathIssues) { @@ -73,17 +73,6 @@ void EntityPaintSetup(paint_session& session, const CoordsXY& pos) } } - if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_VEHICLES) && spr->Type == EntityType::Vehicle) - { - const auto veh = spr->As(); - if (veh != nullptr) - { - auto ride = get_ride(veh->ride); - if (ride != nullptr) - return; - } - } - const auto entityPos = spr->GetLocation(); // Only paint sprites that are below the clip height and inside the clip selection. @@ -119,7 +108,7 @@ void EntityPaintSetup(paint_session& session, const CoordsXY& pos) image_direction += spr->sprite_direction; image_direction &= 0x1F; - session.CurrentlyDrawnItem = spr; + session.CurrentlyDrawnEntity = spr; session.SpritePosition.x = entityPos.x; session.SpritePosition.y = entityPos.y; session.InteractionType = ViewportInteractionItem::Entity; diff --git a/src/openrct2/paint/Paint.cpp b/src/openrct2/paint/Paint.cpp index 2b3067c0e5..f9f4739bd6 100644 --- a/src/openrct2/paint/Paint.cpp +++ b/src/openrct2/paint/Paint.cpp @@ -57,7 +57,8 @@ static void PaintAttachedPS(rct_drawpixelinfo* dpi, paint_struct* ps, uint32_t v static void PaintPSImageWithBoundingBoxes(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId imageId, int32_t x, int32_t y); static void PaintPSImage(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId imageId, int32_t x, int32_t y); static ImageId PaintPSColourifyImage( - ImageId imageId, ViewportInteractionItem spriteType, EntityType entityType, uint32_t viewFlags); + ImageId imageId, ViewportInteractionItem spriteType, uint32_t viewFlags, const TileElement* tileElement, + const EntityBase* entity); static int32_t RemapPositionToQuadrant(const paint_struct& ps, uint8_t rotation) { @@ -193,7 +194,8 @@ static paint_struct* CreateNormalPaintStruct( ps->sprite_type = session.InteractionType; ps->map_x = session.MapPosition.x; ps->map_y = session.MapPosition.y; - ps->tileElement = reinterpret_cast(const_cast(session.CurrentlyDrawnItem)); + ps->tileElement = session.CurrentlyDrawnTileElement; + ps->entity = session.CurrentlyDrawnEntity; return ps; } @@ -483,17 +485,6 @@ void PaintSessionArrange(PaintSessionCore& session) Guard::Assert(false); } -static EntityType GetEntityTypeFromPaintSession(const paint_struct* ps) -{ - auto entityType = EntityType::Null; - auto* entity = reinterpret_cast(ps->tileElement); - if (entity != nullptr) - { - entityType = entity->Type; - } - return entityType; -} - static void PaintDrawStruct(paint_session& session, paint_struct* ps) { rct_drawpixelinfo* dpi = &session.DPI; @@ -515,8 +506,7 @@ static void PaintDrawStruct(paint_session& session, paint_struct* ps) } } - auto entityType = GetEntityTypeFromPaintSession(ps); - auto imageId = PaintPSColourifyImage(ps->image_id, ps->sprite_type, entityType, session.ViewFlags); + auto imageId = PaintPSColourifyImage(ps->image_id, ps->sprite_type, session.ViewFlags, ps->tileElement, ps->entity); if (gPaintBoundingBoxes && dpi->zoom_level == ZoomLevel{ 0 }) { PaintPSImageWithBoundingBoxes(dpi, ps, imageId, x, y); @@ -566,8 +556,7 @@ static void PaintAttachedPS(rct_drawpixelinfo* dpi, paint_struct* ps, uint32_t v { auto screenCoords = ScreenCoordsXY{ attached_ps->x + ps->x, attached_ps->y + ps->y }; - auto entityType = GetEntityTypeFromPaintSession(ps); - auto imageId = PaintPSColourifyImage(attached_ps->image_id, ps->sprite_type, entityType, viewFlags); + auto imageId = PaintPSColourifyImage(attached_ps->image_id, ps->sprite_type, viewFlags, ps->tileElement, ps->entity); if (attached_ps->flags & PAINT_STRUCT_FLAG_IS_MASKED) { gfx_draw_sprite_raw_masked(dpi, screenCoords, imageId, attached_ps->colour_image_id); @@ -676,19 +665,20 @@ static void PaintPSImage(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId image } static ImageId PaintPSColourifyImage( - ImageId imageId, ViewportInteractionItem spriteType, EntityType entityType, uint32_t viewFlags) + ImageId imageId, ViewportInteractionItem spriteType, uint32_t viewFlags, const TileElement* tileElement, + const EntityBase* entity) { auto seeThrough = imageId.WithTransparancy(FilterPaletteID::PaletteDarken1); if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) { if (spriteType == ViewportInteractionItem::Ride) { - return seeThrough; + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) ? ImageId() : seeThrough; } } if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) { - if (spriteType == ViewportInteractionItem::Entity && entityType == EntityType::Vehicle) + if (spriteType == ViewportInteractionItem::Entity && (entity != nullptr && entity->Type == EntityType::Vehicle)) { return (viewFlags & VIEWPORT_FLAG_INVISIBLE_VEHICLES) ? ImageId() : seeThrough; } diff --git a/src/openrct2/paint/Paint.h b/src/openrct2/paint/Paint.h index 4053ebc4dc..19cfde643a 100644 --- a/src/openrct2/paint/Paint.h +++ b/src/openrct2/paint/Paint.h @@ -19,6 +19,7 @@ #include #include +struct EntityBase; struct TileElement; enum class RailingEntrySupportType : uint8_t; enum class ViewportInteractionItem : uint8_t; @@ -50,6 +51,7 @@ struct paint_struct paint_struct* children; paint_struct* next_quadrant_ps; TileElement* tileElement; + EntityBase* entity; ImageId image_id; ImageId colour_image_id; int32_t x; @@ -192,7 +194,8 @@ struct PaintSessionCore paint_string_struct* LastPSString; attached_paint_struct* LastAttachedPS; const TileElement* SurfaceElement; - const void* CurrentlyDrawnItem; + EntityBase* CurrentlyDrawnEntity; + TileElement* CurrentlyDrawnTileElement; const TileElement* PathElementOnSameHeight; const TileElement* TrackElementOnSameHeight; paint_struct* WoodenSupportsPrependTo; diff --git a/src/openrct2/paint/Painter.cpp b/src/openrct2/paint/Painter.cpp index ab5a59349c..3f9289a6e8 100644 --- a/src/openrct2/paint/Painter.cpp +++ b/src/openrct2/paint/Painter.cpp @@ -165,7 +165,8 @@ paint_session* Painter::CreateSession(rct_drawpixelinfo* dpi, uint32_t viewFlags session->PSStringHead = nullptr; session->LastPSString = nullptr; session->WoodenSupportsPrependTo = nullptr; - session->CurrentlyDrawnItem = nullptr; + session->CurrentlyDrawnEntity = nullptr; + session->CurrentlyDrawnTileElement = nullptr; session->SurfaceElement = nullptr; return session; diff --git a/src/openrct2/paint/Supports.cpp b/src/openrct2/paint/Supports.cpp index ce7279a5a1..9a409c7105 100644 --- a/src/openrct2/paint/Supports.cpp +++ b/src/openrct2/paint/Supports.cpp @@ -481,13 +481,12 @@ bool wooden_a_supports_paint_setup( return false; } - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) - { - return false; - } - if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) { + if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) + { + return false; + } imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); } @@ -643,13 +642,12 @@ bool wooden_b_supports_paint_setup( return false; } - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) - { - return false; - } - if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) { + if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) + { + return false; + } imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); } @@ -818,13 +816,12 @@ bool metal_a_supports_paint_setup( return false; } - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) - { - return false; - } - if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) { + if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) + { + return false; + } imageColourFlags = ImageId(0).WithTransparancy(FilterPaletteID::PaletteDarken1).ToUInt32(); } @@ -1022,13 +1019,12 @@ bool metal_b_supports_paint_setup( return false; // AND } - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) - { - return false; - } - if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) { + if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) + { + return false; + } imageColourFlags = ImageId(0).WithTransparancy(FilterPaletteID::PaletteDarken1).ToUInt32(); } @@ -1207,13 +1203,12 @@ bool path_a_supports_paint_setup( return false; } - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) - { - return false; - } - if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) { + if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) + { + return false; + } imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); } @@ -1362,13 +1357,12 @@ bool path_b_supports_paint_setup( return false; } - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) - { - return false; - } - if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) { + if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) + { + return false; + } imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); } diff --git a/src/openrct2/paint/tile_element/Paint.Entrance.cpp b/src/openrct2/paint/tile_element/Paint.Entrance.cpp index 12f7623e8f..c30394c164 100644 --- a/src/openrct2/paint/tile_element/Paint.Entrance.cpp +++ b/src/openrct2/paint/tile_element/Paint.Entrance.cpp @@ -125,9 +125,6 @@ static void PaintRideEntranceExit(paint_session& session, uint8_t direction, int return; } - if ((session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) && (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES)) - return; - auto stationObj = ride->GetStationObject(); if (stationObj == nullptr || stationObj->BaseImageId == ImageIndexUndefined) { diff --git a/src/openrct2/paint/tile_element/Paint.TileElement.cpp b/src/openrct2/paint/tile_element/Paint.TileElement.cpp index 9a3e93dc7d..d1ad543fc0 100644 --- a/src/openrct2/paint/tile_element/Paint.TileElement.cpp +++ b/src/openrct2/paint/tile_element/Paint.TileElement.cpp @@ -140,7 +140,7 @@ static void PaintTileElementBase(paint_session& session, const CoordsXY& origCoo session.MapPosition.x = coords.x; session.MapPosition.y = coords.y; - const TileElement* tile_element = map_get_first_element_at(session.MapPosition); + auto* tile_element = map_get_first_element_at(session.MapPosition); if (tile_element == nullptr) return; uint8_t rotation = session.CurrentRotation; @@ -263,7 +263,7 @@ static void PaintTileElementBase(paint_session& session, const CoordsXY& origCoo } CoordsXY mapPosition = session.MapPosition; - session.CurrentlyDrawnItem = tile_element; + session.CurrentlyDrawnTileElement = tile_element; // Setup the painting of for example: the underground, signs, rides, scenery, etc. switch (tile_element->GetType()) { diff --git a/src/openrct2/ride/TrackPaint.cpp b/src/openrct2/ride/TrackPaint.cpp index 41d6ddd55f..04fac377a4 100644 --- a/src/openrct2/ride/TrackPaint.cpp +++ b/src/openrct2/ride/TrackPaint.cpp @@ -2195,9 +2195,6 @@ 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)) - return; - if ((!gTrackDesignSaveMode || rideIndex == gTrackDesignSaveRideIndex) && !(session.ViewFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES)) { diff --git a/src/openrct2/ride/gentle/Circus.cpp b/src/openrct2/ride/gentle/Circus.cpp index 57b5c48add..20d09ea45c 100644 --- a/src/openrct2/ride/gentle/Circus.cpp +++ b/src/openrct2/ride/gentle/Circus.cpp @@ -11,6 +11,7 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" +#include "../../ride/Vehicle.h" #include "../Ride.h" #include "../RideEntry.h" #include "../Track.h" @@ -18,8 +19,6 @@ static void PaintCircusTent(paint_session& session, const Ride& ride, uint8_t direction, int8_t al, int8_t cl, uint16_t height) { - const TileElement* savedTileElement = static_cast(session.CurrentlyDrawnItem); - auto rideEntry = ride.GetRideEntry(); if (rideEntry == nullptr) return; @@ -28,7 +27,7 @@ static void PaintCircusTent(paint_session& session, const Ride& ride, uint8_t di if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr) { session.InteractionType = ViewportInteractionItem::Entity; - session.CurrentlyDrawnItem = vehicle; + session.CurrentlyDrawnEntity = vehicle; } auto imageTemplate = ImageId(0, ride.vehicle_colours[0].Body, ride.vehicle_colours[0].Trim); @@ -42,7 +41,7 @@ static void PaintCircusTent(paint_session& session, const Ride& ride, uint8_t di PaintAddImageAsParent( session, imageTemplate.WithIndex(imageIndex), { al, cl, height + 3 }, { 24, 24, 47 }, { al + 16, cl + 16, height + 3 }); - session.CurrentlyDrawnItem = savedTileElement; + session.CurrentlyDrawnEntity = nullptr; session.InteractionType = ViewportInteractionItem::Ride; } diff --git a/src/openrct2/ride/gentle/CrookedHouse.cpp b/src/openrct2/ride/gentle/CrookedHouse.cpp index 43fbe1fc18..b133a461d2 100644 --- a/src/openrct2/ride/gentle/CrookedHouse.cpp +++ b/src/openrct2/ride/gentle/CrookedHouse.cpp @@ -11,6 +11,7 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" +#include "../../ride/Vehicle.h" #include "../Ride.h" #include "../RideEntry.h" #include "../Track.h" @@ -52,9 +53,11 @@ static constexpr const rct_crooked_house_bound_box crooked_house_data[] = { static void PaintCrookedHouseStructure( paint_session& session, uint8_t direction, int32_t x_offset, int32_t y_offset, uint32_t segment, int32_t height) { - const TileElement* original_tile_element = static_cast(session.CurrentlyDrawnItem); + const auto* tileElement = session.CurrentlyDrawnTileElement; + if (tileElement == nullptr) + return; - auto ride = get_ride(original_tile_element->AsTrack()->GetRideIndex()); + auto ride = get_ride(tileElement->AsTrack()->GetRideIndex()); if (ride == nullptr) return; @@ -68,7 +71,7 @@ static void PaintCrookedHouseStructure( if (vehicle != nullptr) { session.InteractionType = ViewportInteractionItem::Entity; - session.CurrentlyDrawnItem = vehicle; + session.CurrentlyDrawnEntity = vehicle; } } @@ -78,6 +81,8 @@ static void PaintCrookedHouseStructure( PaintAddImageAsParent( session, imageTemplate.WithIndex(imageIndex), { x_offset, y_offset, height + 3 }, { boundBox.length, 127 }, { boundBox.offset, height + 3 }); + + session.CurrentlyDrawnEntity = nullptr; } static void PaintCrookedHouse( diff --git a/src/openrct2/ride/gentle/FerrisWheel.cpp b/src/openrct2/ride/gentle/FerrisWheel.cpp index 89714ca3ea..fdfbd1d899 100644 --- a/src/openrct2/ride/gentle/FerrisWheel.cpp +++ b/src/openrct2/ride/gentle/FerrisWheel.cpp @@ -66,8 +66,6 @@ static void PaintFerrisWheelRiders( static void PaintFerrisWheelStructure( paint_session& session, const Ride& ride, uint8_t direction, int8_t axisOffset, uint16_t height) { - const TileElement* savedTileElement = static_cast(session.CurrentlyDrawnItem); - auto rideEntry = ride.GetRideEntry(); if (rideEntry == nullptr) return; @@ -76,7 +74,7 @@ static void PaintFerrisWheelStructure( if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr) { session.InteractionType = ViewportInteractionItem::Entity; - session.CurrentlyDrawnItem = vehicle; + session.CurrentlyDrawnEntity = vehicle; } const auto& boundBox = FerrisWheelData[direction]; @@ -105,7 +103,7 @@ static void PaintFerrisWheelStructure( } PaintAddImageAsChild(session, rightSupportImageId, offset, bbLength, bbOffset); - session.CurrentlyDrawnItem = savedTileElement; + session.CurrentlyDrawnEntity = nullptr; session.InteractionType = ViewportInteractionItem::Ride; } diff --git a/src/openrct2/ride/gentle/HauntedHouse.cpp b/src/openrct2/ride/gentle/HauntedHouse.cpp index 1c580ed9ba..be20b24dda 100644 --- a/src/openrct2/ride/gentle/HauntedHouse.cpp +++ b/src/openrct2/ride/gentle/HauntedHouse.cpp @@ -31,8 +31,6 @@ static constexpr haunted_house_bound_box haunted_house_data[] = { static void PaintHauntedHouseStructure( paint_session& session, const Ride& ride, uint8_t direction, int8_t xOffset, int8_t yOffset, uint8_t part, uint16_t height) { - const TileElement* savedTileElement = static_cast(session.CurrentlyDrawnItem); - uint8_t frameNum = 0; auto rideEntry = ride.GetRideEntry(); @@ -43,7 +41,7 @@ static void PaintHauntedHouseStructure( if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr) { session.InteractionType = ViewportInteractionItem::Entity; - session.CurrentlyDrawnItem = vehicle; + session.CurrentlyDrawnEntity = vehicle; frameNum = vehicle->Pitch; } @@ -63,7 +61,7 @@ static void PaintHauntedHouseStructure( { boundBox.length.x, boundBox.length.y, 127 }, { boundBox.offset.x, boundBox.offset.y, height }); } - session.CurrentlyDrawnItem = savedTileElement; + session.CurrentlyDrawnEntity = nullptr; session.InteractionType = ViewportInteractionItem::Ride; } diff --git a/src/openrct2/ride/gentle/MerryGoRound.cpp b/src/openrct2/ride/gentle/MerryGoRound.cpp index a5292ebad1..e85f702888 100644 --- a/src/openrct2/ride/gentle/MerryGoRound.cpp +++ b/src/openrct2/ride/gentle/MerryGoRound.cpp @@ -53,7 +53,6 @@ static void PaintRiders( static void PaintCarousel( paint_session& session, const Ride& ride, uint8_t direction, int8_t xOffset, int8_t yOffset, uint16_t height) { - const TileElement* savedTileElement = static_cast(session.CurrentlyDrawnItem); height += 7; auto rideEntry = ride.GetRideEntry(); @@ -64,7 +63,7 @@ static void PaintCarousel( if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr) { session.InteractionType = ViewportInteractionItem::Entity; - session.CurrentlyDrawnItem = vehicle; + session.CurrentlyDrawnEntity = vehicle; if (ride.lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN) && ride.breakdown_reason_pending == BREAKDOWN_CONTROL_FAILURE && ride.breakdown_sound_modifier >= 128) @@ -96,7 +95,7 @@ static void PaintCarousel( PaintRiders(session, ride, *rideEntry, *vehicle, rotationOffset, offset, bbLength, bbOffset); - session.CurrentlyDrawnItem = savedTileElement; + session.CurrentlyDrawnEntity = nullptr; session.InteractionType = ViewportInteractionItem::Ride; } diff --git a/src/openrct2/ride/gentle/SpaceRings.cpp b/src/openrct2/ride/gentle/SpaceRings.cpp index cb8b51957d..d992e2b89b 100644 --- a/src/openrct2/ride/gentle/SpaceRings.cpp +++ b/src/openrct2/ride/gentle/SpaceRings.cpp @@ -36,8 +36,6 @@ static constexpr const uint32_t space_rings_fence_sprites[] = { static void paint_space_rings_structure( paint_session& session, const Ride& ride, uint8_t direction, uint32_t segment, int32_t height) { - const TileElement* savedTileElement = static_cast(session.CurrentlyDrawnItem); - uint32_t vehicleIndex = (segment - direction) & 0x3; if (ride.num_stations == 0 || vehicleIndex < ride.num_vehicles) @@ -51,7 +49,7 @@ static void paint_space_rings_structure( if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr) { session.InteractionType = ViewportInteractionItem::Entity; - session.CurrentlyDrawnItem = vehicle; + session.CurrentlyDrawnEntity = vehicle; frameNum += static_cast(vehicle->Pitch) * 4; } @@ -82,7 +80,7 @@ static void paint_space_rings_structure( } } - session.CurrentlyDrawnItem = savedTileElement; + session.CurrentlyDrawnEntity = nullptr; session.InteractionType = ViewportInteractionItem::Ride; } diff --git a/src/openrct2/ride/thrill/3dCinema.cpp b/src/openrct2/ride/thrill/3dCinema.cpp index 5be7aadac0..1444f0e039 100644 --- a/src/openrct2/ride/thrill/3dCinema.cpp +++ b/src/openrct2/ride/thrill/3dCinema.cpp @@ -15,12 +15,11 @@ #include "../RideEntry.h" #include "../Track.h" #include "../TrackPaint.h" +#include "../Vehicle.h" static void Paint3dCinemaDome( paint_session& session, const Ride& ride, uint8_t direction, int8_t xOffset, int8_t yOffset, uint16_t height) { - const TileElement* savedTileElement = static_cast(session.CurrentlyDrawnItem); - auto rideEntry = ride.GetRideEntry(); if (rideEntry == nullptr) return; @@ -28,7 +27,7 @@ static void Paint3dCinemaDome( if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && !ride.vehicles[0].IsNull()) { session.InteractionType = ViewportInteractionItem::Entity; - session.CurrentlyDrawnItem = GetEntity(ride.vehicles[0]); + session.CurrentlyDrawnEntity = GetEntity(ride.vehicles[0]); } auto imageTemplate = ImageId(0, ride.vehicle_colours[0].Body, ride.vehicle_colours[0].Trim); @@ -42,7 +41,7 @@ static void Paint3dCinemaDome( PaintAddImageAsParent( session, imageId, { xOffset, yOffset, height + 3 }, { 24, 24, 47 }, { xOffset + 16, yOffset + 16, height + 3 }); - session.CurrentlyDrawnItem = savedTileElement; + session.CurrentlyDrawnEntity = nullptr; session.InteractionType = ViewportInteractionItem::Ride; } diff --git a/src/openrct2/ride/thrill/Enterprise.cpp b/src/openrct2/ride/thrill/Enterprise.cpp index 5cb2646d33..c00bf57e35 100644 --- a/src/openrct2/ride/thrill/Enterprise.cpp +++ b/src/openrct2/ride/thrill/Enterprise.cpp @@ -44,7 +44,6 @@ static void PaintEnterpriseRiders( static void PaintEnterpriseStructure( paint_session& session, const Ride& ride, int8_t xOffset, int8_t yOffset, uint16_t height, const TrackElement& trackElement) { - const TileElement* savedTileElement = static_cast(session.CurrentlyDrawnItem); const auto* rideEntry = get_ride_entry(ride.subtype); if (rideEntry == nullptr) return; @@ -56,7 +55,7 @@ static void PaintEnterpriseStructure( if (vehicle != nullptr) { session.InteractionType = ViewportInteractionItem::Entity; - session.CurrentlyDrawnItem = vehicle; + session.CurrentlyDrawnEntity = vehicle; } } @@ -84,7 +83,7 @@ static void PaintEnterpriseStructure( PaintEnterpriseRiders(session, *rideEntry, *vehicle, imageOffset, offset, bbLength, bbOffset); } - session.CurrentlyDrawnItem = savedTileElement; + session.CurrentlyDrawnEntity = nullptr; session.InteractionType = ViewportInteractionItem::Ride; } diff --git a/src/openrct2/ride/thrill/MagicCarpet.cpp b/src/openrct2/ride/thrill/MagicCarpet.cpp index b0a3c32dd6..8406e95ee7 100644 --- a/src/openrct2/ride/thrill/MagicCarpet.cpp +++ b/src/openrct2/ride/thrill/MagicCarpet.cpp @@ -94,7 +94,7 @@ static ImageIndex GetMagicCarpetPendulumImage(Plane plane, Direction direction, return imageIndex; } -static const Vehicle* GetFirstVehicle(const Ride& ride) +static Vehicle* GetFirstVehicle(const Ride& ride) { if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK) { @@ -193,15 +193,13 @@ static void PaintMagicCarpetVehicle( static void PaintMagicCarpetStructure( paint_session& session, const Ride& ride, uint8_t direction, int8_t axisOffset, uint16_t height) { - const TileElement* savedTileElement = static_cast(session.CurrentlyDrawnItem); - auto swing = 0; auto* vehicle = GetFirstVehicle(ride); if (vehicle != nullptr) { swing = vehicle->Pitch; session.InteractionType = ViewportInteractionItem::Entity; - session.CurrentlyDrawnItem = vehicle; + session.CurrentlyDrawnEntity = vehicle; } bound_box bb = MagicCarpetBounds[direction]; @@ -222,8 +220,8 @@ static void PaintMagicCarpetStructure( PaintMagicCarpetPendulum(session, Plane::Front, swing, direction, offset, bbOffset, bbSize); PaintMagicCarpetFrame(session, Plane::Front, direction, offset, bbOffset, bbSize); + session.CurrentlyDrawnEntity = nullptr; session.InteractionType = ViewportInteractionItem::Ride; - session.CurrentlyDrawnItem = savedTileElement; } static void PaintMagicCarpet( diff --git a/src/openrct2/ride/thrill/MotionSimulator.cpp b/src/openrct2/ride/thrill/MotionSimulator.cpp index aa7128709f..cb31c5520b 100644 --- a/src/openrct2/ride/thrill/MotionSimulator.cpp +++ b/src/openrct2/ride/thrill/MotionSimulator.cpp @@ -37,7 +37,6 @@ static void PaintMotionSimulatorVehicle( if (rideEntry == nullptr) return; - const TileElement* savedTileElement = static_cast(session.CurrentlyDrawnItem); CoordsXYZ offset(offsetX, offsetY, height + 2); Vehicle* vehicle = nullptr; @@ -47,7 +46,7 @@ static void PaintMotionSimulatorVehicle( if (vehicle != nullptr) { session.InteractionType = ViewportInteractionItem::Entity; - session.CurrentlyDrawnItem = vehicle; + session.CurrentlyDrawnEntity = vehicle; } } @@ -97,7 +96,7 @@ static void PaintMotionSimulatorVehicle( break; } - session.CurrentlyDrawnItem = savedTileElement; + session.CurrentlyDrawnEntity = nullptr; session.InteractionType = ViewportInteractionItem::Ride; } diff --git a/src/openrct2/ride/thrill/SwingingInverterShip.cpp b/src/openrct2/ride/thrill/SwingingInverterShip.cpp index cdd959e53a..d57836bc69 100644 --- a/src/openrct2/ride/thrill/SwingingInverterShip.cpp +++ b/src/openrct2/ride/thrill/SwingingInverterShip.cpp @@ -68,8 +68,6 @@ static constexpr const uint32_t SwingingInverterShipFrameSprites[] = { static void PaintSwingingInverterShipStructure( paint_session& session, const Ride& ride, uint8_t direction, int8_t axisOffset, uint16_t height) { - const TileElement* savedTileElement = static_cast(session.CurrentlyDrawnItem); - rct_ride_entry* rideEntry = get_ride_entry(ride.subtype); if (rideEntry == nullptr) return; @@ -86,7 +84,7 @@ static void PaintSwingingInverterShipStructure( if (vehicle != nullptr) { session.InteractionType = ViewportInteractionItem::Entity; - session.CurrentlyDrawnItem = vehicle; + session.CurrentlyDrawnEntity = vehicle; } } @@ -130,7 +128,7 @@ static void PaintSwingingInverterShipStructure( PaintAddImageAsChild(session, vehicleImageId, offset, bbLength, bbOffset); } - session.CurrentlyDrawnItem = savedTileElement; + session.CurrentlyDrawnEntity = nullptr; session.InteractionType = ViewportInteractionItem::Ride; } diff --git a/src/openrct2/ride/thrill/SwingingShip.cpp b/src/openrct2/ride/thrill/SwingingShip.cpp index 9b1c613fbc..d7aba79122 100644 --- a/src/openrct2/ride/thrill/SwingingShip.cpp +++ b/src/openrct2/ride/thrill/SwingingShip.cpp @@ -94,8 +94,6 @@ static void PaintSwingingShipRiders( static void PaintSwingingShipStructure( paint_session& session, const Ride& ride, uint8_t direction, int8_t axisOffset, uint16_t height) { - const TileElement* savedTileElement = static_cast(session.CurrentlyDrawnItem); - rct_ride_entry* rideEntry = get_ride_entry(ride.subtype); if (rideEntry == nullptr) return; @@ -105,7 +103,7 @@ static void PaintSwingingShipStructure( { vehicle = GetEntity(ride.vehicles[0]); session.InteractionType = ViewportInteractionItem::Entity; - session.CurrentlyDrawnItem = vehicle; + session.CurrentlyDrawnEntity = vehicle; } const auto& bounds = SwingingShipData[direction]; @@ -157,7 +155,7 @@ static void PaintSwingingShipStructure( imageId = supportsImageTemplate.WithIndex(SwingingShipFrameSprites[(direction & 1)][1]); PaintAddImageAsChild(session, imageId, offset, bbLength, bbOffset); - session.CurrentlyDrawnItem = savedTileElement; + session.CurrentlyDrawnEntity = nullptr; session.InteractionType = ViewportInteractionItem::Ride; } diff --git a/src/openrct2/ride/thrill/TopSpin.cpp b/src/openrct2/ride/thrill/TopSpin.cpp index 5d53d8ef8a..ea818c6a61 100644 --- a/src/openrct2/ride/thrill/TopSpin.cpp +++ b/src/openrct2/ride/thrill/TopSpin.cpp @@ -124,18 +124,14 @@ static void PaintTopSpinVehicle( const auto& vehicleEntry = rideEntry->vehicles[0]; - // As we will be drawing a vehicle we need to backup the trackElement that - // is assigned to the drawings. - const TileElement* curTileElement = static_cast(session.CurrentlyDrawnItem); - height += 3; uint8_t seatRotation = 0; uint8_t armRotation = 0; - const auto* vehicle = GetEntity(ride.vehicles[0]); + auto* vehicle = GetEntity(ride.vehicles[0]); if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && vehicle != nullptr) { session.InteractionType = ViewportInteractionItem::Entity; - session.CurrentlyDrawnItem = vehicle; + session.CurrentlyDrawnEntity = vehicle; armRotation = vehicle->Pitch; seatRotation = vehicle->bank_rotation; @@ -181,7 +177,7 @@ static void PaintTopSpinVehicle( imageIndex = vehicleEntry.base_image_id + 573 + ((direction & 1) << 1); PaintAddImageAsChild(session, supportImageTemplate.WithIndex(imageIndex), offset, bbLength, bbOffset); - session.CurrentlyDrawnItem = curTileElement; + session.CurrentlyDrawnEntity = nullptr; session.InteractionType = ViewportInteractionItem::Ride; } diff --git a/src/openrct2/ride/thrill/Twist.cpp b/src/openrct2/ride/thrill/Twist.cpp index bff5fa967e..af5222a014 100644 --- a/src/openrct2/ride/thrill/Twist.cpp +++ b/src/openrct2/ride/thrill/Twist.cpp @@ -22,8 +22,6 @@ static void paint_twist_structure( paint_session& session, const Ride& ride, uint8_t direction, int8_t xOffset, int8_t yOffset, uint16_t height) { - const TileElement* savedTileElement = static_cast(session.CurrentlyDrawnItem); - rct_ride_entry* rideEntry = get_ride_entry(ride.subtype); Vehicle* vehicle = nullptr; @@ -39,7 +37,7 @@ static void paint_twist_structure( vehicle = GetEntity(ride.vehicles[0]); session.InteractionType = ViewportInteractionItem::Entity; - session.CurrentlyDrawnItem = vehicle; + session.CurrentlyDrawnEntity = vehicle; } uint32_t frameNum = (direction * 88) % 216; @@ -75,7 +73,7 @@ static void paint_twist_structure( } } - session.CurrentlyDrawnItem = savedTileElement; + session.CurrentlyDrawnEntity = nullptr; session.InteractionType = ViewportInteractionItem::Ride; } diff --git a/src/openrct2/ride/water/SplashBoats.cpp b/src/openrct2/ride/water/SplashBoats.cpp index 6f1df3e7f1..bebc25d7e1 100644 --- a/src/openrct2/ride/water/SplashBoats.cpp +++ b/src/openrct2/ride/water/SplashBoats.cpp @@ -1268,23 +1268,17 @@ void vehicle_visual_splash_boats_or_water_coaster( paint_session& session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const Vehicle* vehicle, const rct_ride_entry_vehicle* vehicleEntry) { - if (vehicle->IsHead()) - { - vehicle = GetEntity(vehicle->next_vehicle_on_ride); - } - else - { - vehicle = GetEntity(vehicle->prev_vehicle_on_ride); - } - if (vehicle == nullptr) + auto* vehicleToPaint = vehicle->IsHead() ? GetEntity(vehicle->next_vehicle_on_ride) + : GetEntity(vehicle->prev_vehicle_on_ride); + if (vehicleToPaint == nullptr) { return; } - session.CurrentlyDrawnItem = vehicle; - imageDirection = ((session.CurrentRotation * 8) + vehicle->sprite_direction) & 0x1F; - session.SpritePosition.x = vehicle->x; - session.SpritePosition.y = vehicle->y; - vehicle->Paint(session, imageDirection); + session.CurrentlyDrawnEntity = vehicleToPaint; + imageDirection = ((session.CurrentRotation * 8) + vehicle->sprite_direction) & 0x1F; + session.SpritePosition.x = vehicleToPaint->x; + session.SpritePosition.y = vehicleToPaint->y; + vehicleToPaint->Paint(session, imageDirection); } #endif diff --git a/test/testpaint/TestTrack.cpp b/test/testpaint/TestTrack.cpp index 6753fab615..b37ab30907 100644 --- a/test/testpaint/TestTrack.cpp +++ b/test/testpaint/TestTrack.cpp @@ -273,7 +273,7 @@ static uint8_t TestTrackElementPaintCalls(uint8_t rideType, uint8_t trackType, u gSurfaceElement = &surfaceElement; gDidPassSurface = true; - gPaintSession.CurrentlyDrawnItem = &tileElement; + gPaintSession.CurrentlyDrawnTileElement = &tileElement; gPaintSession.SurfaceElement = &surfaceElement; gPaintSession.DidPassSurface = true; @@ -436,7 +436,7 @@ static uint8_t TestTrackElementSegmentSupportHeight( gSurfaceElement = &surfaceElement; gDidPassSurface = true; - gPaintSession.CurrentlyDrawnItem = &tileElement; + gPaintSession.CurrentlyDrawnTileElement = &tileElement; gPaintSession.SurfaceElement = &surfaceElement; gPaintSession.DidPassSurface = true; @@ -523,7 +523,7 @@ static uint8_t TestTrackElementGeneralSupportHeight( gSurfaceElement = &surfaceElement; gDidPassSurface = true; - gPaintSession.CurrentlyDrawnItem = &tileElement; + gPaintSession.CurrentlyDrawnTileElement = &tileElement; gPaintSession.SurfaceElement = &surfaceElement; gPaintSession.DidPassSurface = true; @@ -624,7 +624,7 @@ static uint8_t TestTrackElementSideTunnels(uint8_t rideType, uint8_t trackType, gSurfaceElement = &surfaceElement; gDidPassSurface = true; - gPaintSession.CurrentlyDrawnItem = &tileElement; + gPaintSession.CurrentlyDrawnTileElement = &tileElement; gPaintSession.SurfaceElement = &surfaceElement; gPaintSession.DidPassSurface = true; @@ -752,7 +752,7 @@ static uint8_t TestTrackElementVerticalTunnels(uint8_t rideType, uint8_t trackTy gSurfaceElement = &surfaceElement; gDidPassSurface = true; - gPaintSession.CurrentlyDrawnItem = &tileElement; + gPaintSession.CurrentlyDrawnTileElement = &tileElement; gPaintSession.SurfaceElement = &surfaceElement; gPaintSession.DidPassSurface = true; From 9794be6a09993b62377d995318e314522d403f28 Mon Sep 17 00:00:00 2001 From: Ted John Date: Fri, 4 Mar 2022 01:48:01 +0000 Subject: [PATCH 19/27] Hide trees using colourify function --- src/openrct2/paint/Paint.cpp | 27 +++++++++++++++++++ .../paint/tile_element/Paint.SmallScenery.cpp | 10 +------ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/openrct2/paint/Paint.cpp b/src/openrct2/paint/Paint.cpp index f9f4739bd6..a979a7208a 100644 --- a/src/openrct2/paint/Paint.cpp +++ b/src/openrct2/paint/Paint.cpp @@ -19,6 +19,7 @@ #include "../paint/Painter.h" #include "../profiling/Profiling.h" #include "../util/Math.hpp" +#include "../world/SmallScenery.h" #include "Paint.Entity.h" #include "tile_element/Paint.TileElement.h" @@ -664,6 +665,20 @@ static void PaintPSImage(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId image gfx_draw_sprite(dpi, imageId, { x, y }); } +static bool IsTileElementTree(const TileElement* tileElement) +{ + auto sceneryItem = tileElement->AsSmallScenery(); + if (sceneryItem != nullptr) + { + auto sceneryEntry = sceneryItem->GetEntry(); + if (sceneryEntry != nullptr && sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE)) + { + return true; + } + } + return false; +} + static ImageId PaintPSColourifyImage( ImageId imageId, ViewportInteractionItem spriteType, uint32_t viewFlags, const TileElement* tileElement, const EntityBase* entity) @@ -707,6 +722,11 @@ static ImageId PaintPSColourifyImage( switch (spriteType) { case ViewportInteractionItem::Scenery: + if (!IsTileElementTree(tileElement)) + { + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? ImageId() : seeThrough; + } + break; case ViewportInteractionItem::LargeScenery: case ViewportInteractionItem::Wall: return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? ImageId() : seeThrough; @@ -714,6 +734,13 @@ static ImageId PaintPSColourifyImage( break; } } + if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_TREES) + { + if (spriteType == ViewportInteractionItem::Scenery && IsTileElementTree(tileElement)) + { + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_TREES) ? ImageId() : seeThrough; + } + } return imageId; } diff --git a/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp b/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp index 94d36403d1..f0f7ca1b30 100644 --- a/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp +++ b/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp @@ -340,16 +340,8 @@ void PaintSmallScenery(paint_session& session, uint8_t direction, int32_t height { imageTemplate = ImageId().WithRemap(FilterPaletteID::Palette44); } - else if (sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE) && (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_TREES)) - { - imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); - } - - if (!sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE) || !((session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_TREES) && (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_TREES))) - { - PaintSmallSceneryBody(session, direction, height, sceneryElement, sceneryEntry, imageTemplate); - } + PaintSmallSceneryBody(session, direction, height, sceneryElement, sceneryEntry, imageTemplate); PaintSmallScenerySupports(session, *sceneryEntry, sceneryElement, direction, height, imageTemplate); SetSupportHeights(session, *sceneryEntry, sceneryElement, height); } From c68359662db7e805fe616ad8dbdf3ee9cff9d3c6 Mon Sep 17 00:00:00 2001 From: Ted John Date: Fri, 4 Mar 2022 02:46:37 +0000 Subject: [PATCH 20/27] Refactor visibility control --- .../interface/ViewportInteraction.cpp | 15 ++- src/openrct2/drawing/LightFX.cpp | 3 +- src/openrct2/entity/Peep.cpp | 9 -- src/openrct2/interface/Viewport.cpp | 101 +++++++++++++++++- src/openrct2/interface/Viewport.h | 11 +- src/openrct2/paint/Paint.cpp | 91 +++------------- src/openrct2/ride/gentle/MiniGolf.cpp | 10 -- 7 files changed, 128 insertions(+), 112 deletions(-) diff --git a/src/openrct2-ui/interface/ViewportInteraction.cpp b/src/openrct2-ui/interface/ViewportInteraction.cpp index 5eeb86d108..42232072d5 100644 --- a/src/openrct2-ui/interface/ViewportInteraction.cpp +++ b/src/openrct2-ui/interface/ViewportInteraction.cpp @@ -734,22 +734,21 @@ PeepDistance GetClosestPeep(const ScreenCoordsXY& viewportCoords, const int32_t static Peep* ViewportInteractionGetClosestPeep(ScreenCoordsXY screenCoords, int32_t maxDistance) { - rct_window* w; - rct_viewport* viewport; - - w = window_find_from_point(screenCoords); + auto* w = window_find_from_point(screenCoords); if (w == nullptr) return nullptr; - viewport = w->viewport; + auto* viewport = w->viewport; if (viewport == nullptr || viewport->zoom >= ZoomLevel{ 2 }) return nullptr; auto viewportCoords = viewport->ScreenToViewportCoord(screenCoords); - auto goal = GetClosestPeep(viewportCoords, maxDistance, {}); - goal = GetClosestPeep(viewportCoords, maxDistance, goal); - + PeepDistance goal; + if (!(viewport->flags & VIEWPORT_FLAG_INVISIBLE_GUESTS)) + goal = GetClosestPeep(viewportCoords, maxDistance, goal); + if (!(viewport->flags & VIEWPORT_FLAG_INVISIBLE_STAFF)) + goal = GetClosestPeep(viewportCoords, maxDistance, goal); return goal.peep; } diff --git a/src/openrct2/drawing/LightFX.cpp b/src/openrct2/drawing/LightFX.cpp index 888b416e21..3b434fac5f 100644 --- a/src/openrct2/drawing/LightFX.cpp +++ b/src/openrct2/drawing/LightFX.cpp @@ -311,7 +311,8 @@ void lightfx_prepare_light_list() paint_session* session = PaintSessionAlloc(&dpi, w->viewport->flags); PaintSessionGenerate(*session); PaintSessionArrange(*session); - auto info = set_interaction_info_from_paint_session(session, ViewportInteractionItemAll); + auto info = set_interaction_info_from_paint_session( + session, w->viewport->flags, ViewportInteractionItemAll); PaintSessionFree(session); // log_warning("[%i, %i]", dpi->x, dpi->y); diff --git a/src/openrct2/entity/Peep.cpp b/src/openrct2/entity/Peep.cpp index f23bff8305..cfca4da97a 100644 --- a/src/openrct2/entity/Peep.cpp +++ b/src/openrct2/entity/Peep.cpp @@ -2733,15 +2733,6 @@ void Peep::Paint(paint_session& session, int32_t imageDirection) const return; } - if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS) && Is()) - { - return; - } - if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_STAFF) && Is()) - { - return; - } - PeepActionSpriteType actionSpriteType = ActionSpriteType; uint8_t imageOffset = ActionSpriteImageOffset; diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index 1299878974..68286f8295 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -32,6 +32,7 @@ #include "../util/Math.hpp" #include "../world/Climate.h" #include "../world/Map.h" +#include "../world/SmallScenery.h" #include "Colour.h" #include "Window.h" #include "Window_internal.h" @@ -1352,6 +1353,98 @@ void viewport_set_visibility(uint8_t mode) } } +static bool IsTileElementTree(const TileElement* tileElement) +{ + auto sceneryItem = tileElement->AsSmallScenery(); + if (sceneryItem != nullptr) + { + auto sceneryEntry = sceneryItem->GetEntry(); + if (sceneryEntry != nullptr && sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE)) + { + return true; + } + } + return false; +} + +VisibilityKind GetPaintStructVisibility(const paint_struct* ps, uint32_t viewFlags) +{ + switch (ps->sprite_type) + { + case ViewportInteractionItem::Entity: + if (ps->entity != nullptr) + { + switch (ps->entity->Type) + { + case EntityType::Vehicle: + if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) + { + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_VEHICLES) ? VisibilityKind::Hidden + : VisibilityKind::Partial; + } + break; + case EntityType::Guest: + if (viewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS) + { + return VisibilityKind::Hidden; + } + break; + case EntityType::Staff: + if (viewFlags & VIEWPORT_FLAG_INVISIBLE_STAFF) + { + return VisibilityKind::Hidden; + } + break; + } + } + break; + case ViewportInteractionItem::Ride: + if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) + { + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) ? VisibilityKind::Hidden : VisibilityKind::Partial; + } + break; + case ViewportInteractionItem::Footpath: + case ViewportInteractionItem::FootpathItem: + case ViewportInteractionItem::Banner: + if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_PATHS) + { + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_PATHS) ? VisibilityKind::Hidden : VisibilityKind::Partial; + } + break; + case ViewportInteractionItem::Scenery: + if (ps->tileElement != nullptr && IsTileElementTree(ps->tileElement)) + { + if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_TREES) + { + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_TREES) ? VisibilityKind::Hidden : VisibilityKind::Partial; + } + } + else if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) + { + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? VisibilityKind::Hidden : VisibilityKind::Partial; + } + break; + case ViewportInteractionItem::Wall: + if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) + { + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? VisibilityKind::Hidden : VisibilityKind::Partial; + } + if (viewFlags & VIEWPORT_FLAG_UNDERGROUND_INSIDE) + { + return VisibilityKind::Partial; + } + break; + case ViewportInteractionItem::LargeScenery: + if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) + { + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? VisibilityKind::Hidden : VisibilityKind::Partial; + } + break; + } + return VisibilityKind::Visible; +} + /** * Checks if a paint_struct sprite type is in the filter mask. */ @@ -1673,7 +1766,7 @@ static bool is_sprite_interacted_with(rct_drawpixelinfo* dpi, ImageId imageId, c * * rct2: 0x0068862C */ -InteractionInfo set_interaction_info_from_paint_session(paint_session* session, uint16_t filter) +InteractionInfo set_interaction_info_from_paint_session(paint_session* session, uint32_t viewFlags, uint16_t filter) { PROFILED_FUNCTION(); @@ -1690,7 +1783,7 @@ InteractionInfo set_interaction_info_from_paint_session(paint_session* session, ps = next_ps; if (is_sprite_interacted_with(dpi, ps->image_id, { ps->x, ps->y })) { - if (PSSpriteTypeIsInFilter(ps, filter)) + if (PSSpriteTypeIsInFilter(ps, filter) && GetPaintStructVisibility(ps, viewFlags) != VisibilityKind::Hidden) { info = { ps }; } @@ -1702,7 +1795,7 @@ InteractionInfo set_interaction_info_from_paint_session(paint_session* session, { if (is_sprite_interacted_with(dpi, attached_ps->image_id, { (attached_ps->x + ps->x), (attached_ps->y + ps->y) })) { - if (PSSpriteTypeIsInFilter(ps, filter)) + if (PSSpriteTypeIsInFilter(ps, filter) && GetPaintStructVisibility(ps, viewFlags) != VisibilityKind::Hidden) { info = { ps }; } @@ -1764,7 +1857,7 @@ InteractionInfo get_map_coordinates_from_pos_window(rct_window* window, const Sc paint_session* session = PaintSessionAlloc(&dpi, myviewport->flags); PaintSessionGenerate(*session); PaintSessionArrange(*session); - info = set_interaction_info_from_paint_session(session, flags & 0xFFFF); + info = set_interaction_info_from_paint_session(session, myviewport->flags, flags & 0xFFFF); PaintSessionFree(session); } return info; diff --git a/src/openrct2/interface/Viewport.h b/src/openrct2/interface/Viewport.h index 542b76d1f8..64b1477bf0 100644 --- a/src/openrct2/interface/Viewport.h +++ b/src/openrct2/interface/Viewport.h @@ -60,6 +60,13 @@ enum VIEWPORT_FLAG_SEETHROUGH_SUPPORTS = (1 << 29), }; +enum class VisibilityKind +{ + Visible, + Partial, + Hidden +}; + enum class ViewportInteractionItem : uint8_t { None, @@ -142,7 +149,7 @@ void viewport_set_visibility(uint8_t mode); InteractionInfo get_map_coordinates_from_pos(const ScreenCoordsXY& screenCoords, int32_t flags); InteractionInfo get_map_coordinates_from_pos_window(rct_window* window, const ScreenCoordsXY& screenCoords, int32_t flags); -InteractionInfo set_interaction_info_from_paint_session(paint_session* session, uint16_t filter); +InteractionInfo set_interaction_info_from_paint_session(paint_session* session, uint32_t viewFlags, uint16_t filter); InteractionInfo ViewportInteractionGetItemLeft(const ScreenCoordsXY& screenCoords); bool ViewportInteractionLeftOver(const ScreenCoordsXY& screenCoords); bool ViewportInteractionLeftClick(const ScreenCoordsXY& screenCoords); @@ -165,3 +172,5 @@ uint8_t get_current_rotation(); int32_t get_height_marker_offset(); void viewport_set_saved_view(); + +VisibilityKind GetPaintStructVisibility(const paint_struct* ps, uint32_t viewFlags); diff --git a/src/openrct2/paint/Paint.cpp b/src/openrct2/paint/Paint.cpp index a979a7208a..51dff01d52 100644 --- a/src/openrct2/paint/Paint.cpp +++ b/src/openrct2/paint/Paint.cpp @@ -57,9 +57,7 @@ bool gPaintBlockedTiles; static void PaintAttachedPS(rct_drawpixelinfo* dpi, paint_struct* ps, uint32_t viewFlags); static void PaintPSImageWithBoundingBoxes(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId imageId, int32_t x, int32_t y); static void PaintPSImage(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId imageId, int32_t x, int32_t y); -static ImageId PaintPSColourifyImage( - ImageId imageId, ViewportInteractionItem spriteType, uint32_t viewFlags, const TileElement* tileElement, - const EntityBase* entity); +static ImageId PaintPSColourifyImage(const paint_struct* ps, ImageId imageId, uint32_t viewFlags); static int32_t RemapPositionToQuadrant(const paint_struct& ps, uint8_t rotation) { @@ -507,7 +505,7 @@ static void PaintDrawStruct(paint_session& session, paint_struct* ps) } } - auto imageId = PaintPSColourifyImage(ps->image_id, ps->sprite_type, session.ViewFlags, ps->tileElement, ps->entity); + auto imageId = PaintPSColourifyImage(ps, ps->image_id, session.ViewFlags); if (gPaintBoundingBoxes && dpi->zoom_level == ZoomLevel{ 0 }) { PaintPSImageWithBoundingBoxes(dpi, ps, imageId, x, y); @@ -557,7 +555,7 @@ static void PaintAttachedPS(rct_drawpixelinfo* dpi, paint_struct* ps, uint32_t v { auto screenCoords = ScreenCoordsXY{ attached_ps->x + ps->x, attached_ps->y + ps->y }; - auto imageId = PaintPSColourifyImage(attached_ps->image_id, ps->sprite_type, viewFlags, ps->tileElement, ps->entity); + auto imageId = PaintPSColourifyImage(ps, attached_ps->image_id, viewFlags); if (attached_ps->flags & PAINT_STRUCT_FLAG_IS_MASKED) { gfx_draw_sprite_raw_masked(dpi, screenCoords, imageId, attached_ps->colour_image_id); @@ -665,83 +663,18 @@ static void PaintPSImage(rct_drawpixelinfo* dpi, paint_struct* ps, ImageId image gfx_draw_sprite(dpi, imageId, { x, y }); } -static bool IsTileElementTree(const TileElement* tileElement) +static ImageId PaintPSColourifyImage(const paint_struct* ps, ImageId imageId, uint32_t viewFlags) { - auto sceneryItem = tileElement->AsSmallScenery(); - if (sceneryItem != nullptr) + auto visibility = GetPaintStructVisibility(ps, viewFlags); + switch (visibility) { - auto sceneryEntry = sceneryItem->GetEntry(); - if (sceneryEntry != nullptr && sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE)) - { - return true; - } + case VisibilityKind::Partial: + return imageId.WithTransparancy(FilterPaletteID::PaletteDarken1); + case VisibilityKind::Hidden: + return ImageId(); + default: + return imageId; } - return false; -} - -static ImageId PaintPSColourifyImage( - ImageId imageId, ViewportInteractionItem spriteType, uint32_t viewFlags, const TileElement* tileElement, - const EntityBase* entity) -{ - auto seeThrough = imageId.WithTransparancy(FilterPaletteID::PaletteDarken1); - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) - { - if (spriteType == ViewportInteractionItem::Ride) - { - return (viewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) ? ImageId() : seeThrough; - } - } - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) - { - if (spriteType == ViewportInteractionItem::Entity && (entity != nullptr && entity->Type == EntityType::Vehicle)) - { - return (viewFlags & VIEWPORT_FLAG_INVISIBLE_VEHICLES) ? ImageId() : seeThrough; - } - } - if (viewFlags & VIEWPORT_FLAG_UNDERGROUND_INSIDE) - { - if (spriteType == ViewportInteractionItem::Wall) - { - return seeThrough; - } - } - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_PATHS) - { - switch (spriteType) - { - case ViewportInteractionItem::Footpath: - case ViewportInteractionItem::FootpathItem: - case ViewportInteractionItem::Banner: - return (viewFlags & VIEWPORT_FLAG_INVISIBLE_PATHS) ? ImageId() : seeThrough; - default: - break; - } - } - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) - { - switch (spriteType) - { - case ViewportInteractionItem::Scenery: - if (!IsTileElementTree(tileElement)) - { - return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? ImageId() : seeThrough; - } - break; - case ViewportInteractionItem::LargeScenery: - case ViewportInteractionItem::Wall: - return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? ImageId() : seeThrough; - default: - break; - } - } - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_TREES) - { - if (spriteType == ViewportInteractionItem::Scenery && IsTileElementTree(tileElement)) - { - return (viewFlags & VIEWPORT_FLAG_INVISIBLE_TREES) ? ImageId() : seeThrough; - } - } - return imageId; } paint_session* PaintSessionAlloc(rct_drawpixelinfo* dpi, uint32_t viewFlags) diff --git a/src/openrct2/ride/gentle/MiniGolf.cpp b/src/openrct2/ride/gentle/MiniGolf.cpp index 65671bf759..8a835beaf2 100644 --- a/src/openrct2/ride/gentle/MiniGolf.cpp +++ b/src/openrct2/ride/gentle/MiniGolf.cpp @@ -1213,11 +1213,6 @@ void vehicle_visual_mini_golf_player( return; } - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS) - { - return; - } - auto ride = vehicle->GetRide(); if (ride == nullptr) return; @@ -1255,11 +1250,6 @@ void vehicle_visual_mini_golf_ball( return; } - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS) - { - return; - } - auto ride = vehicle->GetRide(); if (ride == nullptr) return; From 61f1e13c0b40e4159280304c0aa9ba5e04b69bc9 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 6 Mar 2022 14:26:36 +0000 Subject: [PATCH 21/27] Refactor viewport flags --- src/openrct2-ui/input/Shortcuts.cpp | 18 +++--- .../interface/ViewportInteraction.cpp | 4 +- src/openrct2-ui/windows/TopToolbar.cpp | 28 ++++----- src/openrct2-ui/windows/Transparency.cpp | 32 +++++----- src/openrct2/interface/Screenshot.cpp | 4 +- src/openrct2/interface/Viewport.cpp | 36 +++++------ src/openrct2/interface/Viewport.h | 61 ++++++++++--------- src/openrct2/paint/Paint.Entity.cpp | 2 +- src/openrct2/paint/Supports.cpp | 12 ++-- src/openrct2/ride/TrackDesign.cpp | 2 +- 10 files changed, 101 insertions(+), 98 deletions(-) diff --git a/src/openrct2-ui/input/Shortcuts.cpp b/src/openrct2-ui/input/Shortcuts.cpp index f1beef04e2..0ef55df415 100644 --- a/src/openrct2-ui/input/Shortcuts.cpp +++ b/src/openrct2-ui/input/Shortcuts.cpp @@ -638,10 +638,10 @@ static void ShortcutToggleInvisiblePeeps() auto w = window_get_main(); if (w != nullptr) { - if (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_GUESTS || w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_STAFF) - w->viewport->flags = w->viewport->flags & ~(VIEWPORT_FLAG_INVISIBLE_GUESTS | VIEWPORT_FLAG_INVISIBLE_STAFF); + if (w->viewport->flags & VIEWPORT_FLAG_HIDE_GUESTS || w->viewport->flags & VIEWPORT_FLAG_HIDE_STAFF) + w->viewport->flags = w->viewport->flags & ~(VIEWPORT_FLAG_HIDE_GUESTS | VIEWPORT_FLAG_HIDE_STAFF); else - w->viewport->flags |= (VIEWPORT_FLAG_INVISIBLE_GUESTS | VIEWPORT_FLAG_INVISIBLE_STAFF); + w->viewport->flags |= (VIEWPORT_FLAG_HIDE_GUESTS | VIEWPORT_FLAG_HIDE_STAFF); w->Invalidate(); } } @@ -654,10 +654,10 @@ static void ShortcutToggleInvisibleSupports() auto w = window_get_main(); if (w != nullptr) { - if ((w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) || (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)) - w->viewport->flags = w->viewport->flags & ~(VIEWPORT_FLAG_SEETHROUGH_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); + if ((w->viewport->flags & VIEWPORT_FLAG_HIDE_SUPPORTS) || (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)) + w->viewport->flags = w->viewport->flags & ~(VIEWPORT_FLAG_HIDE_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); else - w->viewport->flags |= (VIEWPORT_FLAG_SEETHROUGH_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); + w->viewport->flags |= (VIEWPORT_FLAG_HIDE_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); w->Invalidate(); } } @@ -885,9 +885,9 @@ void ShortcutManager::RegisterDefaultShortcuts() RegisterShortcut(ShortcutId::ViewToggleTransparentWater, STR_VIEWPORT_TRANSPARENT_WATER, "2", []() { ShortcutToggleTransparentWater(); }); RegisterShortcut(ShortcutId::ViewToggleBaseLand, STR_SHORTCUT_REMOVE_BASE_LAND_TOGGLE, "H", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_BASE); }); RegisterShortcut(ShortcutId::ViewToggleVerticalLand, STR_SHORTCUT_REMOVE_VERTICAL_LAND_TOGGLE, "V", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_VERTICAL); }); - RegisterShortcut(ShortcutId::ViewToggleRides, STR_SHORTCUT_SEE_THROUGH_RIDES_TOGGLE, "3", []() { ToggleViewFlag(VIEWPORT_FLAG_SEETHROUGH_RIDES); }); - RegisterShortcut(ShortcutId::ViewToggleScenery, STR_SHORTCUT_SEE_THROUGH_SCENERY_TOGGLE, "4", []() { ToggleViewFlag(VIEWPORT_FLAG_SEETHROUGH_SCENERY); }); - RegisterShortcut(ShortcutId::ViewToggleFootpaths, STR_SHORTCUT_SEE_THROUGH_PATHS_TOGGLE, []() { ToggleViewFlag(VIEWPORT_FLAG_SEETHROUGH_PATHS); }); + RegisterShortcut(ShortcutId::ViewToggleRides, STR_SHORTCUT_SEE_THROUGH_RIDES_TOGGLE, "3", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_RIDES); }); + RegisterShortcut(ShortcutId::ViewToggleScenery, STR_SHORTCUT_SEE_THROUGH_SCENERY_TOGGLE, "4", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_SCENERY); }); + RegisterShortcut(ShortcutId::ViewToggleFootpaths, STR_SHORTCUT_SEE_THROUGH_PATHS_TOGGLE, []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_PATHS); }); RegisterShortcut(ShortcutId::ViewToggleSupports, STR_SHORTCUT_INVISIBLE_SUPPORTS_TOGGLE, "5", []() { ShortcutToggleInvisibleSupports(); }); RegisterShortcut(ShortcutId::ViewTogglePeeps, STR_SHORTCUT_INVISIBLE_PEOPLE_TOGGLE, "6", []() { ShortcutToggleInvisiblePeeps(); }); RegisterShortcut(ShortcutId::ViewToggleLandHeightMarkers, STR_SHORTCUT_HEIGHT_MARKS_ON_LAND_TOGGLE, "8", []() { ToggleViewFlag(VIEWPORT_FLAG_LAND_HEIGHTS); }); diff --git a/src/openrct2-ui/interface/ViewportInteraction.cpp b/src/openrct2-ui/interface/ViewportInteraction.cpp index 42232072d5..7b65b6dc1c 100644 --- a/src/openrct2-ui/interface/ViewportInteraction.cpp +++ b/src/openrct2-ui/interface/ViewportInteraction.cpp @@ -745,9 +745,9 @@ static Peep* ViewportInteractionGetClosestPeep(ScreenCoordsXY screenCoords, int3 auto viewportCoords = viewport->ScreenToViewportCoord(screenCoords); PeepDistance goal; - if (!(viewport->flags & VIEWPORT_FLAG_INVISIBLE_GUESTS)) + if (!(viewport->flags & VIEWPORT_FLAG_HIDE_GUESTS)) goal = GetClosestPeep(viewportCoords, maxDistance, goal); - if (!(viewport->flags & VIEWPORT_FLAG_INVISIBLE_STAFF)) + if (!(viewport->flags & VIEWPORT_FLAG_HIDE_STAFF)) goal = GetClosestPeep(viewportCoords, maxDistance, goal); return goal.peep; } diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index 50e732c0bb..fd153d0b1d 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -3659,15 +3659,15 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) Dropdown::SetChecked(DDIDX_HIDE_BASE, true); if (mainViewport->flags & VIEWPORT_FLAG_HIDE_VERTICAL) Dropdown::SetChecked(DDIDX_HIDE_VERTICAL, true); - if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES) + if (mainViewport->flags & VIEWPORT_FLAG_HIDE_RIDES) Dropdown::SetChecked(DDIDX_SEETHROUGH_RIDES, true); - if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) + if (mainViewport->flags & VIEWPORT_FLAG_HIDE_SCENERY) Dropdown::SetChecked(DDIDX_SEETHROUGH_SCENERY, true); - if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_PATHS) + if (mainViewport->flags & VIEWPORT_FLAG_HIDE_PATHS) Dropdown::SetChecked(DDIDX_SEETHROUGH_PATHS, true); - if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) + if (mainViewport->flags & VIEWPORT_FLAG_HIDE_SUPPORTS) Dropdown::SetChecked(DDIDX_INVISIBLE_SUPPORTS, true); - if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_GUESTS || mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_STAFF) + if (mainViewport->flags & VIEWPORT_FLAG_HIDE_GUESTS || mainViewport->flags & VIEWPORT_FLAG_HIDE_STAFF) Dropdown::SetChecked(DDIDX_INVISIBLE_PEEPS, true); if (mainViewport->flags & VIEWPORT_FLAG_LAND_HEIGHTS) Dropdown::SetChecked(DDIDX_LAND_HEIGHTS, true); @@ -3714,26 +3714,26 @@ static void TopToolbarViewMenuDropdown(int16_t dropdownIndex) w->viewport->flags ^= VIEWPORT_FLAG_HIDE_VERTICAL; break; case DDIDX_SEETHROUGH_RIDES: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; + w->viewport->flags ^= VIEWPORT_FLAG_HIDE_RIDES; break; case DDIDX_SEETHROUGH_SCENERY: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_SCENERY; + w->viewport->flags ^= VIEWPORT_FLAG_HIDE_SCENERY; break; case DDIDX_SEETHROUGH_PATHS: - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_PATHS; + w->viewport->flags ^= VIEWPORT_FLAG_HIDE_PATHS; break; case DDIDX_INVISIBLE_SUPPORTS: - if (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) + if (w->viewport->flags & VIEWPORT_FLAG_HIDE_SUPPORTS) w->viewport->flags = w->viewport->flags - & ~(VIEWPORT_FLAG_SEETHROUGH_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); + & ~(VIEWPORT_FLAG_HIDE_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); else - w->viewport->flags |= (VIEWPORT_FLAG_SEETHROUGH_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); + w->viewport->flags |= (VIEWPORT_FLAG_HIDE_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); break; case DDIDX_INVISIBLE_PEEPS: - if (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_GUESTS || w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_STAFF) - w->viewport->flags = w->viewport->flags & ~(VIEWPORT_FLAG_INVISIBLE_GUESTS | VIEWPORT_FLAG_INVISIBLE_STAFF); + if (w->viewport->flags & VIEWPORT_FLAG_HIDE_GUESTS || w->viewport->flags & VIEWPORT_FLAG_HIDE_STAFF) + w->viewport->flags = w->viewport->flags & ~(VIEWPORT_FLAG_HIDE_GUESTS | VIEWPORT_FLAG_HIDE_STAFF); else - w->viewport->flags |= (VIEWPORT_FLAG_INVISIBLE_GUESTS | VIEWPORT_FLAG_INVISIBLE_STAFF); + w->viewport->flags |= (VIEWPORT_FLAG_HIDE_GUESTS | VIEWPORT_FLAG_HIDE_STAFF); break; case DDIDX_LAND_HEIGHTS: w->viewport->flags ^= VIEWPORT_FLAG_LAND_HEIGHTS; diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index 0cdc3c011d..54975c0e2f 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -124,20 +124,20 @@ public: if (w != nullptr) wflags = w->viewport->flags; - 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_SEE_THROUGH_RIDES, (wflags & VIEWPORT_FLAG_HIDE_RIDES)); + SetWidgetPressed(WIDX_SEE_THROUGH_VEHICLES, (wflags & VIEWPORT_FLAG_HIDE_VEHICLES)); + SetWidgetPressed(WIDX_SEE_THROUGH_SCENERY, (wflags & VIEWPORT_FLAG_HIDE_SCENERY)); + SetWidgetPressed(WIDX_SEE_THROUGH_TREES, (wflags & VIEWPORT_FLAG_HIDE_TREES)); + SetWidgetPressed(WIDX_SEE_THROUGH_PATHS, (wflags & VIEWPORT_FLAG_HIDE_PATHS)); + SetWidgetPressed(WIDX_SEE_THROUGH_SUPPORTS, (wflags & VIEWPORT_FLAG_HIDE_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)); + SetWidgetPressed(WIDX_INVISIBLE_GUESTS, (wflags & VIEWPORT_FLAG_HIDE_GUESTS)); + SetWidgetPressed(WIDX_INVISIBLE_STAFF, (wflags & VIEWPORT_FLAG_HIDE_STAFF)); } void OnDraw(rct_drawpixelinfo& dpi) override @@ -164,22 +164,22 @@ private: switch (widgetIndex) { case WIDX_SEE_THROUGH_RIDES: - wflags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; + wflags ^= VIEWPORT_FLAG_HIDE_RIDES; break; case WIDX_SEE_THROUGH_VEHICLES: - wflags ^= VIEWPORT_FLAG_SEETHROUGH_VEHICLES; + wflags ^= VIEWPORT_FLAG_HIDE_VEHICLES; break; case WIDX_SEE_THROUGH_SCENERY: - wflags ^= VIEWPORT_FLAG_SEETHROUGH_SCENERY; + wflags ^= VIEWPORT_FLAG_HIDE_SCENERY; break; case WIDX_SEE_THROUGH_TREES: - wflags ^= VIEWPORT_FLAG_SEETHROUGH_TREES; + wflags ^= VIEWPORT_FLAG_HIDE_TREES; break; case WIDX_SEE_THROUGH_PATHS: - wflags ^= VIEWPORT_FLAG_SEETHROUGH_PATHS; + wflags ^= VIEWPORT_FLAG_HIDE_PATHS; break; case WIDX_SEE_THROUGH_SUPPORTS: - wflags ^= VIEWPORT_FLAG_SEETHROUGH_SUPPORTS; + wflags ^= VIEWPORT_FLAG_HIDE_SUPPORTS; break; case WIDX_INVISIBLE_RIDES: wflags ^= VIEWPORT_FLAG_INVISIBLE_RIDES; @@ -200,10 +200,10 @@ private: wflags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; break; case WIDX_INVISIBLE_GUESTS: - wflags ^= VIEWPORT_FLAG_INVISIBLE_GUESTS; + wflags ^= VIEWPORT_FLAG_HIDE_GUESTS; break; case WIDX_INVISIBLE_STAFF: - wflags ^= VIEWPORT_FLAG_INVISIBLE_STAFF; + wflags ^= VIEWPORT_FLAG_HIDE_STAFF; break; default: return; diff --git a/src/openrct2/interface/Screenshot.cpp b/src/openrct2/interface/Screenshot.cpp index b45a84ccee..fa580604d8 100644 --- a/src/openrct2/interface/Screenshot.cpp +++ b/src/openrct2/interface/Screenshot.cpp @@ -564,12 +564,12 @@ static void ApplyOptions(const ScreenshotOptions* options, rct_viewport& viewpor if (options->hide_guests) { - viewport.flags |= VIEWPORT_FLAG_INVISIBLE_GUESTS | VIEWPORT_FLAG_INVISIBLE_STAFF; + viewport.flags |= VIEWPORT_FLAG_HIDE_GUESTS | VIEWPORT_FLAG_HIDE_STAFF; } if (options->hide_sprites) { - viewport.flags |= VIEWPORT_FLAG_INVISIBLE_SPRITES; + viewport.flags |= VIEWPORT_FLAG_HIDE_ENTITIES; } if (options->mowed_grass) diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index 68286f8295..6bc6c36d2e 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -924,7 +924,7 @@ static void viewport_paint_column(paint_session& session) && (~session.ViewFlags & VIEWPORT_FLAG_TRANSPARENT_BACKGROUND)) { uint8_t colour = COLOUR_AQUAMARINE; - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SPRITES) + if (session.ViewFlags & VIEWPORT_FLAG_HIDE_ENTITIES) { colour = COLOUR_BLACK; } @@ -933,7 +933,7 @@ static void viewport_paint_column(paint_session& session) PaintDrawStructs(session); - if (gConfigGeneral.render_weather_gloom && !gTrackDesignSaveMode && !(session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SPRITES) + if (gConfigGeneral.render_weather_gloom && !gTrackDesignSaveMode && !(session.ViewFlags & VIEWPORT_FLAG_HIDE_ENTITIES) && !(session.ViewFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES)) { viewport_paint_weather_gloom(&session.DPI); @@ -1318,13 +1318,13 @@ void viewport_set_visibility(uint8_t mode) { case 0: { // Set all these flags to 0, and invalidate if any were active - uint32_t mask = VIEWPORT_FLAG_UNDERGROUND_INSIDE | VIEWPORT_FLAG_SEETHROUGH_RIDES - | VIEWPORT_FLAG_SEETHROUGH_SCENERY | VIEWPORT_FLAG_SEETHROUGH_PATHS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS - | VIEWPORT_FLAG_LAND_HEIGHTS | VIEWPORT_FLAG_TRACK_HEIGHTS | VIEWPORT_FLAG_PATH_HEIGHTS - | VIEWPORT_FLAG_INVISIBLE_GUESTS | VIEWPORT_FLAG_INVISIBLE_STAFF | VIEWPORT_FLAG_HIDE_BASE - | VIEWPORT_FLAG_HIDE_VERTICAL | VIEWPORT_FLAG_SEETHROUGH_VEHICLES | VIEWPORT_FLAG_INVISIBLE_RIDES - | VIEWPORT_FLAG_INVISIBLE_VEHICLES | VIEWPORT_FLAG_SEETHROUGH_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_PATHS - | VIEWPORT_FLAG_INVISIBLE_SCENERY | VIEWPORT_FLAG_SEETHROUGH_TREES | VIEWPORT_FLAG_INVISIBLE_TREES; + uint32_t mask = VIEWPORT_FLAG_UNDERGROUND_INSIDE | VIEWPORT_FLAG_HIDE_RIDES | VIEWPORT_FLAG_HIDE_SCENERY + | VIEWPORT_FLAG_HIDE_PATHS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS | VIEWPORT_FLAG_LAND_HEIGHTS + | VIEWPORT_FLAG_TRACK_HEIGHTS | VIEWPORT_FLAG_PATH_HEIGHTS | VIEWPORT_FLAG_HIDE_GUESTS + | VIEWPORT_FLAG_HIDE_STAFF | VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_HIDE_VERTICAL + | VIEWPORT_FLAG_HIDE_VEHICLES | VIEWPORT_FLAG_INVISIBLE_RIDES | VIEWPORT_FLAG_INVISIBLE_VEHICLES + | VIEWPORT_FLAG_HIDE_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_PATHS | VIEWPORT_FLAG_INVISIBLE_SCENERY + | VIEWPORT_FLAG_HIDE_TREES | VIEWPORT_FLAG_INVISIBLE_TREES; invalidate += vp->flags & mask; vp->flags &= ~mask; @@ -1377,20 +1377,20 @@ VisibilityKind GetPaintStructVisibility(const paint_struct* ps, uint32_t viewFla switch (ps->entity->Type) { case EntityType::Vehicle: - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) + if (viewFlags & VIEWPORT_FLAG_HIDE_VEHICLES) { return (viewFlags & VIEWPORT_FLAG_INVISIBLE_VEHICLES) ? VisibilityKind::Hidden : VisibilityKind::Partial; } break; case EntityType::Guest: - if (viewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS) + if (viewFlags & VIEWPORT_FLAG_HIDE_GUESTS) { return VisibilityKind::Hidden; } break; case EntityType::Staff: - if (viewFlags & VIEWPORT_FLAG_INVISIBLE_STAFF) + if (viewFlags & VIEWPORT_FLAG_HIDE_STAFF) { return VisibilityKind::Hidden; } @@ -1399,7 +1399,7 @@ VisibilityKind GetPaintStructVisibility(const paint_struct* ps, uint32_t viewFla } break; case ViewportInteractionItem::Ride: - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) + if (viewFlags & VIEWPORT_FLAG_HIDE_RIDES) { return (viewFlags & VIEWPORT_FLAG_INVISIBLE_RIDES) ? VisibilityKind::Hidden : VisibilityKind::Partial; } @@ -1407,7 +1407,7 @@ VisibilityKind GetPaintStructVisibility(const paint_struct* ps, uint32_t viewFla case ViewportInteractionItem::Footpath: case ViewportInteractionItem::FootpathItem: case ViewportInteractionItem::Banner: - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_PATHS) + if (viewFlags & VIEWPORT_FLAG_HIDE_PATHS) { return (viewFlags & VIEWPORT_FLAG_INVISIBLE_PATHS) ? VisibilityKind::Hidden : VisibilityKind::Partial; } @@ -1415,18 +1415,18 @@ VisibilityKind GetPaintStructVisibility(const paint_struct* ps, uint32_t viewFla case ViewportInteractionItem::Scenery: if (ps->tileElement != nullptr && IsTileElementTree(ps->tileElement)) { - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_TREES) + if (viewFlags & VIEWPORT_FLAG_HIDE_TREES) { return (viewFlags & VIEWPORT_FLAG_INVISIBLE_TREES) ? VisibilityKind::Hidden : VisibilityKind::Partial; } } - else if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) + else if (viewFlags & VIEWPORT_FLAG_HIDE_SCENERY) { return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? VisibilityKind::Hidden : VisibilityKind::Partial; } break; case ViewportInteractionItem::Wall: - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) + if (viewFlags & VIEWPORT_FLAG_HIDE_SCENERY) { return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? VisibilityKind::Hidden : VisibilityKind::Partial; } @@ -1436,7 +1436,7 @@ VisibilityKind GetPaintStructVisibility(const paint_struct* ps, uint32_t viewFla } break; case ViewportInteractionItem::LargeScenery: - if (viewFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) + if (viewFlags & VIEWPORT_FLAG_HIDE_SCENERY) { return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? VisibilityKind::Hidden : VisibilityKind::Partial; } diff --git a/src/openrct2/interface/Viewport.h b/src/openrct2/interface/Viewport.h index 64b1477bf0..afdebef75c 100644 --- a/src/openrct2/interface/Viewport.h +++ b/src/openrct2/interface/Viewport.h @@ -29,35 +29,38 @@ struct paint_entry; enum { - VIEWPORT_FLAG_UNDERGROUND_INSIDE = (1 << 0), - VIEWPORT_FLAG_SEETHROUGH_RIDES = (1 << 1), - VIEWPORT_FLAG_SEETHROUGH_SCENERY = (1 << 2), - VIEWPORT_FLAG_INVISIBLE_SUPPORTS = (1 << 3), - VIEWPORT_FLAG_LAND_HEIGHTS = (1 << 4), - VIEWPORT_FLAG_TRACK_HEIGHTS = (1 << 5), - VIEWPORT_FLAG_PATH_HEIGHTS = (1 << 6), - VIEWPORT_FLAG_GRIDLINES = (1 << 7), - VIEWPORT_FLAG_LAND_OWNERSHIP = (1 << 8), - VIEWPORT_FLAG_CONSTRUCTION_RIGHTS = (1 << 9), - VIEWPORT_FLAG_SOUND_ON = (1 << 10), - VIEWPORT_FLAG_HIDE_BASE = (1 << 12), - VIEWPORT_FLAG_HIDE_VERTICAL = (1 << 13), - VIEWPORT_FLAG_INVISIBLE_SPRITES = (1 << 14), - VIEWPORT_FLAG_15 = (1 << 15), - VIEWPORT_FLAG_SEETHROUGH_PATHS = (1 << 16), - VIEWPORT_FLAG_CLIP_VIEW = (1 << 17), - VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES = (1 << 18), - VIEWPORT_FLAG_TRANSPARENT_BACKGROUND = (1 << 19), - VIEWPORT_FLAG_SEETHROUGH_VEHICLES = (1 << 20), - VIEWPORT_FLAG_INVISIBLE_VEHICLES = (1 << 21), - VIEWPORT_FLAG_INVISIBLE_RIDES = (1 << 22), - VIEWPORT_FLAG_INVISIBLE_SCENERY = (1 << 23), - VIEWPORT_FLAG_INVISIBLE_PATHS = (1 << 24), - VIEWPORT_FLAG_INVISIBLE_GUESTS = (1 << 25), - VIEWPORT_FLAG_INVISIBLE_STAFF = (1 << 26), - VIEWPORT_FLAG_SEETHROUGH_TREES = (1 << 27), - VIEWPORT_FLAG_INVISIBLE_TREES = (1 << 28), - VIEWPORT_FLAG_SEETHROUGH_SUPPORTS = (1 << 29), + VIEWPORT_FLAG_GRIDLINES = (1 << 0), + VIEWPORT_FLAG_UNDERGROUND_INSIDE = (1 << 1), + VIEWPORT_FLAG_HIDE_BASE = (1 << 2), + VIEWPORT_FLAG_HIDE_VERTICAL = (1 << 3), + + VIEWPORT_FLAG_SOUND_ON = (1 << 4), + VIEWPORT_FLAG_LAND_OWNERSHIP = (1 << 5), + VIEWPORT_FLAG_CONSTRUCTION_RIGHTS = (1 << 6), + VIEWPORT_FLAG_HIDE_ENTITIES = (1 << 7), + VIEWPORT_FLAG_CLIP_VIEW = (1 << 8), + VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES = (1 << 9), + VIEWPORT_FLAG_TRANSPARENT_BACKGROUND = (1 << 10), + + VIEWPORT_FLAG_LAND_HEIGHTS = (1 << 12), + VIEWPORT_FLAG_TRACK_HEIGHTS = (1 << 13), + VIEWPORT_FLAG_PATH_HEIGHTS = (1 << 14), + + VIEWPORT_FLAG_HIDE_RIDES = (1 << 16), + VIEWPORT_FLAG_HIDE_VEHICLES = (1 << 17), + VIEWPORT_FLAG_HIDE_TREES = (1 << 18), + VIEWPORT_FLAG_HIDE_SCENERY = (1 << 19), + VIEWPORT_FLAG_HIDE_PATHS = (1 << 20), + VIEWPORT_FLAG_HIDE_SUPPORTS = (1 << 21), + VIEWPORT_FLAG_HIDE_GUESTS = (1 << 22), + VIEWPORT_FLAG_HIDE_STAFF = (1 << 23), + + VIEWPORT_FLAG_INVISIBLE_RIDES = (1 << 24), + VIEWPORT_FLAG_INVISIBLE_VEHICLES = (1 << 25), + VIEWPORT_FLAG_INVISIBLE_TREES = (1 << 26), + VIEWPORT_FLAG_INVISIBLE_SCENERY = (1 << 27), + VIEWPORT_FLAG_INVISIBLE_PATHS = (1 << 28), + VIEWPORT_FLAG_INVISIBLE_SUPPORTS = (1 << 29), }; enum class VisibilityKind diff --git a/src/openrct2/paint/Paint.Entity.cpp b/src/openrct2/paint/Paint.Entity.cpp index ebe828793e..f30d45957e 100644 --- a/src/openrct2/paint/Paint.Entity.cpp +++ b/src/openrct2/paint/Paint.Entity.cpp @@ -42,7 +42,7 @@ void EntityPaintSetup(paint_session& session, const CoordsXY& pos) { return; } - if (gTrackDesignSaveMode || (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SPRITES)) + if (gTrackDesignSaveMode || (session.ViewFlags & VIEWPORT_FLAG_HIDE_ENTITIES)) { return; } diff --git a/src/openrct2/paint/Supports.cpp b/src/openrct2/paint/Supports.cpp index 9a409c7105..53e6ce29f4 100644 --- a/src/openrct2/paint/Supports.cpp +++ b/src/openrct2/paint/Supports.cpp @@ -481,7 +481,7 @@ bool wooden_a_supports_paint_setup( return false; } - if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) + if (session.ViewFlags & VIEWPORT_FLAG_HIDE_SUPPORTS) { if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) { @@ -642,7 +642,7 @@ bool wooden_b_supports_paint_setup( return false; } - if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) + if (session.ViewFlags & VIEWPORT_FLAG_HIDE_SUPPORTS) { if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) { @@ -816,7 +816,7 @@ bool metal_a_supports_paint_setup( return false; } - if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) + if (session.ViewFlags & VIEWPORT_FLAG_HIDE_SUPPORTS) { if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) { @@ -1019,7 +1019,7 @@ bool metal_b_supports_paint_setup( return false; // AND } - if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) + if (session.ViewFlags & VIEWPORT_FLAG_HIDE_SUPPORTS) { if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) { @@ -1203,7 +1203,7 @@ bool path_a_supports_paint_setup( return false; } - if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) + if (session.ViewFlags & VIEWPORT_FLAG_HIDE_SUPPORTS) { if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) { @@ -1357,7 +1357,7 @@ bool path_b_supports_paint_setup( return false; } - if (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_SUPPORTS) + if (session.ViewFlags & VIEWPORT_FLAG_HIDE_SUPPORTS) { if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) { diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 06331ccb80..03a2e48f73 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -2115,7 +2115,7 @@ void TrackDesignDrawPreview(TrackDesign* td6, uint8_t* pixels) view.view_height = size_y; view.pos = { 0, 0 }; view.zoom = zoom_level; - view.flags = VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_INVISIBLE_SPRITES; + view.flags = VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_HIDE_ENTITIES; rct_drawpixelinfo dpi; dpi.zoom_level = zoom_level; From 52e5d48501d8ed87eec3bb24c8b473d0564b3648 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 6 Mar 2022 15:04:11 +0000 Subject: [PATCH 22/27] Update shortcuts and toolbar menu --- data/language/en-GB.txt | 4 ++ src/openrct2-ui/input/ShortcutIds.h | 7 +- src/openrct2-ui/input/ShortcutManager.cpp | 2 +- src/openrct2-ui/input/Shortcuts.cpp | 39 ++-------- src/openrct2-ui/windows/TopToolbar.cpp | 86 +++++++++++++---------- src/openrct2/localisation/StringIds.h | 4 ++ 6 files changed, 69 insertions(+), 73 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 96b4f893d8..356f3c2e3c 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3672,6 +3672,10 @@ STR_6480 :Transparency Options STR_6481 :Invisible Vehicles STR_6482 :See-Through Supports STR_6483 :Open transparency options +STR_6484 :See-through vehicles toggle +STR_6485 :See-through trees toggle +STR_6486 :Invisible guests toggle +STR_6487 :Invisible staff toggle ############# # Scenarios # diff --git a/src/openrct2-ui/input/ShortcutIds.h b/src/openrct2-ui/input/ShortcutIds.h index eca4834a53..6f7693823a 100644 --- a/src/openrct2-ui/input/ShortcutIds.h +++ b/src/openrct2-ui/input/ShortcutIds.h @@ -75,13 +75,16 @@ namespace OpenRCT2::Ui::ShortcutId constexpr std::string_view ViewToggleBaseLand = "view.toggle.hide_base_land"; constexpr std::string_view ViewToggleVerticalLand = "view.toggle.hide_vertical_land"; constexpr std::string_view ViewToggleRides = "view.toggle.transparent_rides"; + constexpr std::string_view ViewToggleVehicles = "view.toggle.transparent_vehicles"; + constexpr std::string_view ViewToggleTrees = "view.toggle.transparent_trees"; constexpr std::string_view ViewToggleScenery = "view.toggle.transparent_scenery"; + constexpr std::string_view ViewToggleFootpaths = "view.toggle.transparent_footpaths"; constexpr std::string_view ViewToggleSupports = "view.toggle.hide_supports"; - constexpr std::string_view ViewTogglePeeps = "view.toggle.hide_peeps"; + constexpr std::string_view ViewToggleGuests = "view.toggle.hide_guests"; + constexpr std::string_view ViewToggleStaff = "view.toggle.hide_staff"; constexpr std::string_view ViewToggleLandHeightMarkers = "view.toggle.show_land_height"; constexpr std::string_view ViewToggleTrackHeightMarkers = "view.toggle.show_track_height"; constexpr std::string_view ViewToggleFootpathHeightMarkers = "view.toggle.show_footpath_height"; - constexpr std::string_view ViewToggleFootpaths = "view.toggle.transparent_footpaths"; constexpr std::string_view ViewToggleGridlines = "view.toggle.show_gridlines"; constexpr std::string_view ViewToggleCutAway = "view.toggle.toggle_cut_away"; constexpr std::string_view ViewToogleFootpathIssues = "view.toggle.highlight_path_issues"; diff --git a/src/openrct2-ui/input/ShortcutManager.cpp b/src/openrct2-ui/input/ShortcutManager.cpp index 2a3ccbcc81..07dcc15a13 100644 --- a/src/openrct2-ui/input/ShortcutManager.cpp +++ b/src/openrct2-ui/input/ShortcutManager.cpp @@ -370,7 +370,7 @@ std::string_view ShortcutManager::GetLegacyShortcutId(size_t index) ShortcutId::ViewToggleRides, ShortcutId::ViewToggleScenery, ShortcutId::ViewToggleSupports, - ShortcutId::ViewTogglePeeps, + ShortcutId::ViewToggleGuests, ShortcutId::ViewToggleLandHeightMarkers, ShortcutId::ViewToggleTrackHeightMarkers, ShortcutId::ViewToggleFootpathHeightMarkers, diff --git a/src/openrct2-ui/input/Shortcuts.cpp b/src/openrct2-ui/input/Shortcuts.cpp index 0ef55df415..2655ae0098 100644 --- a/src/openrct2-ui/input/Shortcuts.cpp +++ b/src/openrct2-ui/input/Shortcuts.cpp @@ -630,38 +630,6 @@ static void ShortcutToggleConsole() } } -static void ShortcutToggleInvisiblePeeps() -{ - if (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) - return; - - auto w = window_get_main(); - if (w != nullptr) - { - if (w->viewport->flags & VIEWPORT_FLAG_HIDE_GUESTS || w->viewport->flags & VIEWPORT_FLAG_HIDE_STAFF) - w->viewport->flags = w->viewport->flags & ~(VIEWPORT_FLAG_HIDE_GUESTS | VIEWPORT_FLAG_HIDE_STAFF); - else - w->viewport->flags |= (VIEWPORT_FLAG_HIDE_GUESTS | VIEWPORT_FLAG_HIDE_STAFF); - w->Invalidate(); - } -} - -static void ShortcutToggleInvisibleSupports() -{ - if (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) - return; - - auto w = window_get_main(); - if (w != nullptr) - { - if ((w->viewport->flags & VIEWPORT_FLAG_HIDE_SUPPORTS) || (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)) - w->viewport->flags = w->viewport->flags & ~(VIEWPORT_FLAG_HIDE_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); - else - w->viewport->flags |= (VIEWPORT_FLAG_HIDE_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); - w->Invalidate(); - } -} - static void ShortcutConstructionTurnLeft() { if (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) @@ -886,10 +854,13 @@ void ShortcutManager::RegisterDefaultShortcuts() RegisterShortcut(ShortcutId::ViewToggleBaseLand, STR_SHORTCUT_REMOVE_BASE_LAND_TOGGLE, "H", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_BASE); }); RegisterShortcut(ShortcutId::ViewToggleVerticalLand, STR_SHORTCUT_REMOVE_VERTICAL_LAND_TOGGLE, "V", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_VERTICAL); }); RegisterShortcut(ShortcutId::ViewToggleRides, STR_SHORTCUT_SEE_THROUGH_RIDES_TOGGLE, "3", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_RIDES); }); + RegisterShortcut(ShortcutId::ViewToggleVehicles, STR_SHORTCUT_SEE_THROUGH_VEHICLES_TOGGLE, []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_VEHICLES); }); + RegisterShortcut(ShortcutId::ViewToggleTrees, STR_SHORTCUT_SEE_THROUGH_TREES_TOGGLE, []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_TREES); }); RegisterShortcut(ShortcutId::ViewToggleScenery, STR_SHORTCUT_SEE_THROUGH_SCENERY_TOGGLE, "4", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_SCENERY); }); RegisterShortcut(ShortcutId::ViewToggleFootpaths, STR_SHORTCUT_SEE_THROUGH_PATHS_TOGGLE, []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_PATHS); }); - RegisterShortcut(ShortcutId::ViewToggleSupports, STR_SHORTCUT_INVISIBLE_SUPPORTS_TOGGLE, "5", []() { ShortcutToggleInvisibleSupports(); }); - RegisterShortcut(ShortcutId::ViewTogglePeeps, STR_SHORTCUT_INVISIBLE_PEOPLE_TOGGLE, "6", []() { ShortcutToggleInvisiblePeeps(); }); + RegisterShortcut(ShortcutId::ViewToggleSupports, STR_SHORTCUT_INVISIBLE_SUPPORTS_TOGGLE, "5", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_SUPPORTS); }); + RegisterShortcut(ShortcutId::ViewToggleGuests, STR_SHORTCUT_INVISIBLE_GUESTS_TOGGLE, "6", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_GUESTS); }); + RegisterShortcut(ShortcutId::ViewToggleStaff, STR_SHORTCUT_INVISIBLE_STAFF_TOGGLE, []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_STAFF); }); RegisterShortcut(ShortcutId::ViewToggleLandHeightMarkers, STR_SHORTCUT_HEIGHT_MARKS_ON_LAND_TOGGLE, "8", []() { ToggleViewFlag(VIEWPORT_FLAG_LAND_HEIGHTS); }); RegisterShortcut(ShortcutId::ViewToggleTrackHeightMarkers, STR_SHORTCUT_HEIGHT_MARKS_ON_RIDE_TRACKS_TOGGLE, "9", []() { ToggleViewFlag(VIEWPORT_FLAG_TRACK_HEIGHTS); }); RegisterShortcut(ShortcutId::ViewToggleFootpathHeightMarkers, STR_SHORTCUT_HEIGHT_MARKS_ON_PATHS_TOGGLE, "0", []() { ToggleViewFlag(VIEWPORT_FLAG_PATH_HEIGHTS); }); diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index fd153d0b1d..b416783f1d 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -136,20 +136,23 @@ enum TopToolbarViewMenuDdidx DDIDX_HIDE_BASE = 2, DDIDX_HIDE_VERTICAL = 3, // separator - DDIDX_SEETHROUGH_RIDES = 5, - DDIDX_SEETHROUGH_SCENERY = 6, - DDIDX_SEETHROUGH_PATHS = 7, - DDIDX_INVISIBLE_SUPPORTS = 8, - DDIDX_INVISIBLE_PEEPS = 9, + DDIDX_HIDE_RIDES = 5, + DDIDX_HIDE_VEHICLES = 6, + DDIDX_HIDE_TREES = 7, + DDIDX_HIDE_SCENERY = 8, + DDIDX_HIDE_PATHS = 9, + DDIDX_HIDE_SUPPORTS = 10, + DDIDX_HIDE_GUESTS = 11, + DDIDX_HIDE_STAFF = 12, // separator - DDIDX_LAND_HEIGHTS = 11, - DDIDX_TRACK_HEIGHTS = 12, - DDIDX_PATH_HEIGHTS = 13, + DDIDX_LAND_HEIGHTS = 14, + DDIDX_TRACK_HEIGHTS = 15, + DDIDX_PATH_HEIGHTS = 16, // separator - DDIDX_VIEW_CLIPPING = 15, - DDIDX_HIGHLIGHT_PATH_ISSUES = 16, + DDIDX_VIEW_CLIPPING = 18, + DDIDX_HIGHLIGHT_PATH_ISSUES = 19, // separator - DDIDX_TRANSPARENCY = 18, + DDIDX_TRANSPARENCY = 21, TOP_TOOLBAR_VIEW_MENU_COUNT, }; @@ -3625,11 +3628,14 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) ToggleOption(DDIDX_HIDE_BASE, STR_REMOVE_BASE_LAND), ToggleOption(DDIDX_HIDE_VERTICAL, STR_REMOVE_VERTICAL_FACES), Separator(), - ToggleOption(DDIDX_SEETHROUGH_RIDES, STR_SEE_THROUGH_RIDES), - ToggleOption(DDIDX_SEETHROUGH_SCENERY, STR_SEE_THROUGH_SCENERY), - ToggleOption(DDIDX_SEETHROUGH_PATHS, STR_SEE_THROUGH_PATHS), - ToggleOption(DDIDX_INVISIBLE_SUPPORTS, STR_INVISIBLE_SUPPORTS), - ToggleOption(DDIDX_INVISIBLE_PEEPS, STR_INVISIBLE_PEOPLE), + ToggleOption(DDIDX_HIDE_RIDES, STR_SEE_THROUGH_RIDES), + ToggleOption(DDIDX_HIDE_VEHICLES, STR_SEE_THROUGH_VEHICLES), + ToggleOption(DDIDX_HIDE_TREES, STR_SEE_THROUGH_TREES), + ToggleOption(DDIDX_HIDE_SCENERY, STR_SEE_THROUGH_SCENERY), + ToggleOption(DDIDX_HIDE_PATHS, STR_SEE_THROUGH_PATHS), + ToggleOption(DDIDX_HIDE_SUPPORTS, STR_SEE_THROUGH_SUPPORTS), + ToggleOption(DDIDX_HIDE_GUESTS, STR_INVISIBLE_GUESTS), + ToggleOption(DDIDX_HIDE_STAFF, STR_INVISIBLE_STAFF), Separator(), ToggleOption(DDIDX_LAND_HEIGHTS, STR_HEIGHT_MARKS_ON_LAND), ToggleOption(DDIDX_TRACK_HEIGHTS, STR_HEIGHT_MARKS_ON_RIDE_TRACKS), @@ -3660,15 +3666,21 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) if (mainViewport->flags & VIEWPORT_FLAG_HIDE_VERTICAL) Dropdown::SetChecked(DDIDX_HIDE_VERTICAL, true); if (mainViewport->flags & VIEWPORT_FLAG_HIDE_RIDES) - Dropdown::SetChecked(DDIDX_SEETHROUGH_RIDES, true); + Dropdown::SetChecked(DDIDX_HIDE_RIDES, true); + if (mainViewport->flags & VIEWPORT_FLAG_HIDE_VEHICLES) + Dropdown::SetChecked(DDIDX_HIDE_VEHICLES, true); + if (mainViewport->flags & VIEWPORT_FLAG_HIDE_TREES) + Dropdown::SetChecked(DDIDX_HIDE_TREES, true); if (mainViewport->flags & VIEWPORT_FLAG_HIDE_SCENERY) - Dropdown::SetChecked(DDIDX_SEETHROUGH_SCENERY, true); + Dropdown::SetChecked(DDIDX_HIDE_SCENERY, true); if (mainViewport->flags & VIEWPORT_FLAG_HIDE_PATHS) - Dropdown::SetChecked(DDIDX_SEETHROUGH_PATHS, true); + Dropdown::SetChecked(DDIDX_HIDE_PATHS, true); if (mainViewport->flags & VIEWPORT_FLAG_HIDE_SUPPORTS) - Dropdown::SetChecked(DDIDX_INVISIBLE_SUPPORTS, true); - if (mainViewport->flags & VIEWPORT_FLAG_HIDE_GUESTS || mainViewport->flags & VIEWPORT_FLAG_HIDE_STAFF) - Dropdown::SetChecked(DDIDX_INVISIBLE_PEEPS, true); + Dropdown::SetChecked(DDIDX_HIDE_SUPPORTS, true); + if (mainViewport->flags & VIEWPORT_FLAG_HIDE_GUESTS) + Dropdown::SetChecked(DDIDX_HIDE_GUESTS, true); + if (mainViewport->flags & VIEWPORT_FLAG_HIDE_STAFF) + Dropdown::SetChecked(DDIDX_HIDE_STAFF, true); if (mainViewport->flags & VIEWPORT_FLAG_LAND_HEIGHTS) Dropdown::SetChecked(DDIDX_LAND_HEIGHTS, true); if (mainViewport->flags & VIEWPORT_FLAG_TRACK_HEIGHTS) @@ -3713,27 +3725,29 @@ static void TopToolbarViewMenuDropdown(int16_t dropdownIndex) case DDIDX_HIDE_VERTICAL: w->viewport->flags ^= VIEWPORT_FLAG_HIDE_VERTICAL; break; - case DDIDX_SEETHROUGH_RIDES: + case DDIDX_HIDE_RIDES: w->viewport->flags ^= VIEWPORT_FLAG_HIDE_RIDES; break; - case DDIDX_SEETHROUGH_SCENERY: + case DDIDX_HIDE_VEHICLES: + w->viewport->flags ^= VIEWPORT_FLAG_HIDE_VEHICLES; + break; + case DDIDX_HIDE_TREES: + w->viewport->flags ^= VIEWPORT_FLAG_HIDE_TREES; + break; + case DDIDX_HIDE_SCENERY: w->viewport->flags ^= VIEWPORT_FLAG_HIDE_SCENERY; break; - case DDIDX_SEETHROUGH_PATHS: + case DDIDX_HIDE_PATHS: w->viewport->flags ^= VIEWPORT_FLAG_HIDE_PATHS; break; - case DDIDX_INVISIBLE_SUPPORTS: - if (w->viewport->flags & VIEWPORT_FLAG_HIDE_SUPPORTS) - w->viewport->flags = w->viewport->flags - & ~(VIEWPORT_FLAG_HIDE_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); - else - w->viewport->flags |= (VIEWPORT_FLAG_HIDE_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS); + case DDIDX_HIDE_SUPPORTS: + w->viewport->flags ^= VIEWPORT_FLAG_HIDE_SUPPORTS; break; - case DDIDX_INVISIBLE_PEEPS: - if (w->viewport->flags & VIEWPORT_FLAG_HIDE_GUESTS || w->viewport->flags & VIEWPORT_FLAG_HIDE_STAFF) - w->viewport->flags = w->viewport->flags & ~(VIEWPORT_FLAG_HIDE_GUESTS | VIEWPORT_FLAG_HIDE_STAFF); - else - w->viewport->flags |= (VIEWPORT_FLAG_HIDE_GUESTS | VIEWPORT_FLAG_HIDE_STAFF); + case DDIDX_HIDE_GUESTS: + w->viewport->flags ^= VIEWPORT_FLAG_HIDE_GUESTS; + break; + case DDIDX_HIDE_STAFF: + w->viewport->flags ^= VIEWPORT_FLAG_HIDE_STAFF; break; case DDIDX_LAND_HEIGHTS: w->viewport->flags ^= VIEWPORT_FLAG_LAND_HEIGHTS; diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index 292b8cb607..faaaafccb4 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3941,6 +3941,10 @@ enum : uint16_t STR_INVISIBLE_VEHICLES = 6481, STR_SEE_THROUGH_SUPPORTS = 6482, STR_SHORTCUT_OPEN_TRANSPARENCY_OPTIONS = 6483, + STR_SHORTCUT_SEE_THROUGH_VEHICLES_TOGGLE = 6484, + STR_SHORTCUT_SEE_THROUGH_TREES_TOGGLE = 6485, + STR_SHORTCUT_INVISIBLE_GUESTS_TOGGLE = 6486, + STR_SHORTCUT_INVISIBLE_STAFF_TOGGLE = 6487, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings From fea101289c032b900f44d56c070381341ca53bf0 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 6 Mar 2022 17:33:02 +0000 Subject: [PATCH 23/27] 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; From 3b9edbd09bca0c54a3231ec818a926399ee8e1df Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 14 Mar 2022 22:03:37 +0000 Subject: [PATCH 24/27] Keep old flag values to avoid breaking plugins --- src/openrct2/interface/Viewport.h | 44 ++++++++++++++++--------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/src/openrct2/interface/Viewport.h b/src/openrct2/interface/Viewport.h index afdebef75c..d6c1da140f 100644 --- a/src/openrct2/interface/Viewport.h +++ b/src/openrct2/interface/Viewport.h @@ -27,32 +27,34 @@ struct Guest; struct Staff; struct paint_entry; +// Flags must currenly retain their values to avoid breaking plugins. +// Values can be changed when plugins move to using named constants. enum { - VIEWPORT_FLAG_GRIDLINES = (1 << 0), - VIEWPORT_FLAG_UNDERGROUND_INSIDE = (1 << 1), - VIEWPORT_FLAG_HIDE_BASE = (1 << 2), - VIEWPORT_FLAG_HIDE_VERTICAL = (1 << 3), + VIEWPORT_FLAG_GRIDLINES = (1 << 7), + VIEWPORT_FLAG_UNDERGROUND_INSIDE = (1 << 0), + VIEWPORT_FLAG_HIDE_BASE = (1 << 12), + VIEWPORT_FLAG_HIDE_VERTICAL = (1 << 13), - VIEWPORT_FLAG_SOUND_ON = (1 << 4), - VIEWPORT_FLAG_LAND_OWNERSHIP = (1 << 5), - VIEWPORT_FLAG_CONSTRUCTION_RIGHTS = (1 << 6), - VIEWPORT_FLAG_HIDE_ENTITIES = (1 << 7), - VIEWPORT_FLAG_CLIP_VIEW = (1 << 8), - VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES = (1 << 9), - VIEWPORT_FLAG_TRANSPARENT_BACKGROUND = (1 << 10), + VIEWPORT_FLAG_SOUND_ON = (1 << 10), + VIEWPORT_FLAG_LAND_OWNERSHIP = (1 << 8), + VIEWPORT_FLAG_CONSTRUCTION_RIGHTS = (1 << 9), + VIEWPORT_FLAG_HIDE_ENTITIES = (1 << 14), + VIEWPORT_FLAG_CLIP_VIEW = (1 << 17), + VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES = (1 << 18), + VIEWPORT_FLAG_TRANSPARENT_BACKGROUND = (1 << 19), - VIEWPORT_FLAG_LAND_HEIGHTS = (1 << 12), - VIEWPORT_FLAG_TRACK_HEIGHTS = (1 << 13), - VIEWPORT_FLAG_PATH_HEIGHTS = (1 << 14), + VIEWPORT_FLAG_LAND_HEIGHTS = (1 << 4), + VIEWPORT_FLAG_TRACK_HEIGHTS = (1 << 5), + VIEWPORT_FLAG_PATH_HEIGHTS = (1 << 6), - VIEWPORT_FLAG_HIDE_RIDES = (1 << 16), - VIEWPORT_FLAG_HIDE_VEHICLES = (1 << 17), - VIEWPORT_FLAG_HIDE_TREES = (1 << 18), - VIEWPORT_FLAG_HIDE_SCENERY = (1 << 19), - VIEWPORT_FLAG_HIDE_PATHS = (1 << 20), - VIEWPORT_FLAG_HIDE_SUPPORTS = (1 << 21), - VIEWPORT_FLAG_HIDE_GUESTS = (1 << 22), + VIEWPORT_FLAG_HIDE_RIDES = (1 << 1), + VIEWPORT_FLAG_HIDE_VEHICLES = (1 << 20), + VIEWPORT_FLAG_HIDE_TREES = (1 << 21), + VIEWPORT_FLAG_HIDE_SCENERY = (1 << 2), + VIEWPORT_FLAG_HIDE_PATHS = (1 << 16), + VIEWPORT_FLAG_HIDE_SUPPORTS = (1 << 3), + VIEWPORT_FLAG_HIDE_GUESTS = (1 << 11), VIEWPORT_FLAG_HIDE_STAFF = (1 << 23), VIEWPORT_FLAG_INVISIBLE_RIDES = (1 << 24), From 46873dfc7fcba4193dda63c7684cec4c8e5b3925 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 14 Mar 2022 23:07:39 +0000 Subject: [PATCH 25/27] Fix build failures --- src/openrct2-ui/windows/Transparency.cpp | 1 - src/openrct2/interface/Viewport.cpp | 4 ++++ src/openrct2/paint/Supports.cpp | 3 --- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index fbc48655e3..55d3c02c1c 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -219,7 +219,6 @@ private: break; default: return; - break; } if (w->viewport->flags == wflags) diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index 6bc6c36d2e..2a781e1854 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -1395,6 +1395,8 @@ VisibilityKind GetPaintStructVisibility(const paint_struct* ps, uint32_t viewFla return VisibilityKind::Hidden; } break; + default: + break; } } break; @@ -1441,6 +1443,8 @@ VisibilityKind GetPaintStructVisibility(const paint_struct* ps, uint32_t viewFla return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? VisibilityKind::Hidden : VisibilityKind::Partial; } break; + default: + break; } return VisibilityKind::Visible; } diff --git a/src/openrct2/paint/Supports.cpp b/src/openrct2/paint/Supports.cpp index 53e6ce29f4..71b0b41cb7 100644 --- a/src/openrct2/paint/Supports.cpp +++ b/src/openrct2/paint/Supports.cpp @@ -446,9 +446,6 @@ static constexpr const uint16_t word_97B3C4[] = { 0, }; -constexpr uint32_t primaryColour = COLOUR_BRIGHT_YELLOW; -constexpr uint32_t secondaryColour = COLOUR_GREY; -constexpr uint32_t seeThoughFlags = IMAGE_TYPE_TRANSPARENT | (primaryColour << 19) | (secondaryColour << 24); // clang-format on bool wooden_a_supports_paint_setup( From 81a123220bf6ef57b15cf274767e2bd795cc6ddd Mon Sep 17 00:00:00 2001 From: Ted John Date: Thu, 17 Mar 2022 22:52:25 +0000 Subject: [PATCH 26/27] Update images for transparency window --- resources/g2/icons/hide_full.png | Bin 0 -> 210 bytes resources/g2/icons/hide_partial.png | Bin 0 -> 209 bytes resources/g2/icons/hide_scenery.png | Bin 0 -> 469 bytes .../icons/{supports.png => hide_supports.png} | Bin resources/g2/icons/hide_vegetation.png | Bin 0 -> 588 bytes .../{coaster_train.png => hide_vehicles.png} | Bin resources/g2/sprites.json | 24 ++++- src/openrct2-ui/windows/Transparency.cpp | 99 +++++++++--------- src/openrct2/sprites.h | 10 +- 9 files changed, 81 insertions(+), 52 deletions(-) create mode 100644 resources/g2/icons/hide_full.png create mode 100644 resources/g2/icons/hide_partial.png create mode 100644 resources/g2/icons/hide_scenery.png rename resources/g2/icons/{supports.png => hide_supports.png} (100%) create mode 100644 resources/g2/icons/hide_vegetation.png rename resources/g2/icons/{coaster_train.png => hide_vehicles.png} (100%) diff --git a/resources/g2/icons/hide_full.png b/resources/g2/icons/hide_full.png new file mode 100644 index 0000000000000000000000000000000000000000..30ea23476d36a9e00a1234dac198023e941c5836 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3-piujpS2q!^2X+?^QKos)S9^91;WxB_WqV`Fh;Wgx>WleG<`t|Z7W`2YX^3=Uc=zX1811s;*b3=DjS zL74G){)!Z!puMMyV~9k!ZZD${g967Pmw*4COFWCc$xu8;C{_18$1TyUcV8Mep0Z?i wxA5C`sPdSQ@_a#~Nnf7--jjW@Wb<2gcLPT5oxb^NfkrWSy85}Sb4q9e0Co01G5`Po literal 0 HcmV?d00001 diff --git a/resources/g2/icons/hide_partial.png b/resources/g2/icons/hide_partial.png new file mode 100644 index 0000000000000000000000000000000000000000..7f563b1db6f2f87be4db1fa5fffa36fd97d880cc GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3-piujpS2q!^2X+?^QKos)S9^91;WxB_WqV`Fh;Wgx>WleG<`t|Z7W`2YX^3=Uc=zX1811s;*b3=DjS zL74G){)!Z!pq;0SV~9k!X)hxmg8~N=>%afc87^lQyFWO=x^2Q;2A1xN uqnds`QWMzlbl>vaPAQ>E=h+46OW8d|7=>QG;`jzMiNVv=&t;ucLK6Vb3_N-O literal 0 HcmV?d00001 diff --git a/resources/g2/icons/hide_scenery.png b/resources/g2/icons/hide_scenery.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3b8d6619668259c77087897e7d4f43a5606533 GIT binary patch literal 469 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilQ1AIbU%iXoR!>yCer59UUZ}#`^S62th_-hLvPfy=|`0)Gp|1aOZo!{Kt zJbij}aq;~1>)(I=?46u!9~^xB`~SZ_JR*x382Ao@Fyrz36)8Z$cb+beAsWG<6B{QTR^V{y%~fk}NJ_5$_kViX z!IG-uEf$|6#GHd}1$kLMy)9dK`#IN!w+FaYMe6KYCseV|vuC}oYuePsZp`f5bE9yQ z!jv5^zGS|eaCxB%OX|g4Zf!Q)6Ap_hf7g)l%suFL-8W&*WTR+}-$ARZ5{=vYQXc*b zm@z%zns#HMjmQQqff`%cV9|%0uU`BA*wM-D)TP5u4*7<9?7k4ZdeP&@wrvZT%~NUu zze~n%?W$tuxhQz=*rVMQh9^(+$o4tEH1HyL`U4c(^sUzPob!{P^wX>-o*at&6?u!{x1m zwdZfozyE!IbiOmcJ%hZtw6iw5ezNuaV&nc~b$x$%>v(nLU~T{Q_~hB;+1c{;!NJMq z(#HA>?$Qj)lb!XQoq-lz;k)_-NU4+r`33(c3>YGGczJ>9ISV`@iy0XB4ude`@%$Aj zK#y5^x;Tbt1glQGS;nl$5r3 z?#P6lSE8ct%wJXTu*Sms&!MpG5`I@(rWiLbi!nNv`1$LS$sO~yWa(Mt-)4R{DdLN# zcyl$!j1#UAlhZED*}Pu)&DH#1VNTV+=__Q;h{ee}ssyG96&4j(ZhD(PLHG(wl%nyZ z4M*8^r{A0Cdh+1^2ZxW@z4`SnJU%wzJxjmtOt&4scIIt23-^zedD?S4>Px`wS)c8q zr@!lPGN_6Mdgg(wAp~CBYPEEO*^Wgk339;j>SFN_3JC*iPm*+Q+ w*#3QQpI?vdm=VA}tM{Au;-mX_)ck literal 0 HcmV?d00001 diff --git a/resources/g2/icons/coaster_train.png b/resources/g2/icons/hide_vehicles.png similarity index 100% rename from resources/g2/icons/coaster_train.png rename to resources/g2/icons/hide_vehicles.png diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 5e279c603f..7c472f3bac 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -504,10 +504,30 @@ "y_offset": 1 }, { - "path": "icons/coaster_train.png" + "path": "icons/hide_vegetation.png", + "x_offset": 1, + "y_offset": 1 }, { - "path": "icons/supports.png" + "path": "icons/hide_scenery.png", + "x_offset": 1, + "y_offset": 1 + }, + { + "path": "icons/hide_vehicles.png" + }, + { + "path": "icons/hide_supports.png" + }, + { + "path": "icons/hide_partial.png", + "x_offset": 4, + "y_offset": 2 + }, + { + "path": "icons/hide_full.png", + "x_offset": 4, + "y_offset": 2 }, { "path": "font/latin/ae-uc-small.png", diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index 55d3c02c1c..7299bf56be 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -36,19 +36,19 @@ enum WINDOW_TRANSPARENCY_WIDGET_IDX WIDX_TITLE, WIDX_CLOSE, - WIDX_SEE_THROUGH_RIDES, - WIDX_SEE_THROUGH_VEHICLES, - WIDX_SEE_THROUGH_SCENERY, - WIDX_SEE_THROUGH_TREES, - WIDX_SEE_THROUGH_PATHS, - WIDX_SEE_THROUGH_SUPPORTS, - WIDX_INVISIBLE_GUESTS, - WIDX_INVISIBLE_STAFF, + WIDX_HIDE_TREES, + WIDX_HIDE_SCENERY, + WIDX_HIDE_PATHS, + WIDX_HIDE_RIDES, + WIDX_HIDE_VEHICLES, + WIDX_HIDE_SUPPORTS, + WIDX_HIDE_GUESTS, + WIDX_HIDE_STAFF, + WIDX_INVISIBLE_TREES, + WIDX_INVISIBLE_SCENERY, + WIDX_INVISIBLE_PATHS, WIDX_INVISIBLE_RIDES, WIDX_INVISIBLE_VEHICLES, - WIDX_INVISIBLE_SCENERY, - WIDX_INVISIBLE_TREES, - WIDX_INVISIBLE_PATHS, WIDX_INVISIBLE_SUPPORTS, }; @@ -58,29 +58,29 @@ static constexpr const rct_string_id WINDOW_TITLE = STR_TRANSPARENCY_OPTIONS_TIT static constexpr const int32_t WW = 204; static constexpr const int32_t WH = 57; -static constexpr ScreenSize ICON_BUTTON = {24, 24}; -static constexpr ScreenSize FLAT_BUTTON = {24, 12}; +static constexpr ScreenSize HIDE_SIZE = {24, 24}; +static constexpr ScreenSize INVISIBLE_SIZE = {24, 12}; #pragma endregion static rct_widget window_transparency_main_widgets[] = { WINDOW_SHIM(WINDOW_TITLE, WW, WH), - MakeWidget({ 77, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_RIDE, STR_SEE_THROUGH_RIDES), - MakeWidget({102, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_COASTER_TRAIN, STR_SEE_THROUGH_VEHICLES), - MakeWidget({ 27, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_LARGE_SCENERY, STR_SEE_THROUGH_SCENERY), - MakeWidget({ 2, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_TREES, STR_SEE_THROUGH_TREES), - MakeWidget({ 52, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_FOOTPATH, STR_SEE_THROUGH_PATHS), - MakeWidget({127, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_G2_BUTTON_SUPPORTS, STR_SEE_THROUGH_SUPPORTS), - MakeWidget({152, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, SPR_GUESTS, STR_INVISIBLE_GUESTS), - MakeWidget({177, 17}, ICON_BUTTON, WindowWidgetType::ImgBtn, WindowColour::Secondary, 0xFFFFFFFF, STR_INVISIBLE_STAFF), + MakeWidget({ 2, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_G2_BUTTON_HIDE_VEGETATION, STR_SEE_THROUGH_TREES), + MakeWidget({ 27, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_G2_BUTTON_HIDE_SCENERY, STR_SEE_THROUGH_SCENERY), + MakeWidget({ 52, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_G2_BUTTON_FOOTPATH, STR_SEE_THROUGH_PATHS), + MakeWidget({ 77, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_RIDE, STR_SEE_THROUGH_RIDES), + MakeWidget({102, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_G2_BUTTON_HIDE_VEHICLES, STR_SEE_THROUGH_VEHICLES), + MakeWidget({127, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_G2_BUTTON_HIDE_SUPPORTS, STR_SEE_THROUGH_SUPPORTS), + MakeWidget({152, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_GUESTS, STR_INVISIBLE_GUESTS), + MakeWidget({177, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, 0xFFFFFFFF, STR_INVISIBLE_STAFF), - MakeWidget({ 77, 42}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_RIDES), - MakeWidget({102, 42}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_VEHICLES), - MakeWidget({ 27, 42}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_SCENERY), - MakeWidget({ 2, 42}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_TREES), - MakeWidget({ 52, 42}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_PATHS), - MakeWidget({127, 42}, FLAT_BUTTON, WindowWidgetType::Button, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_SUPPORTS), + MakeWidget({ 2, 42}, INVISIBLE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_TREES), + MakeWidget({ 27, 42}, INVISIBLE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_SCENERY), + MakeWidget({ 52, 42}, INVISIBLE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_PATHS), + MakeWidget({ 77, 42}, INVISIBLE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_RIDES), + MakeWidget({102, 42}, INVISIBLE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_VEHICLES), + MakeWidget({127, 42}, INVISIBLE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_SUPPORTS), { WIDGETS_END }, }; @@ -124,27 +124,32 @@ public: if (w != nullptr) wflags = w->viewport->flags; - SetWidgetPressed(WIDX_SEE_THROUGH_RIDES, (wflags & VIEWPORT_FLAG_HIDE_RIDES)); - SetWidgetPressed(WIDX_SEE_THROUGH_VEHICLES, (wflags & VIEWPORT_FLAG_HIDE_VEHICLES)); - SetWidgetPressed(WIDX_SEE_THROUGH_SCENERY, (wflags & VIEWPORT_FLAG_HIDE_SCENERY)); - SetWidgetPressed(WIDX_SEE_THROUGH_TREES, (wflags & VIEWPORT_FLAG_HIDE_TREES)); - SetWidgetPressed(WIDX_SEE_THROUGH_PATHS, (wflags & VIEWPORT_FLAG_HIDE_PATHS)); - SetWidgetPressed(WIDX_SEE_THROUGH_SUPPORTS, (wflags & VIEWPORT_FLAG_HIDE_SUPPORTS)); + SetWidgetPressed(WIDX_HIDE_TREES, (wflags & VIEWPORT_FLAG_HIDE_TREES)); + SetWidgetPressed(WIDX_HIDE_SCENERY, (wflags & VIEWPORT_FLAG_HIDE_SCENERY)); + SetWidgetPressed(WIDX_HIDE_PATHS, (wflags & VIEWPORT_FLAG_HIDE_PATHS)); + SetWidgetPressed(WIDX_HIDE_RIDES, (wflags & VIEWPORT_FLAG_HIDE_RIDES)); + SetWidgetPressed(WIDX_HIDE_VEHICLES, (wflags & VIEWPORT_FLAG_HIDE_VEHICLES)); + SetWidgetPressed(WIDX_HIDE_SUPPORTS, (wflags & VIEWPORT_FLAG_HIDE_SUPPORTS)); + SetWidgetPressed(WIDX_HIDE_GUESTS, (wflags & VIEWPORT_FLAG_HIDE_GUESTS)); + SetWidgetPressed(WIDX_HIDE_STAFF, (wflags & VIEWPORT_FLAG_HIDE_STAFF)); + SetWidgetPressed(WIDX_INVISIBLE_TREES, (wflags & VIEWPORT_FLAG_INVISIBLE_TREES)); + SetWidgetPressed(WIDX_INVISIBLE_SCENERY, (wflags & VIEWPORT_FLAG_INVISIBLE_SCENERY)); + SetWidgetPressed(WIDX_INVISIBLE_PATHS, (wflags & VIEWPORT_FLAG_INVISIBLE_PATHS)); 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_HIDE_GUESTS)); - SetWidgetPressed(WIDX_INVISIBLE_STAFF, (wflags & VIEWPORT_FLAG_HIDE_STAFF)); + + for (rct_widgetindex i = WIDX_INVISIBLE_TREES; i <= WIDX_INVISIBLE_SUPPORTS; i++) + { + widgets[i].image = IsWidgetPressed(i) ? SPR_G2_BUTTON_HIDE_FULL : SPR_G2_BUTTON_HIDE_PARTIAL; + } } void OnDraw(rct_drawpixelinfo& dpi) override { DrawWidgets(dpi); // Locate mechanic button image - const auto& widget = widgets[WIDX_INVISIBLE_STAFF]; + const auto& widget = widgets[WIDX_HIDE_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); @@ -163,22 +168,22 @@ private: switch (widgetIndex) { - case WIDX_SEE_THROUGH_RIDES: + case WIDX_HIDE_RIDES: wflags ^= VIEWPORT_FLAG_HIDE_RIDES; break; - case WIDX_SEE_THROUGH_VEHICLES: + case WIDX_HIDE_VEHICLES: wflags ^= VIEWPORT_FLAG_HIDE_VEHICLES; break; - case WIDX_SEE_THROUGH_SCENERY: + case WIDX_HIDE_SCENERY: wflags ^= VIEWPORT_FLAG_HIDE_SCENERY; break; - case WIDX_SEE_THROUGH_TREES: + case WIDX_HIDE_TREES: wflags ^= VIEWPORT_FLAG_HIDE_TREES; break; - case WIDX_SEE_THROUGH_PATHS: + case WIDX_HIDE_PATHS: wflags ^= VIEWPORT_FLAG_HIDE_PATHS; break; - case WIDX_SEE_THROUGH_SUPPORTS: + case WIDX_HIDE_SUPPORTS: wflags ^= VIEWPORT_FLAG_HIDE_SUPPORTS; break; case WIDX_INVISIBLE_RIDES: @@ -211,10 +216,10 @@ private: gConfigGeneral.invisible_supports = wflags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS; config_save_default(); break; - case WIDX_INVISIBLE_GUESTS: + case WIDX_HIDE_GUESTS: wflags ^= VIEWPORT_FLAG_HIDE_GUESTS; break; - case WIDX_INVISIBLE_STAFF: + case WIDX_HIDE_STAFF: wflags ^= VIEWPORT_FLAG_HIDE_STAFF; break; default: diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index 924c236788..e205b6e6b6 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -888,10 +888,14 @@ enum SPR_G2_RIDE_STATION_TAB = SPR_G2_BEGIN + 141, SPR_G2_TERRAIN_EDGE_TAB = SPR_G2_BEGIN + 142, - SPR_G2_BUTTON_COASTER_TRAIN = SPR_G2_BEGIN + 143, - SPR_G2_BUTTON_SUPPORTS = SPR_G2_BEGIN + 144, + SPR_G2_BUTTON_HIDE_VEGETATION = SPR_G2_BEGIN + 143, + SPR_G2_BUTTON_HIDE_SCENERY = SPR_G2_BEGIN + 144, + SPR_G2_BUTTON_HIDE_VEHICLES = SPR_G2_BEGIN + 145, + SPR_G2_BUTTON_HIDE_SUPPORTS = SPR_G2_BEGIN + 146, + SPR_G2_BUTTON_HIDE_PARTIAL = SPR_G2_BEGIN + 147, + SPR_G2_BUTTON_HIDE_FULL = SPR_G2_BEGIN + 148, - SPR_G2_CHAR_BEGIN = SPR_G2_BEGIN + 145, + SPR_G2_CHAR_BEGIN = SPR_G2_BEGIN + 149, SPR_G2_AE_UPPER = SPR_G2_CHAR_BEGIN, SPR_G2_AE_LOWER = SPR_G2_CHAR_BEGIN + 1, From 884ef6b8ac3ba115fc02376053afd685ca63ae0d Mon Sep 17 00:00:00 2001 From: Ted John Date: Thu, 17 Mar 2022 23:26:36 +0000 Subject: [PATCH 27/27] Change transparent trees to all vegetation --- data/language/en-GB.txt | 32 ++++----- src/openrct2-ui/input/ShortcutIds.h | 2 +- src/openrct2-ui/input/Shortcuts.cpp | 6 +- src/openrct2-ui/windows/Main.cpp | 2 +- src/openrct2-ui/windows/TopToolbar.cpp | 16 ++--- src/openrct2-ui/windows/Transparency.cpp | 28 ++++---- src/openrct2/interface/Viewport.cpp | 90 +++++++++++++++++------- src/openrct2/interface/Viewport.h | 4 +- src/openrct2/localisation/StringIds.h | 32 ++++----- 9 files changed, 124 insertions(+), 88 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 356f3c2e3c..5cf1bf62d1 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3659,23 +3659,23 @@ STR_6467 :Nausea: {COMMA2DP32} STR_6468 :Not Yet Known STR_6469 :Adjust smaller area of patrol area STR_6470 :Adjust larger area of patrol area -STR_6471 :See-Through Vehicles -STR_6472 :See-Through Trees -STR_6473 :Invisible Rides -STR_6474 :Invisible Scenery -STR_6475 :Invisible Trees -STR_6476 :Invisible Paths -STR_6477 :Invisible Guests -STR_6478 :Invisible Staff -STR_6479 :Transparency Options -STR_6480 :Transparency Options -STR_6481 :Invisible Vehicles -STR_6482 :See-Through Supports +STR_6471 :See-Through Vegetation +STR_6472 :See-Through Vehicles +STR_6473 :See-Through Supports +STR_6474 :See-Through Guests +STR_6475 :See-Through Staff +STR_6476 :Invisible Vegetation +STR_6477 :Invisible Scenery +STR_6478 :Invisible Paths +STR_6479 :Invisible Rides +STR_6480 :Invisible Vehicles +STR_6481 :Transparency Options +STR_6482 :Transparency Options STR_6483 :Open transparency options -STR_6484 :See-through vehicles toggle -STR_6485 :See-through trees toggle -STR_6486 :Invisible guests toggle -STR_6487 :Invisible staff toggle +STR_6484 :See-Through vegetation toggle +STR_6485 :See-Through vehicles toggle +STR_6486 :See-Through guests toggle +STR_6487 :See-Through staff toggle ############# # Scenarios # diff --git a/src/openrct2-ui/input/ShortcutIds.h b/src/openrct2-ui/input/ShortcutIds.h index 6f7693823a..e562489b0d 100644 --- a/src/openrct2-ui/input/ShortcutIds.h +++ b/src/openrct2-ui/input/ShortcutIds.h @@ -76,7 +76,7 @@ namespace OpenRCT2::Ui::ShortcutId constexpr std::string_view ViewToggleVerticalLand = "view.toggle.hide_vertical_land"; constexpr std::string_view ViewToggleRides = "view.toggle.transparent_rides"; constexpr std::string_view ViewToggleVehicles = "view.toggle.transparent_vehicles"; - constexpr std::string_view ViewToggleTrees = "view.toggle.transparent_trees"; + constexpr std::string_view ViewToggleVegetation = "view.toggle.transparent_vegetation"; constexpr std::string_view ViewToggleScenery = "view.toggle.transparent_scenery"; constexpr std::string_view ViewToggleFootpaths = "view.toggle.transparent_footpaths"; constexpr std::string_view ViewToggleSupports = "view.toggle.hide_supports"; diff --git a/src/openrct2-ui/input/Shortcuts.cpp b/src/openrct2-ui/input/Shortcuts.cpp index 2655ae0098..0b8c370cd3 100644 --- a/src/openrct2-ui/input/Shortcuts.cpp +++ b/src/openrct2-ui/input/Shortcuts.cpp @@ -855,12 +855,12 @@ void ShortcutManager::RegisterDefaultShortcuts() RegisterShortcut(ShortcutId::ViewToggleVerticalLand, STR_SHORTCUT_REMOVE_VERTICAL_LAND_TOGGLE, "V", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_VERTICAL); }); RegisterShortcut(ShortcutId::ViewToggleRides, STR_SHORTCUT_SEE_THROUGH_RIDES_TOGGLE, "3", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_RIDES); }); RegisterShortcut(ShortcutId::ViewToggleVehicles, STR_SHORTCUT_SEE_THROUGH_VEHICLES_TOGGLE, []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_VEHICLES); }); - RegisterShortcut(ShortcutId::ViewToggleTrees, STR_SHORTCUT_SEE_THROUGH_TREES_TOGGLE, []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_TREES); }); + RegisterShortcut(ShortcutId::ViewToggleVegetation, STR_SHORTCUT_SEE_THROUGH_VEGETATION_TOGGLE, []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_VEGETATION); }); RegisterShortcut(ShortcutId::ViewToggleScenery, STR_SHORTCUT_SEE_THROUGH_SCENERY_TOGGLE, "4", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_SCENERY); }); RegisterShortcut(ShortcutId::ViewToggleFootpaths, STR_SHORTCUT_SEE_THROUGH_PATHS_TOGGLE, []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_PATHS); }); RegisterShortcut(ShortcutId::ViewToggleSupports, STR_SHORTCUT_INVISIBLE_SUPPORTS_TOGGLE, "5", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_SUPPORTS); }); - RegisterShortcut(ShortcutId::ViewToggleGuests, STR_SHORTCUT_INVISIBLE_GUESTS_TOGGLE, "6", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_GUESTS); }); - RegisterShortcut(ShortcutId::ViewToggleStaff, STR_SHORTCUT_INVISIBLE_STAFF_TOGGLE, []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_STAFF); }); + RegisterShortcut(ShortcutId::ViewToggleGuests, STR_SHORTCUT_SEE_THROUGH_GUESTS_TOGGLE, "6", []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_GUESTS); }); + RegisterShortcut(ShortcutId::ViewToggleStaff, STR_SHORTCUT_SEE_THROUGH_STAFF_TOGGLE, []() { ToggleViewFlag(VIEWPORT_FLAG_HIDE_STAFF); }); RegisterShortcut(ShortcutId::ViewToggleLandHeightMarkers, STR_SHORTCUT_HEIGHT_MARKS_ON_LAND_TOGGLE, "8", []() { ToggleViewFlag(VIEWPORT_FLAG_LAND_HEIGHTS); }); RegisterShortcut(ShortcutId::ViewToggleTrackHeightMarkers, STR_SHORTCUT_HEIGHT_MARKS_ON_RIDE_TRACKS_TOGGLE, "9", []() { ToggleViewFlag(VIEWPORT_FLAG_TRACK_HEIGHTS); }); RegisterShortcut(ShortcutId::ViewToggleFootpathHeightMarkers, STR_SHORTCUT_HEIGHT_MARKS_ON_PATHS_TOGGLE, "0", []() { ToggleViewFlag(VIEWPORT_FLAG_PATH_HEIGHTS); }); diff --git a/src/openrct2-ui/windows/Main.cpp b/src/openrct2-ui/windows/Main.cpp index 8b6be0cee5..70208361e5 100644 --- a/src/openrct2-ui/windows/Main.cpp +++ b/src/openrct2-ui/windows/Main.cpp @@ -65,7 +65,7 @@ static void WindowMainSetViewportFlags(rct_viewport& viewport) if (gConfigGeneral.invisible_vehicles) viewport.flags |= VIEWPORT_FLAG_INVISIBLE_VEHICLES; if (gConfigGeneral.invisible_trees) - viewport.flags |= VIEWPORT_FLAG_INVISIBLE_TREES; + viewport.flags |= VIEWPORT_FLAG_INVISIBLE_VEGETATION; if (gConfigGeneral.invisible_scenery) viewport.flags |= VIEWPORT_FLAG_INVISIBLE_SCENERY; if (gConfigGeneral.invisible_paths) diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index b416783f1d..a69411443e 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -138,7 +138,7 @@ enum TopToolbarViewMenuDdidx // separator DDIDX_HIDE_RIDES = 5, DDIDX_HIDE_VEHICLES = 6, - DDIDX_HIDE_TREES = 7, + DDIDX_HIDE_VEGETATION = 7, DDIDX_HIDE_SCENERY = 8, DDIDX_HIDE_PATHS = 9, DDIDX_HIDE_SUPPORTS = 10, @@ -3630,12 +3630,12 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) Separator(), ToggleOption(DDIDX_HIDE_RIDES, STR_SEE_THROUGH_RIDES), ToggleOption(DDIDX_HIDE_VEHICLES, STR_SEE_THROUGH_VEHICLES), - ToggleOption(DDIDX_HIDE_TREES, STR_SEE_THROUGH_TREES), + ToggleOption(DDIDX_HIDE_VEGETATION, STR_SEE_THROUGH_VEGETATION), ToggleOption(DDIDX_HIDE_SCENERY, STR_SEE_THROUGH_SCENERY), ToggleOption(DDIDX_HIDE_PATHS, STR_SEE_THROUGH_PATHS), ToggleOption(DDIDX_HIDE_SUPPORTS, STR_SEE_THROUGH_SUPPORTS), - ToggleOption(DDIDX_HIDE_GUESTS, STR_INVISIBLE_GUESTS), - ToggleOption(DDIDX_HIDE_STAFF, STR_INVISIBLE_STAFF), + ToggleOption(DDIDX_HIDE_GUESTS, STR_SEE_THROUGH_GUESTS), + ToggleOption(DDIDX_HIDE_STAFF, STR_SEE_THROUGH_STAFF), Separator(), ToggleOption(DDIDX_LAND_HEIGHTS, STR_HEIGHT_MARKS_ON_LAND), ToggleOption(DDIDX_TRACK_HEIGHTS, STR_HEIGHT_MARKS_ON_RIDE_TRACKS), @@ -3669,8 +3669,8 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) Dropdown::SetChecked(DDIDX_HIDE_RIDES, true); if (mainViewport->flags & VIEWPORT_FLAG_HIDE_VEHICLES) Dropdown::SetChecked(DDIDX_HIDE_VEHICLES, true); - if (mainViewport->flags & VIEWPORT_FLAG_HIDE_TREES) - Dropdown::SetChecked(DDIDX_HIDE_TREES, true); + if (mainViewport->flags & VIEWPORT_FLAG_HIDE_VEGETATION) + Dropdown::SetChecked(DDIDX_HIDE_VEGETATION, true); if (mainViewport->flags & VIEWPORT_FLAG_HIDE_SCENERY) Dropdown::SetChecked(DDIDX_HIDE_SCENERY, true); if (mainViewport->flags & VIEWPORT_FLAG_HIDE_PATHS) @@ -3731,8 +3731,8 @@ static void TopToolbarViewMenuDropdown(int16_t dropdownIndex) case DDIDX_HIDE_VEHICLES: w->viewport->flags ^= VIEWPORT_FLAG_HIDE_VEHICLES; break; - case DDIDX_HIDE_TREES: - w->viewport->flags ^= VIEWPORT_FLAG_HIDE_TREES; + case DDIDX_HIDE_VEGETATION: + w->viewport->flags ^= VIEWPORT_FLAG_HIDE_VEGETATION; break; case DDIDX_HIDE_SCENERY: w->viewport->flags ^= VIEWPORT_FLAG_HIDE_SCENERY; diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index 7299bf56be..7a324b472b 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -36,7 +36,7 @@ enum WINDOW_TRANSPARENCY_WIDGET_IDX WIDX_TITLE, WIDX_CLOSE, - WIDX_HIDE_TREES, + WIDX_HIDE_VEGETATION, WIDX_HIDE_SCENERY, WIDX_HIDE_PATHS, WIDX_HIDE_RIDES, @@ -44,7 +44,7 @@ enum WINDOW_TRANSPARENCY_WIDGET_IDX WIDX_HIDE_SUPPORTS, WIDX_HIDE_GUESTS, WIDX_HIDE_STAFF, - WIDX_INVISIBLE_TREES, + WIDX_INVISIBLE_VEGETATION, WIDX_INVISIBLE_SCENERY, WIDX_INVISIBLE_PATHS, WIDX_INVISIBLE_RIDES, @@ -66,16 +66,16 @@ static constexpr ScreenSize INVISIBLE_SIZE = {24, 12}; static rct_widget window_transparency_main_widgets[] = { WINDOW_SHIM(WINDOW_TITLE, WW, WH), - MakeWidget({ 2, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_G2_BUTTON_HIDE_VEGETATION, STR_SEE_THROUGH_TREES), + MakeWidget({ 2, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_G2_BUTTON_HIDE_VEGETATION, STR_SEE_THROUGH_VEGETATION), MakeWidget({ 27, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_G2_BUTTON_HIDE_SCENERY, STR_SEE_THROUGH_SCENERY), MakeWidget({ 52, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_G2_BUTTON_FOOTPATH, STR_SEE_THROUGH_PATHS), MakeWidget({ 77, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_RIDE, STR_SEE_THROUGH_RIDES), MakeWidget({102, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_G2_BUTTON_HIDE_VEHICLES, STR_SEE_THROUGH_VEHICLES), MakeWidget({127, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_G2_BUTTON_HIDE_SUPPORTS, STR_SEE_THROUGH_SUPPORTS), - MakeWidget({152, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_GUESTS, STR_INVISIBLE_GUESTS), - MakeWidget({177, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, 0xFFFFFFFF, STR_INVISIBLE_STAFF), + MakeWidget({152, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, SPR_GUESTS, STR_SEE_THROUGH_GUESTS), + MakeWidget({177, 17}, HIDE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Secondary, 0xFFFFFFFF, STR_SEE_THROUGH_STAFF), - MakeWidget({ 2, 42}, INVISIBLE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_TREES), + MakeWidget({ 2, 42}, INVISIBLE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_VEGETATION), MakeWidget({ 27, 42}, INVISIBLE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_SCENERY), MakeWidget({ 52, 42}, INVISIBLE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_PATHS), MakeWidget({ 77, 42}, INVISIBLE_SIZE, WindowWidgetType::FlatBtn, WindowColour::Tertiary, STR_NONE, STR_INVISIBLE_RIDES), @@ -124,7 +124,7 @@ public: if (w != nullptr) wflags = w->viewport->flags; - SetWidgetPressed(WIDX_HIDE_TREES, (wflags & VIEWPORT_FLAG_HIDE_TREES)); + SetWidgetPressed(WIDX_HIDE_VEGETATION, (wflags & VIEWPORT_FLAG_HIDE_VEGETATION)); SetWidgetPressed(WIDX_HIDE_SCENERY, (wflags & VIEWPORT_FLAG_HIDE_SCENERY)); SetWidgetPressed(WIDX_HIDE_PATHS, (wflags & VIEWPORT_FLAG_HIDE_PATHS)); SetWidgetPressed(WIDX_HIDE_RIDES, (wflags & VIEWPORT_FLAG_HIDE_RIDES)); @@ -132,14 +132,14 @@ public: SetWidgetPressed(WIDX_HIDE_SUPPORTS, (wflags & VIEWPORT_FLAG_HIDE_SUPPORTS)); SetWidgetPressed(WIDX_HIDE_GUESTS, (wflags & VIEWPORT_FLAG_HIDE_GUESTS)); SetWidgetPressed(WIDX_HIDE_STAFF, (wflags & VIEWPORT_FLAG_HIDE_STAFF)); - SetWidgetPressed(WIDX_INVISIBLE_TREES, (wflags & VIEWPORT_FLAG_INVISIBLE_TREES)); + SetWidgetPressed(WIDX_INVISIBLE_VEGETATION, (wflags & VIEWPORT_FLAG_INVISIBLE_VEGETATION)); SetWidgetPressed(WIDX_INVISIBLE_SCENERY, (wflags & VIEWPORT_FLAG_INVISIBLE_SCENERY)); SetWidgetPressed(WIDX_INVISIBLE_PATHS, (wflags & VIEWPORT_FLAG_INVISIBLE_PATHS)); SetWidgetPressed(WIDX_INVISIBLE_RIDES, (wflags & VIEWPORT_FLAG_INVISIBLE_RIDES)); SetWidgetPressed(WIDX_INVISIBLE_VEHICLES, (wflags & VIEWPORT_FLAG_INVISIBLE_VEHICLES)); SetWidgetPressed(WIDX_INVISIBLE_SUPPORTS, (wflags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)); - for (rct_widgetindex i = WIDX_INVISIBLE_TREES; i <= WIDX_INVISIBLE_SUPPORTS; i++) + for (rct_widgetindex i = WIDX_INVISIBLE_VEGETATION; i <= WIDX_INVISIBLE_SUPPORTS; i++) { widgets[i].image = IsWidgetPressed(i) ? SPR_G2_BUTTON_HIDE_FULL : SPR_G2_BUTTON_HIDE_PARTIAL; } @@ -177,8 +177,8 @@ private: case WIDX_HIDE_SCENERY: wflags ^= VIEWPORT_FLAG_HIDE_SCENERY; break; - case WIDX_HIDE_TREES: - wflags ^= VIEWPORT_FLAG_HIDE_TREES; + case WIDX_HIDE_VEGETATION: + wflags ^= VIEWPORT_FLAG_HIDE_VEGETATION; break; case WIDX_HIDE_PATHS: wflags ^= VIEWPORT_FLAG_HIDE_PATHS; @@ -201,9 +201,9 @@ private: 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; + case WIDX_INVISIBLE_VEGETATION: + wflags ^= VIEWPORT_FLAG_INVISIBLE_VEGETATION; + gConfigGeneral.invisible_trees = wflags & VIEWPORT_FLAG_INVISIBLE_VEGETATION; config_save_default(); break; case WIDX_INVISIBLE_PATHS: diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index 2a781e1854..c1fceb32a0 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -1324,7 +1324,7 @@ void viewport_set_visibility(uint8_t mode) | VIEWPORT_FLAG_HIDE_STAFF | VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_HIDE_VERTICAL | VIEWPORT_FLAG_HIDE_VEHICLES | VIEWPORT_FLAG_INVISIBLE_RIDES | VIEWPORT_FLAG_INVISIBLE_VEHICLES | VIEWPORT_FLAG_HIDE_SUPPORTS | VIEWPORT_FLAG_INVISIBLE_PATHS | VIEWPORT_FLAG_INVISIBLE_SCENERY - | VIEWPORT_FLAG_HIDE_TREES | VIEWPORT_FLAG_INVISIBLE_TREES; + | VIEWPORT_FLAG_HIDE_VEGETATION | VIEWPORT_FLAG_INVISIBLE_VEGETATION; invalidate += vp->flags & mask; vp->flags &= ~mask; @@ -1353,16 +1353,55 @@ void viewport_set_visibility(uint8_t mode) } } -static bool IsTileElementTree(const TileElement* tileElement) +static bool IsCursorIdVegetation(CursorID cursor) { - auto sceneryItem = tileElement->AsSmallScenery(); - if (sceneryItem != nullptr) + switch (cursor) { - auto sceneryEntry = sceneryItem->GetEntry(); - if (sceneryEntry != nullptr && sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE)) - { + case CursorID::TreeDown: + case CursorID::FlowerDown: return true; + default: + return false; + } +} + +static bool IsTileElementVegetation(const TileElement* tileElement) +{ + switch (tileElement->GetType()) + { + case TileElementType::SmallScenery: + { + auto sceneryItem = tileElement->AsSmallScenery(); + auto sceneryEntry = sceneryItem->GetEntry(); + if (sceneryEntry != nullptr + && (sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE) || IsCursorIdVegetation(sceneryEntry->tool_id))) + { + return true; + } + break; } + case TileElementType::LargeScenery: + { + auto sceneryItem = tileElement->AsLargeScenery(); + auto sceneryEntry = sceneryItem->GetEntry(); + if (sceneryEntry != nullptr && IsCursorIdVegetation(sceneryEntry->tool_id)) + { + return true; + } + break; + } + case TileElementType::Wall: + { + auto sceneryItem = tileElement->AsWall(); + auto sceneryEntry = sceneryItem->GetEntry(); + if (sceneryEntry != nullptr && IsCursorIdVegetation(sceneryEntry->tool_id)) + { + return true; + } + break; + } + default: + break; } return false; } @@ -1415,34 +1454,31 @@ VisibilityKind GetPaintStructVisibility(const paint_struct* ps, uint32_t viewFla } break; case ViewportInteractionItem::Scenery: - if (ps->tileElement != nullptr && IsTileElementTree(ps->tileElement)) + case ViewportInteractionItem::LargeScenery: + case ViewportInteractionItem::Wall: + if (ps->tileElement != nullptr) { - if (viewFlags & VIEWPORT_FLAG_HIDE_TREES) + if (IsTileElementVegetation(ps->tileElement)) { - return (viewFlags & VIEWPORT_FLAG_INVISIBLE_TREES) ? VisibilityKind::Hidden : VisibilityKind::Partial; + if (viewFlags & VIEWPORT_FLAG_HIDE_VEGETATION) + { + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_VEGETATION) ? VisibilityKind::Hidden + : VisibilityKind::Partial; + } + } + else + { + if (viewFlags & VIEWPORT_FLAG_HIDE_SCENERY) + { + return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? VisibilityKind::Hidden : VisibilityKind::Partial; + } } } - else if (viewFlags & VIEWPORT_FLAG_HIDE_SCENERY) - { - return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? VisibilityKind::Hidden : VisibilityKind::Partial; - } - break; - case ViewportInteractionItem::Wall: - if (viewFlags & VIEWPORT_FLAG_HIDE_SCENERY) - { - return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? VisibilityKind::Hidden : VisibilityKind::Partial; - } - if (viewFlags & VIEWPORT_FLAG_UNDERGROUND_INSIDE) + if (ps->sprite_type == ViewportInteractionItem::Wall && (viewFlags & VIEWPORT_FLAG_UNDERGROUND_INSIDE)) { return VisibilityKind::Partial; } break; - case ViewportInteractionItem::LargeScenery: - if (viewFlags & VIEWPORT_FLAG_HIDE_SCENERY) - { - return (viewFlags & VIEWPORT_FLAG_INVISIBLE_SCENERY) ? VisibilityKind::Hidden : VisibilityKind::Partial; - } - break; default: break; } diff --git a/src/openrct2/interface/Viewport.h b/src/openrct2/interface/Viewport.h index d6c1da140f..289136f1fd 100644 --- a/src/openrct2/interface/Viewport.h +++ b/src/openrct2/interface/Viewport.h @@ -50,7 +50,7 @@ enum VIEWPORT_FLAG_HIDE_RIDES = (1 << 1), VIEWPORT_FLAG_HIDE_VEHICLES = (1 << 20), - VIEWPORT_FLAG_HIDE_TREES = (1 << 21), + VIEWPORT_FLAG_HIDE_VEGETATION = (1 << 21), VIEWPORT_FLAG_HIDE_SCENERY = (1 << 2), VIEWPORT_FLAG_HIDE_PATHS = (1 << 16), VIEWPORT_FLAG_HIDE_SUPPORTS = (1 << 3), @@ -59,7 +59,7 @@ enum VIEWPORT_FLAG_INVISIBLE_RIDES = (1 << 24), VIEWPORT_FLAG_INVISIBLE_VEHICLES = (1 << 25), - VIEWPORT_FLAG_INVISIBLE_TREES = (1 << 26), + VIEWPORT_FLAG_INVISIBLE_VEGETATION = (1 << 26), VIEWPORT_FLAG_INVISIBLE_SCENERY = (1 << 27), VIEWPORT_FLAG_INVISIBLE_PATHS = (1 << 28), VIEWPORT_FLAG_INVISIBLE_SUPPORTS = (1 << 29), diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index faaaafccb4..d389c6c060 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3928,23 +3928,23 @@ enum : uint16_t STR_ADJUST_SMALLER_PATROL_AREA_TIP = 6469, STR_ADJUST_LARGER_PATROL_AREA_TIP = 6470, - STR_SEE_THROUGH_VEHICLES = 6471, - STR_SEE_THROUGH_TREES = 6472, - STR_INVISIBLE_RIDES = 6473, - STR_INVISIBLE_SCENERY = 6474, - STR_INVISIBLE_TREES = 6475, - STR_INVISIBLE_PATHS = 6476, - STR_INVISIBLE_GUESTS = 6477, - STR_INVISIBLE_STAFF = 6478, - STR_TRANSPARENCY_OPTIONS = 6479, - STR_TRANSPARENCY_OPTIONS_TITLE = 6480, - STR_INVISIBLE_VEHICLES = 6481, - STR_SEE_THROUGH_SUPPORTS = 6482, + STR_SEE_THROUGH_VEGETATION = 6471, + STR_SEE_THROUGH_VEHICLES = 6472, + STR_SEE_THROUGH_SUPPORTS = 6473, + STR_SEE_THROUGH_GUESTS = 6474, + STR_SEE_THROUGH_STAFF = 6475, + STR_INVISIBLE_VEGETATION = 6476, + STR_INVISIBLE_SCENERY = 6477, + STR_INVISIBLE_PATHS = 6478, + STR_INVISIBLE_RIDES = 6479, + STR_INVISIBLE_VEHICLES = 6480, + STR_TRANSPARENCY_OPTIONS = 6481, + STR_TRANSPARENCY_OPTIONS_TITLE = 6482, STR_SHORTCUT_OPEN_TRANSPARENCY_OPTIONS = 6483, - STR_SHORTCUT_SEE_THROUGH_VEHICLES_TOGGLE = 6484, - STR_SHORTCUT_SEE_THROUGH_TREES_TOGGLE = 6485, - STR_SHORTCUT_INVISIBLE_GUESTS_TOGGLE = 6486, - STR_SHORTCUT_INVISIBLE_STAFF_TOGGLE = 6487, + STR_SHORTCUT_SEE_THROUGH_VEGETATION_TOGGLE = 6484, + STR_SHORTCUT_SEE_THROUGH_VEHICLES_TOGGLE = 6485, + STR_SHORTCUT_SEE_THROUGH_GUESTS_TOGGLE = 6486, + STR_SHORTCUT_SEE_THROUGH_STAFF_TOGGLE = 6487, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings