1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-16 11:33:03 +01:00

Prevent track design ghost add/delete when shift height is invalid

This commit is contained in:
mix
2025-11-04 00:16:16 +00:00
parent 8d93ac4448
commit 719dcbb650

View File

@@ -219,25 +219,26 @@ namespace OpenRCT2::Ui::Windows
if (GameIsNotPaused() || getGameState().cheats.buildInPauseMode)
{
ClearProvisional();
auto res = FindValidTrackDesignPlaceHeight(trackLoc, GAME_COMMAND_FLAG_NO_SPEND | GAME_COMMAND_FLAG_GHOST);
CoordsXYZD ghostTrackLoc = trackLoc;
auto res = FindValidTrackDesignPlaceHeight(ghostTrackLoc, GAME_COMMAND_FLAG_NO_SPEND | GAME_COMMAND_FLAG_GHOST);
if (res.Error == GameActions::Status::Ok)
{
// Valid location found. Place the ghost at the location.
auto tdAction = GameActions::TrackDesignAction(trackLoc, *_trackDesign, !gTrackDesignSceneryToggle);
auto tdAction = GameActions::TrackDesignAction(ghostTrackLoc, *_trackDesign, !gTrackDesignSceneryToggle);
tdAction.SetFlags(GAME_COMMAND_FLAG_NO_SPEND | GAME_COMMAND_FLAG_GHOST);
tdAction.SetCallback([&](const GameActions::GameAction*, const GameActions::Result* result) {
if (result->Error == GameActions::Status::Ok)
{
_placementGhostRideId = result->GetData<RideId>();
_placementGhostLoc = trackLoc;
_placementGhostLoc = ghostTrackLoc;
_hasPlacementGhost = true;
}
});
res = GameActions::Execute(&tdAction, getGameState());
cost = res.Error == GameActions::Status::Ok ? res.Cost : kMoney64Undefined;
VirtualFloorSetHeight(trackLoc.z);
VirtualFloorSetHeight(ghostTrackLoc.z);
}
}