Make TrackBank into an enum class

This commit is contained in:
Gymnasiast 2024-01-14 23:13:26 +01:00
parent d2f5e739aa
commit b832eb5f72
No known key found for this signature in database
GPG Key ID: DBFFF47AB2CA3EDD
13 changed files with 645 additions and 641 deletions

View File

@ -42,7 +42,7 @@ void RideConstructNew(RideSelection listItem)
}
SpecialElementsDropdownState BuildSpecialElementsList(
const Ride& currentRide, uint8_t buildDirection, uint8_t buildSlope, uint8_t buildBank, RideConstructionState state)
const Ride& currentRide, uint8_t buildDirection, uint8_t buildSlope, TrackBank buildBank, RideConstructionState state)
{
auto buildDirectionIsDiagonal = TrackPieceDirectionIsDiagonal(buildDirection);
SpecialElementsDropdownState list;

View File

@ -159,6 +159,6 @@ struct SpecialElementsDropdownState
};
SpecialElementsDropdownState BuildSpecialElementsList(
const Ride& currentRide, uint8_t buildDirection, uint8_t buildSlope, uint8_t buildBank, RideConstructionState state);
const Ride& currentRide, uint8_t buildDirection, uint8_t buildSlope, TrackBank buildBank, RideConstructionState state);
void RideConstructNew(RideSelection listItem);

View File

