mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-28 09:14:58 +01:00
* Implement landscape door updating * Implement door drawing for Ghost Train * Amend changelog and bump network version * Apply review requests * Always return default seat rotation for ride types with landscape doors * Fix comment * Update replays Co-authored-by: duncanspumpkin <duncans_pumpkin@hotmail.co.uk>
This commit is contained in:
committed by
GitHub
parent
b1e5a11bf3
commit
60d1e94046
@@ -7483,6 +7483,44 @@ void Vehicle::UpdateSceneryDoor() const
|
||||
{ wallCoords, static_cast<Direction>(direction) }, TrackLocation, next_vehicle_on_train == SPRITE_INDEX_NULL);
|
||||
}
|
||||
|
||||
template<bool isBackwards> static void AnimateLandscapeDoor(TrackElement* trackElement, bool isLastVehicle)
|
||||
{
|
||||
auto doorState = isBackwards ? trackElement->GetDoorAState() : trackElement->GetDoorBState();
|
||||
if (!isLastVehicle && doorState == LANDSCAPE_DOOR_CLOSED)
|
||||
{
|
||||
if (isBackwards)
|
||||
trackElement->SetDoorAState(LANDSCAPE_DOOR_OPEN);
|
||||
else
|
||||
trackElement->SetDoorBState(LANDSCAPE_DOOR_OPEN);
|
||||
// TODO: play door open sound
|
||||
}
|
||||
|
||||
if (isLastVehicle)
|
||||
{
|
||||
if (isBackwards)
|
||||
trackElement->SetDoorAState(LANDSCAPE_DOOR_CLOSED);
|
||||
else
|
||||
trackElement->SetDoorBState(LANDSCAPE_DOOR_CLOSED);
|
||||
// TODO: play door close sound
|
||||
}
|
||||
}
|
||||
|
||||
void Vehicle::UpdateLandscapeDoor() const
|
||||
{
|
||||
const auto* currentRide = GetRide();
|
||||
if (currentRide == nullptr || !currentRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_LANDSCAPE_DOORS))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
auto coords = CoordsXYZ{ x, y, TrackLocation.z }.ToTileStart();
|
||||
auto* tileElement = map_get_track_element_at_from_ride(coords, ride);
|
||||
if (tileElement != nullptr && tileElement->GetType() == static_cast<uint8_t>(TileElementType::Track))
|
||||
{
|
||||
AnimateLandscapeDoor<false>(tileElement->AsTrack(), next_vehicle_on_train == SPRITE_INDEX_NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006DB38B
|
||||
@@ -7539,6 +7577,22 @@ void Vehicle::UpdateSceneryDoorBackwards() const
|
||||
{ wallCoords, static_cast<Direction>(direction) }, TrackLocation, next_vehicle_on_train == SPRITE_INDEX_NULL);
|
||||
}
|
||||
|
||||
void Vehicle::UpdateLandscapeDoorBackwards() const
|
||||
{
|
||||
const auto* currentRide = GetRide();
|
||||
if (currentRide == nullptr || !currentRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_LANDSCAPE_DOORS))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
auto coords = CoordsXYZ{ TrackLocation, TrackLocation.z };
|
||||
auto* tileElement = map_get_track_element_at_from_ride(coords, ride);
|
||||
if (tileElement != nullptr && tileElement->GetType() == static_cast<uint8_t>(TileElementType::Track))
|
||||
{
|
||||
AnimateLandscapeDoor<true>(tileElement->AsTrack(), next_vehicle_on_train == SPRITE_INDEX_NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void vehicle_update_play_water_splash_sound()
|
||||
{
|
||||
if (_vehicleVelocityF64E08 <= BLOCK_BRAKE_BASE_SPEED)
|
||||
@@ -7970,6 +8024,7 @@ bool Vehicle::UpdateTrackMotionForwardsGetNewTrack(uint16_t trackType, Ride* cur
|
||||
|
||||
// Change from original: this used to check if the vehicle allowed doors.
|
||||
UpdateSceneryDoor();
|
||||
UpdateLandscapeDoor();
|
||||
|
||||
bool isGoingBack = false;
|
||||
switch (TrackSubposition)
|
||||
@@ -8113,6 +8168,7 @@ bool Vehicle::UpdateTrackMotionForwardsGetNewTrack(uint16_t trackType, Ride* cur
|
||||
}
|
||||
// Change from original: this used to check if the vehicle allowed doors.
|
||||
UpdateSceneryDoorBackwards();
|
||||
UpdateLandscapeDoorBackwards();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user