From fc08cf98ed6466a040cb9c1c977663793d2b7871 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Tue, 3 Jan 2023 00:07:50 +0100 Subject: [PATCH 1/5] Fix type of StartTrackPiece --- src/openrct2/ride/RideData.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openrct2/ride/RideData.h b/src/openrct2/ride/RideData.h index 1984709a50..01b5ee10bd 100644 --- a/src/openrct2/ride/RideData.h +++ b/src/openrct2/ride/RideData.h @@ -186,7 +186,7 @@ struct RideTypeDescriptor RideTrackGroup ExtraTrackPieces; RideTrackGroup CoveredTrackPieces; /** rct2: 0x0097CC68 */ - uint64_t StartTrackPiece; + track_type_t StartTrackPiece; TRACK_PAINT_FUNCTION_GETTER TrackPaintFunction; uint64_t Flags; /** rct2: 0x0097C8AC */ From 53fcad8d7633c9d4b88780c33bf027e84aa5518b Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Tue, 3 Jan 2023 00:10:07 +0100 Subject: [PATCH 2/5] Create TrackTypeIsHelix() --- src/openrct2/ride/Track.cpp | 11 +++++++++++ src/openrct2/ride/Track.h | 1 + 2 files changed, 12 insertions(+) diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index 5a28c7bc10..12e5847726 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -658,6 +658,17 @@ bool TrackTypeHasSpeedSetting(track_type_t trackType) return trackType == TrackElemType::Brakes || trackType == TrackElemType::Booster; } +bool TrackTypeIsHelix(track_type_t trackType) +{ + if (trackType >= TrackElemType::LeftHalfBankedHelixUpSmall && trackType <= TrackElemType::RightHalfBankedHelixDownLarge) + return true; + + if (trackType >= TrackElemType::LeftQuarterBankedHelixLargeUp && trackType <= TrackElemType::RightQuarterHelixLargeDown) + return true; + + return false; +} + std::optional GetTrackSegmentOrigin(const CoordsXYE& posEl) { auto trackEl = posEl.element->AsTrack(); diff --git a/src/openrct2/ride/Track.h b/src/openrct2/ride/Track.h index 07c982ad6b..5edad31b1f 100644 --- a/src/openrct2/ride/Track.h +++ b/src/openrct2/ride/Track.h @@ -633,6 +633,7 @@ ResultWithMessage track_add_station_element(CoordsXYZD loc, RideId rideIndex, in ResultWithMessage track_remove_station_element(const CoordsXYZD& loc, RideId rideIndex, int32_t flags); bool TrackTypeHasSpeedSetting(track_type_t trackType); +bool TrackTypeIsHelix(track_type_t trackType); std::optional GetTrackSegmentOrigin(const CoordsXYE& posEl); /** From 4b34bbcf7c678aa97fcc4c0770b3f07fd75c4823 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Tue, 3 Jan 2023 00:14:26 +0100 Subject: [PATCH 3/5] Use TrackTypeIsHelix() in construction window --- src/openrct2-ui/windows/RideConstruction.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 2e817d8f9e..b7428a9c6d 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -2278,11 +2278,9 @@ private: viewport_set_visibility(1); } - if ((_currentTrackCurve >= (TrackElemType::LeftHalfBankedHelixUpSmall | RideConstructionSpecialPieceSelected) - && _currentTrackCurve <= (TrackElemType::RightHalfBankedHelixDownLarge | RideConstructionSpecialPieceSelected)) - || (_currentTrackCurve >= (TrackElemType::LeftQuarterBankedHelixLargeUp | RideConstructionSpecialPieceSelected) - && _currentTrackCurve <= (TrackElemType::RightQuarterHelixLargeDown | RideConstructionSpecialPieceSelected)) - || (_currentTrackSlopeEnd != TRACK_SLOPE_NONE)) + const bool helixSelected = (_currentTrackCurve & RideConstructionSpecialPieceSelected) + && TrackTypeIsHelix(_currentTrackCurve & ~RideConstructionSpecialPieceSelected); + if (helixSelected || (_currentTrackSlopeEnd != TRACK_SLOPE_NONE)) { viewport_set_visibility(2); } From 5b2c5d77ff1d680e8eae6741da82df9df25728b2 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Tue, 3 Jan 2023 22:39:01 +0100 Subject: [PATCH 4/5] WindowRideConstructionOpen: use constants for window width/height --- src/openrct2-ui/windows/RideConstruction.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index b7428a9c6d..8586ea6397 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -2783,10 +2783,9 @@ rct_window* WindowRideConstructionOpen() return ContextOpenWindowView(WV_MAZE_CONSTRUCTION); case RideConstructionWindowContext::Default: return WindowCreate( - WindowClass::RideConstruction, ScreenCoordsXY(0, 29), 166, 394, WF_NO_AUTO_CLOSE); + WindowClass::RideConstruction, ScreenCoordsXY(0, 29), WW, WH, WF_NO_AUTO_CLOSE); } - return WindowCreate( - WindowClass::RideConstruction, ScreenCoordsXY(0, 29), 166, 394, WF_NO_AUTO_CLOSE); + return WindowCreate(WindowClass::RideConstruction, ScreenCoordsXY(0, 29), WW, WH, WF_NO_AUTO_CLOSE); } static void CloseConstructWindowOnCompletion(Ride* ride) From a27b717ebdd8f599b8775bf55c958297c0ffe6f8 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Tue, 3 Jan 2023 23:22:01 +0100 Subject: [PATCH 5/5] Small Construction window cleanup --- src/openrct2-ui/windows/RideConstruction.cpp | 8 ++++---- src/openrct2/interface/Window.h | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 8586ea6397..dc25a63a8d 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -64,7 +64,9 @@ enum WIDX_LEFT_CURVE_VERY_SMALL, WIDX_LEFT_CURVE_SMALL, WIDX_LEFT_CURVE, + WIDX_LEFT_CURVE_LARGE, WIDX_STRAIGHT, + WIDX_RIGHT_CURVE_LARGE, WIDX_RIGHT_CURVE, WIDX_RIGHT_CURVE_SMALL, WIDX_RIGHT_CURVE_VERY_SMALL, @@ -80,13 +82,11 @@ enum WIDX_BANK_RIGHT, WIDX_CONSTRUCT, WIDX_DEMOLISH, - WIDX_LEFT_CURVE_LARGE, WIDX_PREVIOUS_SECTION, WIDX_NEXT_SECTION, WIDX_ENTRANCE_EXIT_GROUPBOX, WIDX_ENTRANCE, WIDX_EXIT, - WIDX_RIGHT_CURVE_LARGE, WIDX_ROTATE, WIDX_U_TRACK, WIDX_O_TRACK, @@ -111,7 +111,9 @@ static Widget window_ride_construction_widgets[] = { MakeWidget ({ 6, 29}, { 22, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_RIDE_CONSTRUCTION_LEFT_CURVE_SMALL), STR_RIDE_CONSTRUCTION_LEFT_CURVE_VERY_SMALL_TIP ), MakeWidget ({ 6, 29}, { 22, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_RIDE_CONSTRUCTION_LEFT_CURVE_SMALL), STR_RIDE_CONSTRUCTION_LEFT_CURVE_SMALL_TIP ), MakeWidget ({ 28, 29}, { 22, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_RIDE_CONSTRUCTION_LEFT_CURVE), STR_RIDE_CONSTRUCTION_LEFT_CURVE_TIP ), + MakeWidget ({ 50, 29}, { 22, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_RIDE_CONSTRUCTION_LEFT_CURVE_LARGE), STR_RIDE_CONSTRUCTION_LEFT_CURVE_LARGE_TIP ), MakeWidget ({ 72, 29}, { 22, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_RIDE_CONSTRUCTION_STRAIGHT), STR_RIDE_CONSTRUCTION_STRAIGHT_TIP ), + MakeWidget ({ 94, 29}, { 22, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_RIDE_CONSTRUCTION_RIGHT_CURVE_LARGE), STR_RIDE_CONSTRUCTION_RIGHT_CURVE_LARGE_TIP ), MakeWidget ({116, 29}, { 22, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_RIDE_CONSTRUCTION_RIGHT_CURVE), STR_RIDE_CONSTRUCTION_RIGHT_CURVE_TIP ), MakeWidget ({138, 29}, { 22, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_RIDE_CONSTRUCTION_RIGHT_CURVE_SMALL), STR_RIDE_CONSTRUCTION_RIGHT_CURVE_SMALL_TIP ), MakeWidget ({138, 29}, { 22, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_RIDE_CONSTRUCTION_RIGHT_CURVE_SMALL), STR_RIDE_CONSTRUCTION_RIGHT_CURVE_VERY_SMALL_TIP ), @@ -127,13 +129,11 @@ static Widget window_ride_construction_widgets[] = { MakeWidget ({ 95, 132}, { 24, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_RIDE_CONSTRUCTION_RIGHT_BANK), STR_RIDE_CONSTRUCTION_ROLL_FOR_RIGHT_CURVE_TIP ), MakeWidget ({ 3, 164}, {160, 170}, WindowWidgetType::ImgBtn, WindowColour::Secondary, 0xFFFFFFFF, STR_RIDE_CONSTRUCTION_CONSTRUCT_SELECTED_SECTION_TIP), MakeWidget ({ 60, 338}, { 46, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_DEMOLISH_CURRENT_SECTION), STR_RIDE_CONSTRUCTION_REMOVE_HIGHLIGHTED_SECTION_TIP), - MakeWidget ({ 50, 29}, { 22, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_RIDE_CONSTRUCTION_LEFT_CURVE_LARGE), STR_RIDE_CONSTRUCTION_LEFT_CURVE_LARGE_TIP ), MakeWidget ({ 30, 338}, { 24, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_PREVIOUS), STR_RIDE_CONSTRUCTION_MOVE_TO_PREVIOUS_SECTION_TIP ), MakeWidget ({112, 338}, { 24, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_NEXT), STR_RIDE_CONSTRUCTION_MOVE_TO_NEXT_SECTION_TIP ), MakeWidget ({ 3, 362}, {160, 28}, WindowWidgetType::Groupbox, WindowColour::Primary ), MakeWidget ({ 9, 372}, { 70, 12}, WindowWidgetType::Button, WindowColour::Secondary, STR_RIDE_CONSTRUCTION_ENTRANCE, STR_RIDE_CONSTRUCTION_ENTRANCE_TIP ), MakeWidget ({ 87, 372}, { 70, 12}, WindowWidgetType::Button, WindowColour::Secondary, STR_RIDE_CONSTRUCTION_EXIT, STR_RIDE_CONSTRUCTION_EXIT_TIP ), - MakeWidget ({ 94, 29}, { 22, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_RIDE_CONSTRUCTION_RIGHT_CURVE_LARGE), STR_RIDE_CONSTRUCTION_RIGHT_CURVE_LARGE_TIP ), MakeWidget ({ 72, 338}, { 24, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_ROTATE_ARROW), STR_ROTATE_90_TIP ), MakeWidget ({ 19, 132}, { 24, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_RIDE_CONSTRUCTION_U_SHAPED_TRACK), STR_RIDE_CONSTRUCTION_U_SHAPED_OPEN_TRACK_TIP ), MakeWidget ({123, 132}, { 24, 24}, WindowWidgetType::FlatBtn, WindowColour::Secondary, ImageId(SPR_RIDE_CONSTRUCTION_O_SHAPED_TRACK), STR_RIDE_CONSTRUCTION_O_SHAPED_ENCLOSED_TRACK_TIP ), diff --git a/src/openrct2/interface/Window.h b/src/openrct2/interface/Window.h index 052a52297a..41189cfe6a 100644 --- a/src/openrct2/interface/Window.h +++ b/src/openrct2/interface/Window.h @@ -411,9 +411,9 @@ enum WindowDetail #define WC_TOP_TOOLBAR__WIDX_SCENERY 10 #define WC_TOP_TOOLBAR__WIDX_PATH 11 #define WC_TOP_TOOLBAR__WIDX_CLEAR_SCENERY 17 -#define WC_RIDE_CONSTRUCTION__WIDX_CONSTRUCT 23 -#define WC_RIDE_CONSTRUCTION__WIDX_ENTRANCE 29 -#define WC_RIDE_CONSTRUCTION__WIDX_EXIT 30 +#define WC_RIDE_CONSTRUCTION__WIDX_CONSTRUCT 25 +#define WC_RIDE_CONSTRUCTION__WIDX_ENTRANCE 30 +#define WC_RIDE_CONSTRUCTION__WIDX_EXIT 31 #define WC_RIDE_CONSTRUCTION__WIDX_ROTATE 32 #define WC_SCENERY__WIDX_SCENERY_TAB_1 12 #define WC_SCENERY__WIDX_SCENERY_ROTATE_OBJECTS_BUTTON 5