diff --git a/src/openrct2-ui/windows/TrackDesignPlace.cpp b/src/openrct2-ui/windows/TrackDesignPlace.cpp index 44397b4ceb..24943c1148 100644 --- a/src/openrct2-ui/windows/TrackDesignPlace.cpp +++ b/src/openrct2-ui/windows/TrackDesignPlace.cpp @@ -289,10 +289,10 @@ static void window_track_place_toolupdate(rct_window* w, rct_widgetindex widgetI // Valid location found. Place the ghost at the location. auto tdAction = TrackDesignAction({ trackLoc, _currentTrackPieceDirection }, *_trackDesign); tdAction.SetFlags(GAME_COMMAND_FLAG_NO_SPEND | GAME_COMMAND_FLAG_GHOST); - tdAction.SetCallback([trackLoc](const GameAction*, const TrackDesignActionResult* result) { + tdAction.SetCallback([trackLoc](const GameAction*, const GameActions::Result* result) { if (result->Error == GameActions::Status::Ok) { - _window_track_place_ride_index = result->rideIndex; + _window_track_place_ride_index = result->GetData(); _windowTrackPlaceLastValid = trackLoc; _window_track_place_last_was_valid = true; } @@ -336,20 +336,21 @@ static void window_track_place_tooldown(rct_window* w, rct_widgetindex widgetInd if (res->Error == GameActions::Status::Ok) { auto tdAction = TrackDesignAction({ trackLoc, _currentTrackPieceDirection }, *_trackDesign); - tdAction.SetCallback([trackLoc](const GameAction*, const TrackDesignActionResult* result) { + tdAction.SetCallback([trackLoc](const GameAction*, const GameActions::Result* result) { if (result->Error == GameActions::Status::Ok) { - auto ride = get_ride(result->rideIndex); + const auto rideId = result->GetData(); + auto ride = get_ride(rideId); if (ride != nullptr) { window_close_by_class(WC_ERROR); OpenRCT2::Audio::Play3D(OpenRCT2::Audio::SoundId::PlaceItem, trackLoc); - _currentRideIndex = result->rideIndex; + _currentRideIndex = rideId; if (track_design_are_entrance_and_exit_placed()) { auto intent = Intent(WC_RIDE); - intent.putExtra(INTENT_EXTRA_RIDE_ID, static_cast(result->rideIndex)); + intent.putExtra(INTENT_EXTRA_RIDE_ID, static_cast(rideId)); context_open_intent(&intent); auto wnd = window_find_by_class(WC_TRACK_DESIGN_PLACE); window_close(wnd); diff --git a/src/openrct2/actions/TrackDesignAction.cpp b/src/openrct2/actions/TrackDesignAction.cpp index 75e2637809..3391960181 100644 --- a/src/openrct2/actions/TrackDesignAction.cpp +++ b/src/openrct2/actions/TrackDesignAction.cpp @@ -27,26 +27,6 @@ static int32_t place_virtual_track( return place_virtual_track(const_cast(&td6), ptdOperation, placeScenery, ride, loc); } -TrackDesignActionResult::TrackDesignActionResult() - : GameActions::Result(GameActions::Status::Ok, STR_NONE) -{ -} - -TrackDesignActionResult::TrackDesignActionResult(GameActions::Status error) - : GameActions::Result(error, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE) -{ -} - -TrackDesignActionResult::TrackDesignActionResult(GameActions::Status error, rct_string_id title, rct_string_id message) - : GameActions::Result(error, title, message) -{ -} - -TrackDesignActionResult::TrackDesignActionResult(GameActions::Status error, rct_string_id message) - : GameActions::Result(error, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, message) -{ -} - TrackDesignAction::TrackDesignAction(const CoordsXYZD& location, const TrackDesign& td) : _loc(location) , _td(td) @@ -83,7 +63,7 @@ GameActions::Result::Ptr TrackDesignAction::Query() const if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::InvalidParameters); + return MakeResult(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } auto& objManager = OpenRCT2::GetContext()->GetObjectManager(); @@ -112,7 +92,7 @@ GameActions::Result::Ptr TrackDesignAction::Query() const if (ride == nullptr) { log_warning("Invalid game command for track placement, ride id = %d", rideIndex); - return MakeResult(GameActions::Status::Unknown); + return MakeResult(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } money32 cost = 0; @@ -132,9 +112,11 @@ GameActions::Result::Ptr TrackDesignAction::Query() const GameActions::ExecuteNested(&gameAction); if (cost == MONEY32_UNDEFINED) { - return MakeResult(GameActions::Status::Disallowed, error_reason); + return MakeResult(GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, error_reason); } res->Cost = cost; + res->SetData(ride_id_t{ RIDE_ID_NULL }); + return res; } @@ -172,7 +154,7 @@ GameActions::Result::Ptr TrackDesignAction::Execute() const if (ride == nullptr) { log_warning("Invalid game command for track placement, ride id = %d", rideIndex); - return MakeResult(GameActions::Status::Unknown); + return MakeResult(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } money32 cost = 0; @@ -210,7 +192,7 @@ GameActions::Result::Ptr TrackDesignAction::Execute() const gameAction.SetFlags(GetFlags()); GameActions::ExecuteNested(&gameAction); - return MakeResult(GameActions::Status::Disallowed, error_reason); + return MakeResult(GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, error_reason); } if (entryIndex != OBJECT_ENTRY_INDEX_NULL) @@ -269,6 +251,7 @@ GameActions::Result::Ptr TrackDesignAction::Execute() const r = GameActions::ExecuteNested(&gameAction); } res->Cost = cost; - res->rideIndex = ride->id; + res->SetData(ride_id_t{ ride->id }); + return res; } diff --git a/src/openrct2/actions/TrackDesignAction.h b/src/openrct2/actions/TrackDesignAction.h index 1390bc3627..8ce73431f0 100644 --- a/src/openrct2/actions/TrackDesignAction.h +++ b/src/openrct2/actions/TrackDesignAction.h @@ -12,18 +12,7 @@ #include "../ride/TrackDesign.h" #include "GameAction.h" -class TrackDesignActionResult final : public GameActions::Result -{ -public: - TrackDesignActionResult(); - TrackDesignActionResult(GameActions::Status error); - TrackDesignActionResult(GameActions::Status error, rct_string_id title, rct_string_id message); - TrackDesignActionResult(GameActions::Status error, rct_string_id message); - - ride_id_t rideIndex = RIDE_ID_NULL; -}; - -DEFINE_GAME_ACTION(TrackDesignAction, GameCommand::PlaceTrackDesign, TrackDesignActionResult) +DEFINE_GAME_ACTION(TrackDesignAction, GameCommand::PlaceTrackDesign, GameActions::Result) { private: CoordsXYZD _loc;