mirror of https://github.com/OpenRCT2/OpenRCT2.git
Refactor result passing of TrackDesignAction
This commit is contained in:
parent
e06f9c3ee7
commit
8e06d84a09
|
@ -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<ride_id_t>();
|
||||
_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<ride_id_t>();
|
||||
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<int32_t>(result->rideIndex));
|
||||
intent.putExtra(INTENT_EXTRA_RIDE_ID, static_cast<int32_t>(rideId));
|
||||
context_open_intent(&intent);
|
||||
auto wnd = window_find_by_class(WC_TRACK_DESIGN_PLACE);
|
||||
window_close(wnd);
|
||||
|
|
|
@ -27,26 +27,6 @@ static int32_t place_virtual_track(
|
|||
return place_virtual_track(const_cast<TrackDesign*>(&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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue