From b54ef13c4f3c1a80c8b7c7cd1a3cb73a603550f1 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 3 Aug 2022 19:42:43 +0200 Subject: [PATCH] Implement cleaner method for checking mode availability --- src/openrct2/actions/TrackPlaceAction.cpp | 3 +-- src/openrct2/ride/RideData.cpp | 5 +++++ src/openrct2/ride/RideData.h | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/openrct2/actions/TrackPlaceAction.cpp b/src/openrct2/actions/TrackPlaceAction.cpp index eebd0f83d3..a39a80a00e 100644 --- a/src/openrct2/actions/TrackPlaceAction.cpp +++ b/src/openrct2/actions/TrackPlaceAction.cpp @@ -551,8 +551,7 @@ GameActions::Result TrackPlaceAction::Execute() const RideMode newMode = RideMode::ContinuousCircuitBlockSectioned; if (ride->mode == RideMode::PoweredLaunch) { - if (ride->GetRideTypeDescriptor().RideModes - & (1ULL << static_cast(RideMode::PoweredLaunchBlockSectioned)) + if (ride->GetRideTypeDescriptor().SupportsRideMode(RideMode::PoweredLaunchBlockSectioned) || gCheatsShowAllOperatingModes) newMode = RideMode::PoweredLaunchBlockSectioned; else diff --git a/src/openrct2/ride/RideData.cpp b/src/openrct2/ride/RideData.cpp index 72742856cb..c0687aa665 100644 --- a/src/openrct2/ride/RideData.cpp +++ b/src/openrct2/ride/RideData.cpp @@ -376,6 +376,11 @@ ResearchCategory RideTypeDescriptor::GetResearchCategory() const return ResearchCategory::Transport; } +bool RideTypeDescriptor::SupportsRideMode(RideMode rideMode) const +{ + return RideModes & EnumToFlag(rideMode); +} + static RideTrackGroup _enabledRidePieces = {}; bool IsTrackEnabled(int32_t trackFlagIndex) diff --git a/src/openrct2/ride/RideData.h b/src/openrct2/ride/RideData.h index e198b3a3f0..fb70685a32 100644 --- a/src/openrct2/ride/RideData.h +++ b/src/openrct2/ride/RideData.h @@ -220,6 +220,7 @@ struct RideTypeDescriptor void GetAvailableTrackPieces(RideTrackGroup& res) const; bool SupportsTrackPiece(const uint64_t trackPiece) const; ResearchCategory GetResearchCategory() const; + bool SupportsRideMode(RideMode rideMode) const; }; #ifdef _WIN32