@ -227,14 +227,14 @@ public:
_currentTrackCurve = currentRide->GetRideTypeDescriptor().StartTrackPiece | RideConstructionSpecialPieceSelected;
_currentTrackSlopeEnd = 0;
_currentTrackBankEnd = 0;
_currentTrackBankEnd = TrackBank::None;
_currentTrackLiftHill = 0;
_currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES;
if (currentRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED))
_currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE;
_previousTrackBankEnd = 0;
_previousTrackBankEnd = TrackBank::None;
_previousTrackSlopeEnd = 0;
_currentTrackPieceDirection = 0;
@ -396,7 +396,7 @@ public:
{
disabledWidgets |= (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_RIGHT);
}
else if (_currentTrackBankEnd != TRACK_BANK_NONE)
else if (_currentTrackBankEnd != TrackBank::None)
{
disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN) | (1uLL << WIDX_SLOPE_UP);
}
@ -409,7 +409,7 @@ public:
|| _currentTrackSlopeEnd == TRACK_SLOPE_UP_25 || _currentTrackSlopeEnd == TRACK_SLOPE_UP_60)
disabledWidgets |= 1uLL << WIDX_CHAIN_LIFT | (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_RIGHT);
// Disable upward slope if current track piece is not flat
if ((_previousTrackSlopeEnd != TRACK_SLOPE_NONE || _previousTrackBankEnd != TRACK_BANK_NONE)
if ((_previousTrackSlopeEnd != TRACK_SLOPE_NONE || _previousTrackBankEnd != TrackBank::None)
&& !(_currentTrackLiftHill & CONSTRUCTION_LIFT_HILL_SELECTED))
disabledWidgets |= (1uLL << WIDX_SLOPE_UP);
}
@ -425,7 +425,7 @@ public:
case EnumValue(TrackCurve::Left):
case EnumValue(TrackCurve::LeftLarge):
disabledWidgets |= (1uLL << WIDX_BANK_RIGHT);
if (_previousTrackBankEnd == TRACK_BANK_NONE)
if (_previousTrackBankEnd == TrackBank::None)
{
disabledWidgets |= (1uLL << WIDX_BANK_LEFT);
}
@ -439,7 +439,7 @@ public:
case EnumValue(TrackCurve::RightSmall):
case EnumValue(TrackCurve::RightVerySmall):
disabledWidgets |= (1uLL << WIDX_BANK_LEFT);
if (_previousTrackBankEnd == TRACK_BANK_NONE)
if (_previousTrackBankEnd == TrackBank::None)
{
disabledWidgets |= (1uLL << WIDX_BANK_RIGHT);
}
@ -451,7 +451,7 @@ public:
}
if (!IsTrackEnabled(TRACK_SLOPE_ROLL_BANKING))
{
if (_currentTrackBankEnd != TRACK_BANK_NONE)
if (_currentTrackBankEnd != TrackBank::None)
{
disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN) | (1uLL << WIDX_SLOPE_UP);
}
@ -546,12 +546,12 @@ public:
disabledWidgets &= ~(1uLL << WIDX_SLOPE_UP_STEEP);
}
}
if (_previousTrackBankEnd == TRACK_BANK_LEFT)
if (_previousTrackBankEnd == TrackBank::Left)
{
disabledWidgets |= (1uLL << WIDX_RIGHT_CURVE_SMALL) | (1uLL << WIDX_RIGHT_CURVE) | (1uLL << WIDX_RIGHT_CURVE_LARGE)
| (1uLL << WIDX_BANK_RIGHT);
}
if (_previousTrackBankEnd == TRACK_BANK_RIGHT)
if (_previousTrackBankEnd == TrackBank::Right)
{
disabledWidgets |= (1uLL << WIDX_LEFT_CURVE_SMALL) | (1uLL << WIDX_LEFT_CURVE) | (1uLL << WIDX_LEFT_CURVE_LARGE)
| (1uLL << WIDX_BANK_LEFT);
@ -592,7 +592,7 @@ public:
disabledWidgets |= (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_RIGHT);
}
}
if (_currentTrackBankEnd != TRACK_BANK_NONE || _previousTrackBankEnd != TRACK_BANK_NONE)
if (_currentTrackBankEnd != TrackBank::None || _previousTrackBankEnd != TrackBank::None)
{
disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP) | (1uLL << WIDX_SLOPE_UP_STEEP) | (1uLL << WIDX_CHAIN_LIFT);
}
@ -626,7 +626,7 @@ public:
disabledWidgets |= (1uLL << WIDX_CHAIN_LIFT);
}
}
if (_previousTrackBankEnd == TRACK_BANK_UPSIDE_DOWN)
if (_previousTrackBankEnd == TrackBank::UpsideDown)
{
disabledWidgets |= (1uLL << WIDX_LEFT_CURVE_SMALL) | (1uLL << WIDX_LEFT_CURVE) | (1uLL << WIDX_LEFT_CURVE_LARGE)
| (1uLL << WIDX_STRAIGHT) | (1uLL << WIDX_RIGHT_CURVE_SMALL) | (1uLL << WIDX_RIGHT_CURVE)
@ -662,17 +662,17 @@ public:
else if (IsTrackEnabled(TRACK_SLOPE_CURVE_BANKED))
{
disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP) | (1uLL << WIDX_SLOPE_UP_STEEP);
if (_currentTrackBankEnd == TRACK_BANK_LEFT)
if (_currentTrackBankEnd == TrackBank::Left)
{
disabledWidgets |= (1uLL << WIDX_BANK_STRAIGHT) | (1uLL << WIDX_BANK_RIGHT);
disabledWidgets &= ~(1uLL << WIDX_BANK_LEFT);
}
if (_currentTrackBankEnd == TRACK_BANK_RIGHT)
if (_currentTrackBankEnd == TrackBank::Right)
{
disabledWidgets |= (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_STRAIGHT);
disabledWidgets &= ~(1uLL << WIDX_BANK_RIGHT);
}
if (_currentTrackBankEnd == TRACK_BANK_NONE)
if (_currentTrackBankEnd == TrackBank::None)
{
disabledWidgets |= (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_RIGHT);
disabledWidgets &= ~(1uLL << WIDX_BANK_STRAIGHT);
@ -763,7 +763,7 @@ public:
if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackSlopeEnd == _previousTrackSlopeEnd)
{
// If the bank is none, attempt to show unbanked quarter helixes
if (_currentTrackBankEnd == TRACK_BANK_NONE
if (_currentTrackBankEnd == TrackBank::None
&& (_currentTrackCurve == EnumValue(TrackCurve::Left) || _currentTrackCurve == EnumValue(TrackCurve::Right)))
{
if (IsTrackEnabled(TRACK_HELIX_DOWN_UNBANKED_QUARTER))
@ -774,7 +774,7 @@ public:
// If the track is banked left or right and curvature is standard size (2.5 tile radius), attempt to show buttons
// for half or quarter helixes
else if (
(_currentTrackBankEnd == TRACK_BANK_LEFT || _currentTrackBankEnd == TRACK_BANK_RIGHT)
(_currentTrackBankEnd == TrackBank::Left || _currentTrackBankEnd == TrackBank::Right)
&& (_currentTrackCurve == EnumValue(TrackCurve::Left) || _currentTrackCurve == EnumValue(TrackCurve::Right)))
{
if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_QUARTER))
@ -785,7 +785,7 @@ public:
// If the track is banked left or right and curvature is small size (1.5 tile radius), attempt to show buttons for
// half helixes
else if (
(_currentTrackBankEnd == TRACK_BANK_LEFT || _currentTrackBankEnd == TRACK_BANK_RIGHT)
(_currentTrackBankEnd == TrackBank::Left || _currentTrackBankEnd == TrackBank::Right)
&& (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall)
|| _currentTrackCurve == EnumValue(TrackCurve::RightSmall)))
{
@ -802,7 +802,7 @@ public:
if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall)
|| _currentTrackCurve == EnumValue(TrackCurve::RightSmall))
{
if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _previousTrackBankEnd != TRACK_BANK_NONE
if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _previousTrackBankEnd != TrackBank::None
&& (!currentRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_UP_INCLINE_REQUIRES_LIFT)
|| gCheatsEnableAllDrawableTrackPieces))
{
@ -815,7 +815,7 @@ public:
if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall)
|| _currentTrackCurve == EnumValue(TrackCurve::RightSmall))
{
if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _previousTrackBankEnd != TRACK_BANK_NONE)
if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _previousTrackBankEnd != TrackBank::None)
{
disabledWidgets &= ~(1uLL << WIDX_SLOPE_DOWN);
}
@ -1058,7 +1058,7 @@ public:
case WIDX_STRAIGHT:
RideConstructionInvalidateCurrentTrack();
if (_currentTrackCurve != EnumValue(TrackCurve::None))
_currentTrackBankEnd = TRACK_BANK_NONE;
_currentTrackBankEnd = TrackBank::None;
_currentTrackCurve = EnumValue(TrackCurve::None);
_currentTrackPrice = MONEY64_UNDEFINED;
WindowRideConstructionUpdateActiveElements();
@ -1067,14 +1067,14 @@ public:
RideConstructionInvalidateCurrentTrack();
if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_HALF))
{
if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TRACK_BANK_LEFT)
if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TrackBank::Left)
{
_currentTrackCurve = TrackElemType::LeftHalfBankedHelixDownLarge | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY64_UNDEFINED;
WindowRideConstructionUpdateActiveElements();
break;
}
if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TRACK_BANK_RIGHT)
if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TrackBank::Right)
{
_currentTrackCurve = TrackElemType::RightHalfBankedHelixDownLarge
| RideConstructionSpecialPieceSelected;
@ -1082,14 +1082,14 @@ public:
WindowRideConstructionUpdateActiveElements();
break;
}
if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) && _currentTrackBankEnd == TRACK_BANK_LEFT)
if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) && _currentTrackBankEnd == TrackBank::Left)
{
_currentTrackCurve = TrackElemType::LeftHalfBankedHelixDownSmall | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY64_UNDEFINED;
WindowRideConstructionUpdateActiveElements();
break;
}
if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall) && _currentTrackBankEnd == TRACK_BANK_RIGHT)
if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall) && _currentTrackBankEnd == TrackBank::Right)
{
_currentTrackCurve = TrackElemType::RightHalfBankedHelixDownSmall
| RideConstructionSpecialPieceSelected;
@ -1100,7 +1100,7 @@ public:
}
if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_QUARTER))
{
if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TRACK_BANK_LEFT)
if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TrackBank::Left)
{
_currentTrackCurve = TrackElemType::LeftQuarterBankedHelixLargeDown
| RideConstructionSpecialPieceSelected;
@ -1108,7 +1108,7 @@ public:
WindowRideConstructionUpdateActiveElements();
break;
}
if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TRACK_BANK_RIGHT)
if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TrackBank::Right)
{
_currentTrackCurve = TrackElemType::RightQuarterBankedHelixLargeDown
| RideConstructionSpecialPieceSelected;
@ -1119,7 +1119,7 @@ public:
}
if (IsTrackEnabled(TRACK_HELIX_DOWN_UNBANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_UNBANKED_QUARTER))
{
if (_currentTrackBankEnd == TRACK_BANK_NONE)
if (_currentTrackBankEnd == TrackBank::None)
{
if (_currentTrackCurve == EnumValue(TrackCurve::Left))
{
@ -1150,9 +1150,9 @@ public:
break;
case WIDX_SLOPE_DOWN:
RideConstructionInvalidateCurrentTrack();
if (_rideConstructionState == RideConstructionState::Back && _currentTrackBankEnd != TRACK_BANK_NONE)
if (_rideConstructionState == RideConstructionState::Back && _currentTrackBankEnd != TrackBank::None)
{
_currentTrackBankEnd = TRACK_BANK_NONE;
_currentTrackBankEnd = TrackBank::None;
}
UpdateLiftHillSelected(TRACK_SLOPE_DOWN_25);
break;
@ -1162,31 +1162,31 @@ public:
{
if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall))
{
_currentTrackBankEnd = TRACK_BANK_LEFT;
_currentTrackBankEnd = TrackBank::Left;
}
else if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall))
{
_currentTrackBankEnd = TRACK_BANK_RIGHT;
_currentTrackBankEnd = TrackBank::Right;
}
}
else if (_rideConstructionState == RideConstructionState::Back && _previousTrackSlopeEnd == 2)
{
if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall))
{
_currentTrackBankEnd = TRACK_BANK_LEFT;
_currentTrackBankEnd = TrackBank::Left;
}
else if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall))
{
_currentTrackBankEnd = TRACK_BANK_RIGHT;
_currentTrackBankEnd = TrackBank::Right;
}
}
UpdateLiftHillSelected(TRACK_SLOPE_NONE);
break;
case WIDX_SLOPE_UP:
RideConstructionInvalidateCurrentTrack();
if (_rideConstructionState == RideConstructionState::Front && _currentTrackBankEnd != TRACK_BANK_NONE)
if (_rideConstructionState == RideConstructionState::Front && _currentTrackBankEnd != TrackBank::None)
{
_currentTrackBankEnd = TRACK_BANK_NONE;
_currentTrackBankEnd = TrackBank::None;
}
if (currentRide->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_REVERSE_FREEFALL))
{
@ -1206,28 +1206,28 @@ public:
RideConstructionInvalidateCurrentTrack();
if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_HALF))
{
if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TRACK_BANK_LEFT)
if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TrackBank::Left)
{
_currentTrackCurve = TrackElemType::LeftHalfBankedHelixUpLarge | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY64_UNDEFINED;
WindowRideConstructionUpdateActiveElements();
break;
}
if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TRACK_BANK_RIGHT)
if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TrackBank::Right)
{
_currentTrackCurve = TrackElemType::RightHalfBankedHelixUpLarge | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY64_UNDEFINED;
WindowRideConstructionUpdateActiveElements();
break;
}
if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) && _currentTrackBankEnd == TRACK_BANK_LEFT)
if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) && _currentTrackBankEnd == TrackBank::Left)
{
_currentTrackCurve = TrackElemType::LeftHalfBankedHelixUpSmall | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY64_UNDEFINED;
WindowRideConstructionUpdateActiveElements();
break;
}
if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall) && _currentTrackBankEnd == TRACK_BANK_RIGHT)
if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall) && _currentTrackBankEnd == TrackBank::Right)
{
_currentTrackCurve = TrackElemType::RightHalfBankedHelixUpSmall | RideConstructionSpecialPieceSelected;
_currentTrackPrice = MONEY64_UNDEFINED;
@ -1237,7 +1237,7 @@ public:
}
if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_QUARTER))
{
if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TRACK_BANK_LEFT)
if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TrackBank::Left)
{
_currentTrackCurve = TrackElemType::LeftQuarterBankedHelixLargeUp
| RideConstructionSpecialPieceSelected;
@ -1245,7 +1245,7 @@ public:
WindowRideConstructionUpdateActiveElements();
break;
}
if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TRACK_BANK_RIGHT)
if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TrackBank::Right)
{
_currentTrackCurve = TrackElemType::RightQuarterBankedHelixLargeUp
| RideConstructionSpecialPieceSelected;
@ -1256,7 +1256,7 @@ public:
}
if (IsTrackEnabled(TRACK_HELIX_DOWN_UNBANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_UNBANKED_QUARTER))
{
if (_currentTrackBankEnd == TRACK_BANK_NONE)
if (_currentTrackBankEnd == TrackBank::None)
{
if (_currentTrackCurve == EnumValue(TrackCurve::Left))
{
@ -1295,7 +1295,7 @@ public:
RideConstructionInvalidateCurrentTrack();
if (!_currentlyShowingBrakeOrBoosterSpeed)
{
_currentTrackBankEnd = TRACK_BANK_LEFT;
_currentTrackBankEnd = TrackBank::Left;
_currentTrackPrice = MONEY64_UNDEFINED;
WindowRideConstructionUpdateActiveElements();
}
@ -1304,7 +1304,7 @@ public:
RideConstructionInvalidateCurrentTrack();
if (!_currentlyShowingBrakeOrBoosterSpeed)
{
_currentTrackBankEnd = TRACK_BANK_NONE;
_currentTrackBankEnd = TrackBank::None;
_currentTrackPrice = MONEY64_UNDEFINED;
WindowRideConstructionUpdateActiveElements();
}
@ -1331,7 +1331,7 @@ public:
RideConstructionInvalidateCurrentTrack();
if (!_currentlyShowingBrakeOrBoosterSpeed)
{
_currentTrackBankEnd = TRACK_BANK_RIGHT;
_currentTrackBankEnd = TrackBank::Right;
_currentTrackPrice = MONEY64_UNDEFINED;
WindowRideConstructionUpdateActiveElements();
}
@ -1420,7 +1420,7 @@ public:
break;
case TrackElemType::LeftVerticalLoop:
case TrackElemType::RightVerticalLoop:
_currentTrackBankEnd = TRACK_BANK_NONE;
_currentTrackBankEnd = TrackBank::None;
_currentTrackLiftHill &= ~CONSTRUCTION_LIFT_HILL_SELECTED;
break;
case TrackElemType::BlockBrakes:
@ -1660,7 +1660,7 @@ public:
widgets[WIDX_SLOPE_UP].type = WindowWidgetType::FlatBtn;
}
if ((IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_HALF))
&& _currentTrackBankEnd != TRACK_BANK_NONE && _currentTrackSlopeEnd == TRACK_SLOPE_NONE)
&& _currentTrackBankEnd != TrackBank::None && _currentTrackSlopeEnd == TRACK_SLOPE_NONE)
{
if (_currentTrackCurve >= EnumValue(TrackCurve::Left) && _currentTrackCurve <= EnumValue(TrackCurve::RightSmall))
{
@ -1742,7 +1742,7 @@ public:
}
if ((IsTrackEnabled(TRACK_HELIX_DOWN_UNBANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_UNBANKED_QUARTER))
&& _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd == TRACK_BANK_NONE
&& _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd == TrackBank::None
&& (_currentTrackCurve == EnumValue(TrackCurve::Left) || _currentTrackCurve == EnumValue(TrackCurve::Right)))
{
widgets[WIDX_SLOPE_DOWN_STEEP].image = ImageId(SPR_RIDE_CONSTRUCTION_HELIX_DOWN);
@ -1770,7 +1770,7 @@ public:
if ((IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_QUARTER)
|| IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_HALF))
&& (_currentTrackCurve >= EnumValue(TrackCurve::Left) && _currentTrackCurve <= EnumValue(TrackCurve::RightSmall))
&& _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd != TRACK_BANK_NONE)
&& _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd != TrackBank::None)
{
widgets[WIDX_SLOPE_DOWN_STEEP].image = ImageId(SPR_RIDE_CONSTRUCTION_HELIX_DOWN);
widgets[WIDX_SLOPE_DOWN_STEEP].tooltip = STR_RIDE_CONSTRUCTION_HELIX_DOWN_TIP;
@ -1852,7 +1852,7 @@ public:
if ((_currentTrackCurve < EnumValue(TrackCurve::LeftSmall)
|| _currentTrackCurve == (RideConstructionSpecialPieceSelected | TrackElemType::SBendLeft)
|| _currentTrackCurve == (RideConstructionSpecialPieceSelected | TrackElemType::SBendRight))
&& _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd == TRACK_BANK_NONE)
&& _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd == TrackBank::None)
{
widgets[WIDX_BANKING_GROUPBOX].text = STR_RIDE_CONSTRUCTION_TRACK_STYLE;
widgets[WIDX_U_TRACK].type = WindowWidgetType::FlatBtn;
@ -2063,10 +2063,10 @@ public:
}
switch (_currentTrackBankEnd)
{
case TRACK_BANK_LEFT:
case TrackBank::Left:
widgetIndex = WIDX_BANK_LEFT;
break;
case TRACK_BANK_NONE:
case TrackBank::None:
widgetIndex = WIDX_BANK_STRAIGHT;
break;
default:
@ -3594,8 +3594,8 @@ void RideConstructionTooldownConstruct(const ScreenCoordsXY& screenCoords)
auto saveCurrentTrackCurve = _currentTrackCurve;
int32_t savePreviousTrackSlopeEnd = _previousTrackSlopeEnd;
int32_t saveCurrentTrackSlopeEnd = _currentTrackSlopeEnd;
int32_t savePreviousTrackBankEnd = _previousTrackBankEnd;
int32_t saveCurrentTrackBankEnd = _currentTrackBankEnd;
auto savePreviousTrackBankEnd = _previousTrackBankEnd;
auto saveCurrentTrackBankEnd = _currentTrackBankEnd;
int32_t saveCurrentTrackAlternative = _currentTrackAlternative;
int32_t saveCurrentTrackLiftHill = _currentTrackLiftHill;
@ -4383,13 +4383,13 @@ void WindowRideConstructionKeyboardShortcutBankLeft()
switch (_currentTrackBankEnd)
{
case TRACK_BANK_NONE:
case TrackBank::None:
if (!WidgetIsDisabled(*w, WIDX_BANK_LEFT) && w->widgets[WIDX_BANK_LEFT].type != WindowWidgetType::Empty)
{
WindowEventMouseDownCall(w, WIDX_BANK_LEFT);
}
break;
case TRACK_BANK_RIGHT:
case TrackBank::Right:
if (!WidgetIsDisabled(*w, WIDX_BANK_STRAIGHT) && w->widgets[WIDX_BANK_STRAIGHT].type != WindowWidgetType::Empty)
{
WindowEventMouseDownCall(w, WIDX_BANK_STRAIGHT);
@ -4419,13 +4419,13 @@ void WindowRideConstructionKeyboardShortcutBankRight()
switch (_currentTrackBankEnd)
{
case TRACK_BANK_NONE:
case TrackBank::None:
if (!WidgetIsDisabled(*w, WIDX_BANK_RIGHT) && w->widgets[WIDX_BANK_RIGHT].type != WindowWidgetType::Empty)
{
WindowEventMouseDownCall(w, WIDX_BANK_RIGHT);
}
break;
case TRACK_BANK_LEFT:
case TrackBank::Left:
if (!WidgetIsDisabled(*w, WIDX_BANK_STRAIGHT) && w->widgets[WIDX_BANK_STRAIGHT].type != WindowWidgetType::Empty)
{
WindowEventMouseDownCall(w, WIDX_BANK_STRAIGHT);
@ -4501,8 +4501,8 @@ static void WindowRideConstructionMouseUpDemolishNextPiece(const CoordsXYZD& pie
auto savedCurrentTrackCurve = _currentTrackCurve;
int32_t savedPreviousTrackSlopeEnd = _previousTrackSlopeEnd;
int32_t savedCurrentTrackSlopeEnd = _currentTrackSlopeEnd;
int32_t savedPreviousTrackBankEnd = _previousTrackBankEnd;
int32_t savedCurrentTrackBankEnd = _currentTrackBankEnd;
auto savedPreviousTrackBankEnd = _previousTrackBankEnd;
auto savedCurrentTrackBankEnd = _currentTrackBankEnd;
int32_t savedCurrentTrackAlternative = _currentTrackAlternative;
int32_t savedCurrentTrackLiftHill = _currentTrackLiftHill;
RideConstructionSetDefaultNextPiece();

View File

@ -442,7 +442,7 @@ bool WallPlaceAction::WallCheckObstructionWithTrack(
return false;
}
if (ted.Definition.bank_start == 0)
if (ted.Definition.bank_start == TrackBank::None)
{
if (!(ted.Coordinates.rotation_begin & 4))
{
@ -467,7 +467,7 @@ bool WallPlaceAction::WallCheckObstructionWithTrack(
return false;
}
if (ted.Definition.bank_end != 0)
if (ted.Definition.bank_end != TrackBank::None)
{
return false;
}

View File

@ -65,12 +65,12 @@ track_type_t _currentTrackPieceType;
uint8_t _currentTrackSelectionFlags;
uint32_t _rideConstructionNextArrowPulse = 0;
uint8_t _currentTrackSlopeEnd;
uint8_t _currentTrackBankEnd;
TrackBank _currentTrackBankEnd;
uint8_t _currentTrackLiftHill;
uint8_t _currentTrackAlternative;
track_type_t _selectedTrackType;
uint8_t _previousTrackBankEnd;
TrackBank _previousTrackBankEnd;
uint8_t _previousTrackSlopeEnd;
CoordsXYZ _previousTrackPiece;
@ -607,7 +607,7 @@ static void ride_construction_reset_current_piece()
{
_currentTrackCurve = rtd.StartTrackPiece | RideConstructionSpecialPieceSelected;
_currentTrackSlopeEnd = 0;
_currentTrackBankEnd = 0;
_currentTrackBankEnd = TrackBank::None;
_currentTrackLiftHill = 0;
_currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES;
if (rtd.HasFlag(RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED))
@ -615,7 +615,7 @@ static void ride_construction_reset_current_piece()
_currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE;
}
_previousTrackSlopeEnd = 0;
_previousTrackBankEnd = 0;
_previousTrackBankEnd = TrackBank::None;
}
else
{
@ -637,7 +637,7 @@ void RideConstructionSetDefaultNextPiece()
const auto& rtd = ride->GetRideTypeDescriptor();
int32_t z, direction, trackType, curve, bank, slope;
int32_t z, direction, trackType, curve, slope;
TrackBeginEnd trackBeginEnd;
CoordsXYE xyElement;
TileElement* tileElement;
@ -647,6 +647,7 @@ void RideConstructionSetDefaultNextPiece()
switch (_rideConstructionState)
{
case RideConstructionState::Front:
{
direction = _currentTrackPieceDirection;
if (!TrackBlockGetPreviousFromZero(_currentTrackBegin, *ride, direction, &trackBeginEnd))
{
@ -674,7 +675,7 @@ void RideConstructionSetDefaultNextPiece()
ted = &GetTrackElementDescriptor(trackType);
curve = ted->CurveChain.next;
bank = ted->Definition.bank_end;
auto bank = ted->Definition.bank_end;
slope = ted->Definition.vangle_end;
// Set track curve
@ -683,9 +684,9 @@ void RideConstructionSetDefaultNextPiece()
// Set track banking
if (rtd.HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE))
{
if (bank == TRACK_BANK_UPSIDE_DOWN)
if (bank == TrackBank::UpsideDown)
{
bank = TRACK_BANK_NONE;
bank = TrackBank::None;
_currentTrackAlternative ^= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE;
}
}
@ -698,7 +699,9 @@ void RideConstructionSetDefaultNextPiece()
_currentTrackLiftHill = tileElement->AsTrack()->HasChain()
&& ((slope != TRACK_SLOPE_DOWN_25 && slope != TRACK_SLOPE_DOWN_60) || gCheatsEnableChainLiftOnAllTrack);
break;
}
case RideConstructionState::Back:
{
direction = DirectionReverse(_currentTrackPieceDirection);
if (!TrackBlockGetNextFromZero(_currentTrackBegin, *ride, direction, &xyElement, &z, &direction, false))
{
@ -720,7 +723,7 @@ void RideConstructionSetDefaultNextPiece()
ted = &GetTrackElementDescriptor(trackType);
curve = ted->CurveChain.previous;
bank = ted->Definition.bank_start;
auto bank = ted->Definition.bank_start;
slope = ted->Definition.vangle_start;
// Set track curve
@ -729,9 +732,9 @@ void RideConstructionSetDefaultNextPiece()
// Set track banking
if (rtd.HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE))
{
if (bank == TRACK_BANK_UPSIDE_DOWN)
if (bank == TrackBank::UpsideDown)
{
bank = TRACK_BANK_NONE;
bank = TrackBank::None;
_currentTrackAlternative ^= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE;
}
}
@ -746,6 +749,7 @@ void RideConstructionSetDefaultNextPiece()
_currentTrackLiftHill = tileElement->AsTrack()->HasChain();
}
break;
}
default:
break;
}
@ -1120,14 +1124,14 @@ int32_t RideInitialiseConstructionWindow(Ride& ride)
_currentTrackCurve = ride.GetRideTypeDescriptor().StartTrackPiece | RideConstructionSpecialPieceSelected;
_currentTrackSlopeEnd = 0;
_currentTrackBankEnd = 0;
_currentTrackBankEnd = TrackBank::None;
_currentTrackLiftHill = 0;
_currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES;
if (ride.GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED))
_currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE;
_previousTrackBankEnd = 0;
_previousTrackBankEnd = TrackBank::None;
_previousTrackSlopeEnd = 0;
_currentTrackPieceDirection = 0;

View File

@ -13,6 +13,7 @@
#include "../common.h"
#include "../world/Location.hpp"
#include "Station.h"
#include "Track.h"
#include <cstdint>
#include <optional>
@ -48,12 +49,12 @@ extern track_type_t _currentTrackPieceType;
extern uint8_t _currentTrackSelectionFlags;
extern uint32_t _rideConstructionNextArrowPulse;
extern uint8_t _currentTrackSlopeEnd;
extern uint8_t _currentTrackBankEnd;
extern TrackBank _currentTrackBankEnd;
extern uint8_t _currentTrackLiftHill;
extern uint8_t _currentTrackAlternative;
extern track_type_t _selectedTrackType;
extern uint8_t _previousTrackBankEnd;
extern TrackBank _previousTrackBankEnd;
extern uint8_t _previousTrackSlopeEnd;
extern CoordsXYZ _previousTrackPiece;

View File

@ -53,17 +53,17 @@ PitchAndRoll TrackPitchAndRollEnd(track_type_t trackType)
*/
int32_t TrackIsConnectedByShape(TileElement* a, TileElement* b)
{
int32_t trackType, aBank, aAngle, bBank, bAngle;
int32_t trackType, aAngle, bAngle;
trackType = a->AsTrack()->GetTrackType();
const auto* ted = &GetTrackElementDescriptor(trackType);
aBank = ted->Definition.bank_end;
auto aBank = ted->Definition.bank_end;
aAngle = ted->Definition.vangle_end;
aBank = TrackGetActualBank(a, aBank);
trackType = b->AsTrack()->GetTrackType();
ted = &GetTrackElementDescriptor(trackType);
bBank = ted->Definition.bank_start;
auto bBank = ted->Definition.bank_start;
bAngle = ted->Definition.vangle_start;
bBank = TrackGetActualBank(b, bBank);
@ -564,7 +564,7 @@ bool TrackElement::IsBlockStart() const
return false;
}
roll_type_t TrackGetActualBank(TileElement* tileElement, roll_type_t bank)
TrackBank TrackGetActualBank(TileElement* tileElement, TrackBank bank)
{
auto ride = GetRide(tileElement->AsTrack()->GetRideIndex());
if (ride != nullptr)
@ -575,26 +575,26 @@ roll_type_t TrackGetActualBank(TileElement* tileElement, roll_type_t bank)
return bank;
}
roll_type_t TrackGetActualBank2(int32_t rideType, bool isInverted, roll_type_t bank)
TrackBank TrackGetActualBank2(int32_t rideType, bool isInverted, TrackBank bank)
{
if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE))
{
if (isInverted)
{
if (bank == TRACK_BANK_NONE)
if (bank == TrackBank::None)
{
bank = TRACK_BANK_UPSIDE_DOWN;
bank = TrackBank::UpsideDown;
}
else if (bank == TRACK_BANK_UPSIDE_DOWN)
else if (bank == TrackBank::UpsideDown)
{
bank = TRACK_BANK_NONE;
bank = TrackBank::None;
}
}
}
return bank;
}
roll_type_t TrackGetActualBank3(bool useInvertedSprites, TileElement* tileElement)
TrackBank TrackGetActualBank3(bool useInvertedSprites, TileElement* tileElement)
{
auto trackType = tileElement->AsTrack()->GetTrackType();
const auto& ted = GetTrackElementDescriptor(trackType);

View File

@ -23,25 +23,32 @@ constexpr int32_t kBlockBrakeBaseSpeed = 0x20364;
constexpr int32_t kBlockBrakeSpeedOffset = kBlockBrakeBaseSpeed - (kRCT2DefaultBlockBrakeSpeed << 16);
using track_type_t = uint16_t;
using roll_type_t = uint8_t;
using pitch_type_t = uint8_t;
struct ResultWithMessage;
enum class TrackBank : uint8_t
{
None = 0,
Left = 2,
Right = 4,
UpsideDown = 15,
};
struct TrackDefinition
{
track_type_t type;
pitch_type_t vangle_end;
pitch_type_t vangle_start;
roll_type_t bank_end;
roll_type_t bank_start;
TrackBank bank_end;
TrackBank bank_start;
int8_t preview_z_offset;
};
struct PitchAndRoll
{
pitch_type_t Pitch;
roll_type_t Roll;
TrackBank Roll;
};
constexpr bool operator==(const PitchAndRoll& vb1, const PitchAndRoll& vb2)
{
@ -233,14 +240,6 @@ enum
TRACK_VANGLE_REVERSE_FREEFALL = 10
};
enum
{
TRACK_BANK_NONE = 0,
TRACK_BANK_LEFT = 2,
TRACK_BANK_RIGHT = 4,
TRACK_BANK_UPSIDE_DOWN = 15,
};
enum
{
TRACK_ELEM_FLAG_ONLY_UNDERWATER = (1 << 0),
@ -688,9 +687,9 @@ bool TrackTypeIsBooster(track_type_t trackType);
std::optional<CoordsXYZ> GetTrackElementOriginAndApplyChanges(
const CoordsXYZD& location, track_type_t type, uint16_t extra_params, TileElement** output_element, uint16_t flags);
roll_type_t TrackGetActualBank(TileElement* tileElement, roll_type_t bank);
roll_type_t TrackGetActualBank2(int32_t rideType, bool isInverted, roll_type_t bank);
roll_type_t TrackGetActualBank3(bool useInvertedSprites, TileElement* tileElement);
TrackBank TrackGetActualBank(TileElement* tileElement, TrackBank bank);
TrackBank TrackGetActualBank2(int32_t rideType, bool isInverted, TrackBank bank);
TrackBank TrackGetActualBank3(bool useInvertedSprites, TileElement* tileElement);
ResultWithMessage TrackAddStationElement(CoordsXYZD loc, RideId rideIndex, int32_t flags, bool fromTrackDesign);
ResultWithMessage TrackRemoveStationElement(const CoordsXYZD& loc, RideId rideIndex, int32_t flags);

File diff suppressed because it is too large Load Diff

View File

@ -27,10 +27,10 @@ struct TrackDescriptor
{
bool starts_diagonal;
uint8_t slope_start;
uint8_t bank_start;
TrackBank bank_start;
TrackCurve track_curve;
uint8_t slope_end;
uint8_t bank_end;
TrackBank bank_end;
track_type_t track_element;
};

View File

@ -526,10 +526,10 @@ void ScriptEngine::RegisterConstants()
.Constant("Up90", TRACK_SLOPE_UP_90)
.Constant("Down90", TRACK_SLOPE_DOWN_90);
builder.Namespace("TrackBanking")
.Constant("None", TRACK_BANK_NONE)
.Constant("BankLeft", TRACK_BANK_LEFT)
.Constant("BankRight", TRACK_BANK_RIGHT)
.Constant("UpsideDown", TRACK_BANK_UPSIDE_DOWN);
.Constant("None", EnumValue(TrackBank::None))
.Constant("BankLeft", EnumValue(TrackBank::Left))
.Constant("BankRight", EnumValue(TrackBank::Right))
.Constant("UpsideDown", EnumValue(TrackBank::UpsideDown));
}
void ScriptEngine::RefreshPlugins()

View File

@ -102,7 +102,7 @@ int32_t ScTrackSegment::beginSlope_get() const
int32_t ScTrackSegment::beginBank_get() const
{
const auto& ted = GetTrackElementDescriptor(_type);
return ted.Definition.bank_start;
return EnumValue(ted.Definition.bank_start);
}
int32_t ScTrackSegment::endX_get() const
@ -138,7 +138,7 @@ int32_t ScTrackSegment::endSlope_get() const
int32_t ScTrackSegment::endBank_get() const
{
const auto& ted = GetTrackElementDescriptor(_type);
return ted.Definition.bank_end;
return EnumValue(ted.Definition.bank_end);
}
int32_t ScTrackSegment::length_get() const

View File

@ -127,8 +127,8 @@ static std::tuple<bool, track_type_t> window_ride_construction_update_state_get_
uint8_t startSlope = _previousTrackSlopeEnd;
uint8_t endSlope = _currentTrackSlopeEnd;
uint8_t startBank = _previousTrackBankEnd;
uint8_t endBank = _currentTrackBankEnd;
auto startBank = _previousTrackBankEnd;
auto endBank = _currentTrackBankEnd;
if (_rideConstructionState == RideConstructionState::Back)
{
@ -188,7 +188,7 @@ static std::tuple<bool, track_type_t> window_ride_construction_update_state_get_
return std::make_tuple(false, 0);
}
if (startBank != TRACK_BANK_NONE || endBank != TRACK_BANK_NONE)
if (startBank != TrackBank::None || endBank != TrackBank::None)
{
return std::make_tuple(false, 0);
}
@ -197,7 +197,7 @@ static std::tuple<bool, track_type_t> window_ride_construction_update_state_get_
case TrackElemType::LeftVerticalLoop:
case TrackElemType::RightVerticalLoop:
if (startBank != TRACK_BANK_NONE || endBank != TRACK_BANK_NONE)
if (startBank != TrackBank::None || endBank != TrackBank::None)
{
return std::make_tuple(false, 0);
}