diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 7eb127a82b..b4a833162f 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -6380,8 +6380,8 @@ void Vehicle::UpdateLandscapeDoor() const } const auto coords = CoordsXYZ{ x, y, TrackLocation.z }.ToTileStart(); - const auto [tileElement, isUnderground] = MapGetTrackElementAtFromRideIsUnderground(coords, ride); - if (isUnderground && tileElement != nullptr) + const auto tileElement = MapGetTrackElementBeforeSurfaceAtFromRide(coords, ride); + if (tileElement != nullptr) { AnimateLandscapeDoor(coords, *tileElement->AsTrack(), next_vehicle_on_train.IsNull()); } @@ -6441,8 +6441,8 @@ void Vehicle::UpdateLandscapeDoorBackwards() const } const auto coords = CoordsXYZ{ TrackLocation, TrackLocation.z }; - const auto [tileElement, isUnderground] = MapGetTrackElementAtFromRideIsUnderground(coords, ride); - if (isUnderground && tileElement != nullptr) + const auto tileElement = MapGetTrackElementBeforeSurfaceAtFromRide(coords, ride); + if (tileElement != nullptr) { AnimateLandscapeDoor(coords, *tileElement->AsTrack(), next_vehicle_on_train.IsNull()); } diff --git a/src/openrct2/world/Map.cpp b/src/openrct2/world/Map.cpp index 70b67dd8b3..878061bd85 100644 --- a/src/openrct2/world/Map.cpp +++ b/src/openrct2/world/Map.cpp @@ -2096,23 +2096,16 @@ TileElement* MapGetTrackElementAtFromRide(const CoordsXYZ& trackPos, RideId ride return nullptr; }; -/** - * Gets the track element at x, y, z that is the given track type and sequence, and whether it is underground. - * @param x x units, not tiles. - * @param y y units, not tiles. - * @param z Base height. - */ -std::pair MapGetTrackElementAtFromRideIsUnderground(const CoordsXYZ& trackPos, const RideId rideIndex) +TileElement* MapGetTrackElementBeforeSurfaceAtFromRide(const CoordsXYZ& trackPos, const RideId rideIndex) { TileElement* tileElement = MapGetFirstElementAt(trackPos); if (tileElement == nullptr) - return std::pair(nullptr, false); + return nullptr; const auto trackTilePos = TileCoordsXYZ{ trackPos }; - bool isUnderground = true; do { if (tileElement->GetType() == TileElementType::Surface) - isUnderground = false; + return nullptr; if (tileElement->GetType() != TileElementType::Track) continue; if (tileElement->BaseHeight != trackTilePos.z) @@ -2120,10 +2113,10 @@ std::pair MapGetTrackElementAtFromRideIsUnderground(const Co if (tileElement->AsTrack()->GetRideIndex() != rideIndex) continue; - return std::pair(tileElement, isUnderground); + return tileElement; } while (!(tileElement++)->IsLastForTile()); - return std::pair(nullptr, false); + return nullptr; }; /** diff --git a/src/openrct2/world/Map.h b/src/openrct2/world/Map.h index 5844bfccbd..06c890dc70 100644 --- a/src/openrct2/world/Map.h +++ b/src/openrct2/world/Map.h @@ -247,7 +247,7 @@ TrackElement* MapGetTrackElementAtOfTypeSeq(const CoordsXYZD& location, OpenRCT2 TileElement* MapGetTrackElementAtOfTypeFromRide(const CoordsXYZ& trackPos, OpenRCT2::TrackElemType trackType, RideId rideIndex); TileElement* MapGetTrackElementAtFromRide(const CoordsXYZ& trackPos, RideId rideIndex); TileElement* MapGetTrackElementAtWithDirectionFromRide(const CoordsXYZD& trackPos, RideId rideIndex); -std::pair MapGetTrackElementAtFromRideIsUnderground(const CoordsXYZ& trackPos, RideId rideIndex); +TileElement* MapGetTrackElementBeforeSurfaceAtFromRide(const CoordsXYZ& trackPos, RideId rideIndex); bool MapIsLocationAtEdge(const CoordsXY& loc);