From a29b369ff8f21e7a3a1881d3d070db0566ef60b6 Mon Sep 17 00:00:00 2001 From: frutiemax Date: Sun, 22 Aug 2021 10:52:38 -0400 Subject: [PATCH] Part of #13874: Replace Sequence Element Wall table --- src/openrct2/actions/TrackPlaceAction.cpp | 7 +++---- src/openrct2/actions/WallPlaceAction.cpp | 4 +++- src/openrct2/ride/TrackData.cpp | 2 +- src/openrct2/ride/TrackData.h | 2 -- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/openrct2/actions/TrackPlaceAction.cpp b/src/openrct2/actions/TrackPlaceAction.cpp index abc26b7e26..e6948a5619 100644 --- a/src/openrct2/actions/TrackPlaceAction.cpp +++ b/src/openrct2/actions/TrackPlaceAction.cpp @@ -400,11 +400,10 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const uint32_t rideTypeFlags = ride->GetRideTypeDescriptor().Flags; - const uint8_t(*wallEdges)[16]; - wallEdges = &TrackSequenceElementAllowedWallEdges[_trackType]; + const auto& teDescriptor = GetTrackElementDescriptor(_trackType); + auto wallEdges = teDescriptor.SequenceElementAllowedWallEdges; money32 cost = 0; - const auto& teDescriptor = GetTrackElementDescriptor(_trackType); const rct_preview_track* trackBlock = teDescriptor.Block; for (int32_t blockIndex = 0; trackBlock->index != 0xFF; trackBlock++, blockIndex++) { @@ -452,7 +451,7 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const else { // Remove walls in the directions this track intersects - uint8_t intersectingDirections = (*wallEdges)[blockIndex]; + uint8_t intersectingDirections = wallEdges[blockIndex]; intersectingDirections ^= 0x0F; intersectingDirections = rol4(intersectingDirections, _origin.direction); for (int32_t i = 0; i < NumOrthogonalDirections; i++) diff --git a/src/openrct2/actions/WallPlaceAction.cpp b/src/openrct2/actions/WallPlaceAction.cpp index a81bff4968..ed78773c68 100644 --- a/src/openrct2/actions/WallPlaceAction.cpp +++ b/src/openrct2/actions/WallPlaceAction.cpp @@ -20,6 +20,7 @@ #include "../world/Surface.h" #include "../world/Wall.h" +using namespace OpenRCT2::TrackMetaData; WallPlaceActionResult::WallPlaceActionResult() : GameActions::Result(GameActions::Status::Ok, STR_CANT_BUILD_THIS_HERE) { @@ -592,7 +593,8 @@ bool WallPlaceAction::TrackIsAllowedWallEdges( { if (!GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_TRACK_NO_WALLS)) { - if (TrackSequenceElementAllowedWallEdges[trackType][trackSequence] & (1 << direction)) + const auto& teDescriptor = GetTrackElementDescriptor(trackType); + if (teDescriptor.SequenceElementAllowedWallEdges[trackSequence] & (1 << direction)) { return true; } diff --git a/src/openrct2/ride/TrackData.cpp b/src/openrct2/ride/TrackData.cpp index e6dacd20f8..256db9beaa 100644 --- a/src/openrct2/ride/TrackData.cpp +++ b/src/openrct2/ride/TrackData.cpp @@ -4587,7 +4587,7 @@ const static uint32_t TrackHeightMarkerPositions[TrackElemType::Count] = { }; /** rct2: 0x00999A94 */ -const uint8_t TrackSequenceElementAllowedWallEdges[TrackElemType::Count][MaxSequencesPerPiece] = { +const static uint8_t TrackSequenceElementAllowedWallEdges[TrackElemType::Count][MaxSequencesPerPiece] = { { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Flat { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::EndStation { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::BeginStation diff --git a/src/openrct2/ride/TrackData.h b/src/openrct2/ride/TrackData.h index e3c38f20fe..f95adeb9e2 100644 --- a/src/openrct2/ride/TrackData.h +++ b/src/openrct2/ride/TrackData.h @@ -57,8 +57,6 @@ constexpr const dodgems_track_size DodgemsTrackSize(track_type_t type) return { 0, 0, 0, 0 }; } -extern const uint8_t TrackSequenceElementAllowedWallEdges[TrackElemType::Count][16]; - struct TrackElementDescriptor { rct_track_coordinates Coordinates;