diff --git a/src/openrct2-ui/windows/LandRights.cpp b/src/openrct2-ui/windows/LandRights.cpp index 28019f13c9..50f1fb3317 100644 --- a/src/openrct2-ui/windows/LandRights.cpp +++ b/src/openrct2-ui/windows/LandRights.cpp @@ -358,7 +358,7 @@ static void WindowLandRightsToolUpdateLandRights(const ScreenCoordsXY& screenCoo : LandBuyRightSetting::BuyConstructionRights); auto res = GameActions::Query(&landBuyRightsAction); - _landRightsCost = res->Error == GameActions::Status::Ok ? res->Cost : MONEY32_UNDEFINED; + _landRightsCost = res.Error == GameActions::Status::Ok ? res.Cost : MONEY32_UNDEFINED; } /** diff --git a/src/openrct2-ui/windows/Map.cpp b/src/openrct2-ui/windows/Map.cpp index 6aa9885e66..2b4e41b467 100644 --- a/src/openrct2-ui/windows/Map.cpp +++ b/src/openrct2-ui/windows/Map.cpp @@ -1327,9 +1327,9 @@ static void WindowMapPlaceParkEntranceToolDown(const ScreenCoordsXY& screenCoord { auto gameAction = PlaceParkEntranceAction(parkEntrancePosition, gFootpathSelectedId); auto result = GameActions::Execute(&gameAction); - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { - OpenRCT2::Audio::Play3D(OpenRCT2::Audio::SoundId::PlaceItem, result->Position); + OpenRCT2::Audio::Play3D(OpenRCT2::Audio::SoundId::PlaceItem, result.Position); } } } @@ -1352,9 +1352,9 @@ static void WindowMapSetPeepSpawnToolDown(const ScreenCoordsXY& screenCoords) auto gameAction = PlacePeepSpawnAction({ mapCoords, mapZ, static_cast(direction) }); auto result = GameActions::Execute(&gameAction); - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { - OpenRCT2::Audio::Play3D(OpenRCT2::Audio::SoundId::PlaceItem, result->Position); + OpenRCT2::Audio::Play3D(OpenRCT2::Audio::SoundId::PlaceItem, result.Position); } } diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 1c6c643e16..559fb21717 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -1804,9 +1804,9 @@ static void WindowRideConstructionConstruct(rct_window* w) } auto res = GameActions::Execute(&trackPlaceAction); // Used by some functions - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) { - if (auto* error = std::get_if(&res->ErrorMessage)) + if (auto* error = std::get_if(&res.ErrorMessage)) gGameCommandErrorText = *error; else gGameCommandErrorText = STR_NONE; @@ -1815,10 +1815,10 @@ static void WindowRideConstructionConstruct(rct_window* w) else { gGameCommandErrorText = STR_NONE; - _trackPlaceCost = res->Cost; + _trackPlaceCost = res.Cost; } - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) { return; } @@ -1829,7 +1829,7 @@ static void WindowRideConstructionConstruct(rct_window* w) _currentTrackSelectionFlags |= TRACK_SELECTION_FLAG_TRACK_PLACE_ACTION_QUEUED; } - const auto resultData = res->GetData(); + const auto resultData = res.GetData(); if (resultData.GroundFlags & ELEMENT_IS_UNDERGROUND) { viewport_set_visibility(1); diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index 84d84b77ee..62f1bcd4e1 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -1817,13 +1817,13 @@ static void WindowTopToolbarSceneryToolDown(const ScreenCoordsXY& windowPos, rct { cur_grid_x, cur_grid_y, gSceneryPlaceZ, gSceneryPlaceRotation }, quadrant, selectedScenery, gWindowSceneryPrimaryColour, gWindowScenerySecondaryColour); auto res = GameActions::Query(&smallSceneryPlaceAction); - success = res->Error; - if (res->Error == GameActions::Status::Ok) + success = res.Error; + if (res.Error == GameActions::Status::Ok) { break; } - if (res->Error == GameActions::Status::InsufficientFunds) + if (res.Error == GameActions::Status::InsufficientFunds) { break; } @@ -1847,12 +1847,12 @@ static void WindowTopToolbarSceneryToolDown(const ScreenCoordsXY& windowPos, rct } }); auto res = GameActions::Execute(&smallSceneryPlaceAction); - if (res->Error == GameActions::Status::Ok) + if (res.Error == GameActions::Status::Ok) { forceError = false; } - if (res->Error == GameActions::Status::InsufficientFunds) + if (res.Error == GameActions::Status::InsufficientFunds) { break; } @@ -1900,12 +1900,12 @@ static void WindowTopToolbarSceneryToolDown(const ScreenCoordsXY& windowPos, rct gWindowScenerySecondaryColour, gWindowSceneryTertiaryColour); auto res = GameActions::Query(&wallPlaceAction); - if (res->Error == GameActions::Status::Ok) + if (res.Error == GameActions::Status::Ok) { break; } - if (const auto* message = std::get_if(&res->ErrorMessage)) + if (const auto* message = std::get_if(&res.ErrorMessage)) { if (*message == STR_NOT_ENOUGH_CASH_REQUIRES || *message == STR_CAN_ONLY_BUILD_THIS_ON_WATER) { @@ -1953,12 +1953,12 @@ static void WindowTopToolbarSceneryToolDown(const ScreenCoordsXY& windowPos, rct loc, selectedScenery, gWindowSceneryPrimaryColour, gWindowScenerySecondaryColour); auto res = GameActions::Query(&sceneryPlaceAction); - if (res->Error == GameActions::Status::Ok) + if (res.Error == GameActions::Status::Ok) { break; } - if (const auto* message = std::get_if(&res->ErrorMessage)) + if (const auto* message = std::get_if(&res.ErrorMessage)) { if (*message == STR_NOT_ENOUGH_CASH_REQUIRES || *message == STR_CAN_ONLY_BUILD_THIS_ON_WATER) { @@ -2095,7 +2095,7 @@ static void TopToolbarToolUpdateSceneryClear(const ScreenCoordsXY& screenPos) auto action = GetClearAction(); auto result = GameActions::Query(&action); - auto cost = (result->Error == GameActions::Status::Ok ? result->Cost : MONEY64_UNDEFINED); + auto cost = (result.Error == GameActions::Status::Ok ? result.Cost : MONEY64_UNDEFINED); if (gClearSceneryCost != cost) { gClearSceneryCost = cost; @@ -2360,10 +2360,10 @@ static void TopToolbarToolUpdateWater(const ScreenCoordsXY& screenPos) { gMapSelectPositionA.x, gMapSelectPositionA.y, gMapSelectPositionB.x, gMapSelectPositionB.y }); auto res = GameActions::Query(&waterLowerAction); - money64 lowerCost = res->Error == GameActions::Status::Ok ? res->Cost : MONEY64_UNDEFINED; + money64 lowerCost = res.Error == GameActions::Status::Ok ? res.Cost : MONEY64_UNDEFINED; res = GameActions::Query(&waterRaiseAction); - money64 raiseCost = res->Error == GameActions::Status::Ok ? res->Cost : MONEY64_UNDEFINED; + money64 raiseCost = res.Error == GameActions::Status::Ok ? res.Cost : MONEY64_UNDEFINED; if (gWaterToolRaiseCost != raiseCost || gWaterToolLowerCost != lowerCost) { @@ -2452,10 +2452,10 @@ static void TopToolbarToolUpdateWater(const ScreenCoordsXY& screenPos) { gMapSelectPositionA.x, gMapSelectPositionA.y, gMapSelectPositionB.x, gMapSelectPositionB.y }); auto res = GameActions::Query(&waterLowerAction); - money64 lowerCost = res->Error == GameActions::Status::Ok ? res->Cost : MONEY64_UNDEFINED; + money64 lowerCost = res.Error == GameActions::Status::Ok ? res.Cost : MONEY64_UNDEFINED; res = GameActions::Query(&waterRaiseAction); - money64 raiseCost = res->Error == GameActions::Status::Ok ? res->Cost : MONEY64_UNDEFINED; + money64 raiseCost = res.Error == GameActions::Status::Ok ? res.Cost : MONEY64_UNDEFINED; if (gWaterToolRaiseCost != raiseCost || gWaterToolLowerCost != lowerCost) { @@ -2480,10 +2480,10 @@ static money64 TryPlaceGhostSmallScenery( auto smallSceneryPlaceAction = SmallSceneryPlaceAction(loc, quadrant, entryIndex, primaryColour, secondaryColour); smallSceneryPlaceAction.SetFlags(GAME_COMMAND_FLAG_GHOST | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED); auto res = GameActions::Execute(&smallSceneryPlaceAction); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) return MONEY64_UNDEFINED; - const auto placementData = res->GetData(); + const auto placementData = res.GetData(); gSceneryPlaceRotation = loc.direction; gSceneryPlaceObject.SceneryType = SCENERY_TYPE_SMALL; @@ -2503,7 +2503,7 @@ static money64 TryPlaceGhostSmallScenery( } gSceneryGhostType |= SCENERY_GHOST_FLAG_0; - return res->Cost; + return res.Cost; } static money64 TryPlaceGhostPathAddition(CoordsXYZ loc, ObjectEntryIndex entryIndex) @@ -2522,10 +2522,10 @@ static money64 TryPlaceGhostPathAddition(CoordsXYZ loc, ObjectEntryIndex entryIn gSceneryGhostType |= SCENERY_GHOST_FLAG_1; }); auto res = GameActions::Execute(&footpathAdditionPlaceAction); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) return MONEY64_UNDEFINED; - return res->Cost; + return res.Cost; } static money64 TryPlaceGhostWall( @@ -2549,10 +2549,10 @@ static money64 TryPlaceGhostWall( }); auto res = GameActions::Execute(&wallPlaceAction); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) return MONEY64_UNDEFINED; - return res->Cost; + return res.Cost; } static money64 TryPlaceGhostLargeScenery( @@ -2564,10 +2564,10 @@ static money64 TryPlaceGhostLargeScenery( auto sceneryPlaceAction = LargeSceneryPlaceAction(loc, entryIndex, primaryColour, secondaryColour); sceneryPlaceAction.SetFlags(GAME_COMMAND_FLAG_GHOST | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_NO_SPEND); auto res = GameActions::Execute(&sceneryPlaceAction); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) return MONEY64_UNDEFINED; - const auto placementData = res->GetData(); + const auto placementData = res.GetData(); gSceneryPlaceRotation = loc.direction; @@ -2584,7 +2584,7 @@ static money64 TryPlaceGhostLargeScenery( } gSceneryGhostType |= SCENERY_GHOST_FLAG_3; - return res->Cost; + return res.Cost; } static money64 TryPlaceGhostBanner(CoordsXYZD loc, ObjectEntryIndex entryIndex) @@ -2596,14 +2596,14 @@ static money64 TryPlaceGhostBanner(CoordsXYZD loc, ObjectEntryIndex entryIndex) auto bannerPlaceAction = BannerPlaceAction(loc, entryIndex, primaryColour); bannerPlaceAction.SetFlags(GAME_COMMAND_FLAG_GHOST | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_NO_SPEND); auto res = GameActions::Execute(&bannerPlaceAction); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) return MONEY64_UNDEFINED; gSceneryGhostPosition = loc; gSceneryGhostPosition.z += PATH_HEIGHT_STEP; gSceneryPlaceRotation = loc.direction; gSceneryGhostType |= SCENERY_GHOST_FLAG_4; - return res->Cost; + return res.Cost; } /** @@ -3030,7 +3030,7 @@ static money64 SelectionRaiseLand(uint8_t flags) false); auto res = (flags & GAME_COMMAND_FLAG_APPLY) ? GameActions::Execute(&landSmoothAction) : GameActions::Query(&landSmoothAction); - return res->Error == GameActions::Status::Ok ? res->Cost : MONEY64_UNDEFINED; + return res.Error == GameActions::Status::Ok ? res.Cost : MONEY64_UNDEFINED; } auto landRaiseAction = LandRaiseAction( @@ -3039,7 +3039,7 @@ static money64 SelectionRaiseLand(uint8_t flags) auto res = (flags & GAME_COMMAND_FLAG_APPLY) ? GameActions::Execute(&landRaiseAction) : GameActions::Query(&landRaiseAction); - return res->Error == GameActions::Status::Ok ? res->Cost : MONEY64_UNDEFINED; + return res.Error == GameActions::Status::Ok ? res.Cost : MONEY64_UNDEFINED; } /** @@ -3061,7 +3061,7 @@ static money64 SelectionLowerLand(uint8_t flags) true); auto res = (flags & GAME_COMMAND_FLAG_APPLY) ? GameActions::Execute(&landSmoothAction) : GameActions::Query(&landSmoothAction); - return res->Error == GameActions::Status::Ok ? res->Cost : MONEY64_UNDEFINED; + return res.Error == GameActions::Status::Ok ? res.Cost : MONEY64_UNDEFINED; } auto landLowerAction = LandLowerAction( @@ -3070,7 +3070,7 @@ static money64 SelectionLowerLand(uint8_t flags) auto res = (flags & GAME_COMMAND_FLAG_APPLY) ? GameActions::Execute(&landLowerAction) : GameActions::Query(&landLowerAction); - return res->Error == GameActions::Status::Ok ? res->Cost : MONEY64_UNDEFINED; + return res.Error == GameActions::Status::Ok ? res.Cost : MONEY64_UNDEFINED; } /** diff --git a/src/openrct2-ui/windows/TrackDesignPlace.cpp b/src/openrct2-ui/windows/TrackDesignPlace.cpp index 8b13768fd9..50f894cb31 100644 --- a/src/openrct2-ui/windows/TrackDesignPlace.cpp +++ b/src/openrct2-ui/windows/TrackDesignPlace.cpp @@ -225,9 +225,9 @@ static void WindowTrackPlaceUpdate(rct_window* w) window_close(w); } -static GameActions::Result::Ptr FindValidTrackDesignPlaceHeight(CoordsXYZ& loc, uint32_t flags) +static GameActions::Result FindValidTrackDesignPlaceHeight(CoordsXYZ& loc, uint32_t flags) { - GameActions::Result::Ptr res; + GameActions::Result res; for (int32_t i = 0; i < 7; i++, loc.z += 8) { auto tdAction = TrackDesignAction(CoordsXYZD{ loc.x, loc.y, loc.z, _currentTrackPieceDirection }, *_trackDesign); @@ -236,7 +236,7 @@ static GameActions::Result::Ptr FindValidTrackDesignPlaceHeight(CoordsXYZ& loc, // If successful don't keep trying. // If failure due to no money then increasing height only makes problem worse - if (res->Error == GameActions::Status::Ok || res->Error == GameActions::Status::InsufficientFunds) + if (res.Error == GameActions::Status::Ok || res.Error == GameActions::Status::InsufficientFunds) { return res; } @@ -283,7 +283,7 @@ static void WindowTrackPlaceToolupdate(rct_window* w, rct_widgetindex widgetInde WindowTrackPlaceClearProvisional(); auto res = FindValidTrackDesignPlaceHeight(trackLoc, GAME_COMMAND_FLAG_NO_SPEND | GAME_COMMAND_FLAG_GHOST); - if (res->Error == GameActions::Status::Ok) + if (res.Error == GameActions::Status::Ok) { // Valid location found. Place the ghost at the location. auto tdAction = TrackDesignAction({ trackLoc, _currentTrackPieceDirection }, *_trackDesign); @@ -297,7 +297,7 @@ static void WindowTrackPlaceToolupdate(rct_window* w, rct_widgetindex widgetInde } }); res = GameActions::Execute(&tdAction); - cost = res->Error == GameActions::Status::Ok ? res->Cost : MONEY32_UNDEFINED; + cost = res.Error == GameActions::Status::Ok ? res.Cost : MONEY32_UNDEFINED; } } @@ -332,7 +332,7 @@ static void WindowTrackPlaceTooldown(rct_window* w, rct_widgetindex widgetIndex, CoordsXYZ trackLoc = { mapCoords, mapZ }; auto res = FindValidTrackDesignPlaceHeight(trackLoc, 0); - if (res->Error == GameActions::Status::Ok) + if (res.Error == GameActions::Status::Ok) { auto tdAction = TrackDesignAction({ trackLoc, _currentTrackPieceDirection }, *_trackDesign); tdAction.SetCallback([trackLoc](const GameAction*, const GameActions::Result* result) { @@ -375,7 +375,7 @@ static void WindowTrackPlaceTooldown(rct_window* w, rct_widgetindex widgetIndex, OpenRCT2::Audio::Play3D(OpenRCT2::Audio::SoundId::Error, trackLoc); auto windowManager = GetContext()->GetUiContext()->GetWindowManager(); - windowManager->ShowError(res->GetErrorTitle(), res->GetErrorMessage()); + windowManager->ShowError(res.GetErrorTitle(), res.GetErrorMessage()); } /** @@ -437,7 +437,7 @@ void TrackPlaceRestoreProvisional() auto tdAction = TrackDesignAction({ _windowTrackPlaceLastValid, _currentTrackPieceDirection }, *_trackDesign); tdAction.SetFlags(GAME_COMMAND_FLAG_NO_SPEND | GAME_COMMAND_FLAG_GHOST); auto res = GameActions::Execute(&tdAction); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) { _window_track_place_last_was_valid = false; } diff --git a/src/openrct2/ReplayManager.cpp b/src/openrct2/ReplayManager.cpp index 11ce4acfa5..c868668bff 100644 --- a/src/openrct2/ReplayManager.cpp +++ b/src/openrct2/ReplayManager.cpp @@ -844,18 +844,18 @@ namespace OpenRCT2 GameAction* action = command.action.get(); action->SetFlags(action->GetFlags() | GAME_COMMAND_FLAG_REPLAY); - GameActions::Result::Ptr result = GameActions::Execute(action); - if (result->Error == GameActions::Status::Ok) + GameActions::Result result = GameActions::Execute(action); + if (result.Error == GameActions::Status::Ok) { isPositionValid = true; } // Focus camera on event. - if (isPositionValid && !result->Position.IsNull()) + if (isPositionValid && !result.Position.IsNull()) { auto* mainWindow = window_get_main(); if (mainWindow != nullptr) - window_scroll_to_location(mainWindow, result->Position); + window_scroll_to_location(mainWindow, result.Position); } replayQueue.erase(replayQueue.begin()); diff --git a/src/openrct2/actions/BalloonPressAction.cpp b/src/openrct2/actions/BalloonPressAction.cpp index 2c3fceafe8..46460604aa 100644 --- a/src/openrct2/actions/BalloonPressAction.cpp +++ b/src/openrct2/actions/BalloonPressAction.cpp @@ -34,27 +34,27 @@ void BalloonPressAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_spriteIndex); } -GameActions::Result::Ptr BalloonPressAction::Query() const +GameActions::Result BalloonPressAction::Query() const { auto balloon = TryGetEntity(_spriteIndex); if (balloon == nullptr) { log_error("Tried getting invalid sprite for balloon: %u", _spriteIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - return MakeResult(); + return GameActions::Result(); } -GameActions::Result::Ptr BalloonPressAction::Execute() const +GameActions::Result BalloonPressAction::Execute() const { auto balloon = TryGetEntity(_spriteIndex); if (balloon == nullptr) { log_error("Tried getting invalid sprite for balloon: %u", _spriteIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } balloon->Press(); - return MakeResult(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/BalloonPressAction.h b/src/openrct2/actions/BalloonPressAction.h index a7f83e6385..6e126b3c3c 100644 --- a/src/openrct2/actions/BalloonPressAction.h +++ b/src/openrct2/actions/BalloonPressAction.h @@ -24,6 +24,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/BannerPlaceAction.cpp b/src/openrct2/actions/BannerPlaceAction.cpp index f1b21e63ae..5442191c72 100644 --- a/src/openrct2/actions/BannerPlaceAction.cpp +++ b/src/openrct2/actions/BannerPlaceAction.cpp @@ -44,90 +44,95 @@ void BannerPlaceAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_bannerType) << DS_TAG(_primaryColour); } -GameActions::Result::Ptr BannerPlaceAction::Query() const +GameActions::Result BannerPlaceAction::Query() const { - auto res = MakeResult(); - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = _loc.z; - res->Expenditure = ExpenditureType::Landscaping; - res->ErrorTitle = STR_CANT_POSITION_THIS_HERE; + auto res = GameActions::Result(); + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = _loc.z; + res.Expenditure = ExpenditureType::Landscaping; + res.ErrorTitle = STR_CANT_POSITION_THIS_HERE; if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } if (!MapCheckCapacityAndReorganise(_loc)) { log_error("No free map elements."); - return MakeResult(GameActions::Status::NoFreeElements, STR_CANT_POSITION_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); + return GameActions::Result( + GameActions::Status::NoFreeElements, STR_CANT_POSITION_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); } auto pathElement = GetValidPathElement(); if (pathElement == nullptr) { - return MakeResult( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_CAN_ONLY_BE_BUILT_ACROSS_PATHS); } if (!map_can_build_at(_loc)) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_POSITION_THIS_HERE, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_CANT_POSITION_THIS_HERE, STR_LAND_NOT_OWNED_BY_PARK); } auto baseHeight = _loc.z + PATH_HEIGHT_STEP; BannerElement* existingBannerElement = map_get_banner_element_at({ _loc.x, _loc.y, baseHeight }, _loc.direction); if (existingBannerElement != nullptr) { - return MakeResult(GameActions::Status::ItemAlreadyPlaced, STR_CANT_POSITION_THIS_HERE, STR_BANNER_SIGN_IN_THE_WAY); + return GameActions::Result( + GameActions::Status::ItemAlreadyPlaced, STR_CANT_POSITION_THIS_HERE, STR_BANNER_SIGN_IN_THE_WAY); } if (HasReachedBannerLimit()) { log_error("No free banners available"); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_TOO_MANY_BANNERS_IN_GAME); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_TOO_MANY_BANNERS_IN_GAME); } auto* bannerEntry = get_banner_entry(_bannerType); if (bannerEntry == nullptr) { log_error("Invalid banner object type. bannerType = ", _bannerType); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } - res->Cost = bannerEntry->price; + res.Cost = bannerEntry->price; return res; } -GameActions::Result::Ptr BannerPlaceAction::Execute() const +GameActions::Result BannerPlaceAction::Execute() const { - auto res = MakeResult(); - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = _loc.z; - res->Expenditure = ExpenditureType::Landscaping; - res->ErrorTitle = STR_CANT_POSITION_THIS_HERE; + auto res = GameActions::Result(); + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = _loc.z; + res.Expenditure = ExpenditureType::Landscaping; + res.ErrorTitle = STR_CANT_POSITION_THIS_HERE; if (!MapCheckCapacityAndReorganise(_loc)) { log_error("No free map elements."); - return MakeResult(GameActions::Status::NoFreeElements, STR_CANT_POSITION_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); + return GameActions::Result( + GameActions::Status::NoFreeElements, STR_CANT_POSITION_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); } auto* bannerEntry = get_banner_entry(_bannerType); if (bannerEntry == nullptr) { log_error("Invalid banner object type. bannerType = ", _bannerType); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } auto banner = CreateBanner(); if (banner == nullptr) { log_error("No free banners available"); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_TOO_MANY_BANNERS_IN_GAME); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_TOO_MANY_BANNERS_IN_GAME); } banner->flags = 0; banner->text = {}; @@ -136,7 +141,7 @@ GameActions::Result::Ptr BannerPlaceAction::Execute() const banner->colour = _primaryColour; banner->position = TileCoordsXY(_loc); - res->SetData(BannerPlaceActionResult{ banner->id }); + res.SetData(BannerPlaceActionResult{ banner->id }); auto* bannerElement = TileElementInsert({ _loc, _loc.z + (2 * COORDS_Z_STEP) }, 0b0000); Guard::Assert(bannerElement != nullptr); @@ -149,7 +154,7 @@ GameActions::Result::Ptr BannerPlaceAction::Execute() const map_invalidate_tile_full(_loc); map_animation_create(MAP_ANIMATION_TYPE_BANNER, CoordsXYZ{ _loc, bannerElement->GetBaseZ() }); - res->Cost = bannerEntry->price; + res.Cost = bannerEntry->price; return res; } diff --git a/src/openrct2/actions/BannerPlaceAction.h b/src/openrct2/actions/BannerPlaceAction.h index 1aabed2077..3afc75ea50 100644 --- a/src/openrct2/actions/BannerPlaceAction.h +++ b/src/openrct2/actions/BannerPlaceAction.h @@ -32,8 +32,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: PathElement* GetValidPathElement() const; diff --git a/src/openrct2/actions/BannerRemoveAction.cpp b/src/openrct2/actions/BannerRemoveAction.cpp index dad26a1036..eff4cc43cb 100644 --- a/src/openrct2/actions/BannerRemoveAction.cpp +++ b/src/openrct2/actions/BannerRemoveAction.cpp @@ -40,84 +40,84 @@ void BannerRemoveAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc); } -GameActions::Result::Ptr BannerRemoveAction::Query() const +GameActions::Result BannerRemoveAction::Query() const { - auto res = MakeResult(); - res->Expenditure = ExpenditureType::Landscaping; - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = _loc.z; - res->ErrorTitle = STR_CANT_REMOVE_THIS; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::Landscaping; + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = _loc.z; + res.ErrorTitle = STR_CANT_REMOVE_THIS; if (!LocationValid(_loc) || !map_can_build_at({ _loc.x, _loc.y, _loc.z - 16 })) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); } BannerElement* bannerElement = GetBannerElementAt(); if (bannerElement == nullptr) { log_error("Invalid banner location, x = %d, y = %d, z = %d, direction = %d", _loc.x, _loc.y, _loc.z, _loc.direction); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); } auto bannerIndex = bannerElement->GetIndex(); if (bannerIndex == BANNER_INDEX_NULL) { log_error("Invalid banner index. index = ", bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); } auto banner = bannerElement->GetBanner(); if (banner == nullptr) { log_error("Invalid banner index. index = ", bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); } auto* bannerEntry = get_banner_entry(banner->type); if (bannerEntry != nullptr) { - res->Cost = -((bannerEntry->price * 3) / 4); + res.Cost = -((bannerEntry->price * 3) / 4); } return res; } -GameActions::Result::Ptr BannerRemoveAction::Execute() const +GameActions::Result BannerRemoveAction::Execute() const { - auto res = MakeResult(); - res->Expenditure = ExpenditureType::Landscaping; - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = _loc.z; - res->ErrorTitle = STR_CANT_REMOVE_THIS; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::Landscaping; + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = _loc.z; + res.ErrorTitle = STR_CANT_REMOVE_THIS; BannerElement* bannerElement = GetBannerElementAt(); if (bannerElement == nullptr) { log_error("Invalid banner location, x = %d, y = %d, z = %d, direction = %d", _loc.x, _loc.y, _loc.z, _loc.direction); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); } auto bannerIndex = bannerElement->GetIndex(); if (bannerIndex == BANNER_INDEX_NULL) { log_error("Invalid banner index. index = ", bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); } auto banner = bannerElement->GetBanner(); if (banner == nullptr) { log_error("Invalid banner index. index = ", bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); } auto* bannerEntry = get_banner_entry(banner->type); if (bannerEntry != nullptr) { - res->Cost = -((bannerEntry->price * 3) / 4); + res.Cost = -((bannerEntry->price * 3) / 4); } reinterpret_cast(bannerElement)->RemoveBannerEntry(); diff --git a/src/openrct2/actions/BannerRemoveAction.h b/src/openrct2/actions/BannerRemoveAction.h index f5acbc74b4..f33287e96f 100644 --- a/src/openrct2/actions/BannerRemoveAction.h +++ b/src/openrct2/actions/BannerRemoveAction.h @@ -25,8 +25,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: BannerElement* GetBannerElementAt() const; diff --git a/src/openrct2/actions/BannerSetColourAction.cpp b/src/openrct2/actions/BannerSetColourAction.cpp index bf5162ef13..b64ee25866 100644 --- a/src/openrct2/actions/BannerSetColourAction.cpp +++ b/src/openrct2/actions/BannerSetColourAction.cpp @@ -39,40 +39,40 @@ void BannerSetColourAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_primaryColour); } -GameActions::Result::Ptr BannerSetColourAction::Query() const +GameActions::Result BannerSetColourAction::Query() const { return QueryExecute(false); } -GameActions::Result::Ptr BannerSetColourAction::Execute() const +GameActions::Result BannerSetColourAction::Execute() const { return QueryExecute(true); } -GameActions::Result::Ptr BannerSetColourAction::QueryExecute(bool isExecuting) const +GameActions::Result BannerSetColourAction::QueryExecute(bool isExecuting) const { - auto res = MakeResult(); - res->Expenditure = ExpenditureType::Landscaping; - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = _loc.z; - res->ErrorTitle = STR_CANT_REPAINT_THIS; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::Landscaping; + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = _loc.z; + res.ErrorTitle = STR_CANT_REPAINT_THIS; if (!LocationValid(_loc)) { log_error("Invalid x / y coordinates: x = %d, y = %d", _loc.x, _loc.y); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } if (_primaryColour > 31) { log_error("Invalid primary colour: colour = %u", _primaryColour); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } if (!map_can_build_at({ _loc.x, _loc.y, _loc.z - 16 })) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_REPAINT_THIS, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_CANT_REPAINT_THIS, STR_LAND_NOT_OWNED_BY_PARK); } auto bannerElement = map_get_banner_element_at(_loc, _loc.direction); @@ -80,7 +80,7 @@ GameActions::Result::Ptr BannerSetColourAction::QueryExecute(bool isExecuting) c if (bannerElement == nullptr) { log_error("Could not find banner at: x = %d, y = %d, z = %d, direction = %u", _loc.x, _loc.y, _loc.z, _loc.direction); - return MakeResult(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); } auto index = bannerElement->GetIndex(); @@ -88,7 +88,7 @@ GameActions::Result::Ptr BannerSetColourAction::QueryExecute(bool isExecuting) c if (banner == nullptr) { log_error("Invalid banner index: index = %u", index); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } if (isExecuting) diff --git a/src/openrct2/actions/BannerSetColourAction.h b/src/openrct2/actions/BannerSetColourAction.h index faffca5c96..4e1baccf39 100644 --- a/src/openrct2/actions/BannerSetColourAction.h +++ b/src/openrct2/actions/BannerSetColourAction.h @@ -26,9 +26,9 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr QueryExecute(bool isExecuting) const; + GameActions::Result QueryExecute(bool isExecuting) const; }; diff --git a/src/openrct2/actions/BannerSetNameAction.cpp b/src/openrct2/actions/BannerSetNameAction.cpp index 393fc3e3ad..f594263092 100644 --- a/src/openrct2/actions/BannerSetNameAction.cpp +++ b/src/openrct2/actions/BannerSetNameAction.cpp @@ -42,24 +42,24 @@ void BannerSetNameAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_bannerIndex) << DS_TAG(_name); } -GameActions::Result::Ptr BannerSetNameAction::Query() const +GameActions::Result BannerSetNameAction::Query() const { auto banner = GetBanner(_bannerIndex); if (banner == nullptr) { log_warning("Invalid banner id, banner id = %d", _bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_RENAME_BANNER, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_RENAME_BANNER, STR_NONE); } - return MakeResult(); + return GameActions::Result(); } -GameActions::Result::Ptr BannerSetNameAction::Execute() const +GameActions::Result BannerSetNameAction::Execute() const { auto banner = GetBanner(_bannerIndex); if (banner == nullptr) { log_warning("Invalid banner id, banner id = %d", _bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_RENAME_BANNER, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_RENAME_BANNER, STR_NONE); } banner->text = _name; @@ -71,5 +71,5 @@ GameActions::Result::Ptr BannerSetNameAction::Execute() const scrolling_text_invalidate(); gfx_invalidate_screen(); - return MakeResult(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/BannerSetNameAction.h b/src/openrct2/actions/BannerSetNameAction.h index 6b6827183c..42ea2b99bb 100644 --- a/src/openrct2/actions/BannerSetNameAction.h +++ b/src/openrct2/actions/BannerSetNameAction.h @@ -26,6 +26,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/BannerSetStyleAction.cpp b/src/openrct2/actions/BannerSetStyleAction.cpp index 772f4389b4..3f7685d003 100644 --- a/src/openrct2/actions/BannerSetStyleAction.cpp +++ b/src/openrct2/actions/BannerSetStyleAction.cpp @@ -42,27 +42,27 @@ void BannerSetStyleAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_type) << DS_TAG(_bannerIndex) << DS_TAG(_parameter); } -GameActions::Result::Ptr BannerSetStyleAction::Query() const +GameActions::Result BannerSetStyleAction::Query() const { - auto res = MakeResult(); + auto res = GameActions::Result(); auto banner = GetBanner(_bannerIndex); if (banner == nullptr) { log_error("Invalid banner index: index = %u", _bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } - res->Expenditure = ExpenditureType::Landscaping; + res.Expenditure = ExpenditureType::Landscaping; auto location = banner->position.ToCoordsXY().ToTileCentre(); - res->Position = { location, tile_element_height(location) }; + res.Position = { location, tile_element_height(location) }; TileElement* tileElement = banner_get_tile_element(_bannerIndex); if (tileElement == nullptr) { log_error("Could not find banner index = %u", _bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } switch (_type) @@ -71,7 +71,7 @@ GameActions::Result::Ptr BannerSetStyleAction::Query() const if (_parameter > 31) { log_error("Invalid primary colour: colour = %u", _parameter); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } break; @@ -79,44 +79,44 @@ GameActions::Result::Ptr BannerSetStyleAction::Query() const if (_parameter > 13) { log_error("Invalid text colour: colour = %u", _parameter); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } break; case BannerSetStyleType::NoEntry: if (tileElement->AsBanner() == nullptr) { log_error("Tile element was not a banner."); - return MakeResult(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); } break; default: log_error("Invalid type: %u", _type); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } return res; } -GameActions::Result::Ptr BannerSetStyleAction::Execute() const +GameActions::Result BannerSetStyleAction::Execute() const { - auto res = MakeResult(); + auto res = GameActions::Result(); auto banner = GetBanner(_bannerIndex); if (banner == nullptr) { log_error("Invalid banner index: index = %u", _bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } - res->Expenditure = ExpenditureType::Landscaping; + res.Expenditure = ExpenditureType::Landscaping; auto location = banner->position.ToCoordsXY().ToTileCentre(); - res->Position = { location, tile_element_height(location) }; + res.Position = { location, tile_element_height(location) }; TileElement* tileElement = banner_get_tile_element(_bannerIndex); if (tileElement == nullptr) { log_error("Could not find banner index = %u", _bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } switch (_type) @@ -133,7 +133,7 @@ GameActions::Result::Ptr BannerSetStyleAction::Execute() const if (bannerElement == nullptr) { log_error("Tile element was not a banner."); - return MakeResult(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); } banner->flags &= ~BANNER_FLAG_NO_ENTRY; @@ -148,7 +148,7 @@ GameActions::Result::Ptr BannerSetStyleAction::Execute() const } default: log_error("Invalid type: %u", _type); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } auto intent = Intent(INTENT_ACTION_UPDATE_BANNER); diff --git a/src/openrct2/actions/BannerSetStyleAction.h b/src/openrct2/actions/BannerSetStyleAction.h index 677e7a7229..0a6beef6a6 100644 --- a/src/openrct2/actions/BannerSetStyleAction.h +++ b/src/openrct2/actions/BannerSetStyleAction.h @@ -37,6 +37,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/ChangeMapSizeAction.cpp b/src/openrct2/actions/ChangeMapSizeAction.cpp index fb55284220..4d6ecd421d 100644 --- a/src/openrct2/actions/ChangeMapSizeAction.cpp +++ b/src/openrct2/actions/ChangeMapSizeAction.cpp @@ -31,22 +31,20 @@ void ChangeMapSizeAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_targetSize); } -GameActions::Result::Ptr ChangeMapSizeAction::Query() const +GameActions::Result ChangeMapSizeAction::Query() const { if (_targetSize >= MAXIMUM_MAP_SIZE_TECHNICAL) { - return std::make_unique( - GameActions::Status::InvalidParameters, STR_CANT_INCREASE_MAP_SIZE_ANY_FURTHER, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_INCREASE_MAP_SIZE_ANY_FURTHER, STR_NONE); } if (_targetSize < 16) { - return std::make_unique( - GameActions::Status::InvalidParameters, STR_CANT_DECREASE_MAP_SIZE_ANY_FURTHER, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_DECREASE_MAP_SIZE_ANY_FURTHER, STR_NONE); } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr ChangeMapSizeAction::Execute() const +GameActions::Result ChangeMapSizeAction::Execute() const { while (gMapSize != _targetSize) { @@ -68,7 +66,7 @@ GameActions::Result::Ptr ChangeMapSizeAction::Execute() const windowManager->BroadcastIntent(Intent(INTENT_ACTION_MAP)); gfx_invalidate_screen(); - return std::make_unique(); + return GameActions::Result(); } void ChangeMapSizeAction::AcceptParameters(GameActionParameterVisitor& visitor) diff --git a/src/openrct2/actions/ChangeMapSizeAction.h b/src/openrct2/actions/ChangeMapSizeAction.h index a0bd4d1120..650a57208c 100644 --- a/src/openrct2/actions/ChangeMapSizeAction.h +++ b/src/openrct2/actions/ChangeMapSizeAction.h @@ -22,8 +22,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: int32_t _targetSize; diff --git a/src/openrct2/actions/ClearAction.cpp b/src/openrct2/actions/ClearAction.cpp index bccba7e5a7..dcf251f578 100644 --- a/src/openrct2/actions/ClearAction.cpp +++ b/src/openrct2/actions/ClearAction.cpp @@ -37,31 +37,31 @@ void ClearAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_range) << DS_TAG(_itemsToClear); } -GameActions::Result::Ptr ClearAction::Query() const +GameActions::Result ClearAction::Query() const { return QueryExecute(false); } -GameActions::Result::Ptr ClearAction::Execute() const +GameActions::Result ClearAction::Execute() const { return QueryExecute(true); } -GameActions::Result::Ptr ClearAction::CreateResult() const +GameActions::Result ClearAction::CreateResult() const { - auto result = MakeResult(); - result->ErrorTitle = STR_UNABLE_TO_REMOVE_ALL_SCENERY_FROM_HERE; - result->Expenditure = ExpenditureType::Landscaping; + auto result = GameActions::Result(); + result.ErrorTitle = STR_UNABLE_TO_REMOVE_ALL_SCENERY_FROM_HERE; + result.Expenditure = ExpenditureType::Landscaping; auto x = (_range.GetLeft() + _range.GetRight()) / 2 + 16; auto y = (_range.GetTop() + _range.GetBottom()) / 2 + 16; auto z = tile_element_height({ x, y }); - result->Position = CoordsXYZ(x, y, z); + result.Position = CoordsXYZ(x, y, z); return result; } -GameActions::Result::Ptr ClearAction::QueryExecute(bool executing) const +GameActions::Result ClearAction::QueryExecute(bool executing) const { auto result = CreateResult(); @@ -103,11 +103,11 @@ GameActions::Result::Ptr ClearAction::QueryExecute(bool executing) const if (noValidTiles) { - result->Error = error; - result->ErrorMessage = errorMessage; + result.Error = error; + result.ErrorMessage = errorMessage; } - result->Cost = totalCost; + result.Cost = totalCost; return result; } @@ -140,9 +140,9 @@ money32 ClearAction::ClearSceneryFromTile(const CoordsXY& tilePos, bool executin auto res = executing ? GameActions::ExecuteNested(&footpathRemoveAction) : GameActions::QueryNested(&footpathRemoveAction); - if (res->Error == GameActions::Status::Ok) + if (res.Error == GameActions::Status::Ok) { - totalCost += res->Cost; + totalCost += res.Cost; tileEdited = executing; } } @@ -158,9 +158,9 @@ money32 ClearAction::ClearSceneryFromTile(const CoordsXY& tilePos, bool executin auto res = executing ? GameActions::ExecuteNested(&removeSceneryAction) : GameActions::QueryNested(&removeSceneryAction); - if (res->Error == GameActions::Status::Ok) + if (res.Error == GameActions::Status::Ok) { - totalCost += res->Cost; + totalCost += res.Cost; tileEdited = executing; } } @@ -175,9 +175,9 @@ money32 ClearAction::ClearSceneryFromTile(const CoordsXY& tilePos, bool executin auto res = executing ? GameActions::ExecuteNested(&wallRemoveAction) : GameActions::QueryNested(&wallRemoveAction); - if (res->Error == GameActions::Status::Ok) + if (res.Error == GameActions::Status::Ok) { - totalCost += res->Cost; + totalCost += res.Cost; tileEdited = executing; } } @@ -193,9 +193,9 @@ money32 ClearAction::ClearSceneryFromTile(const CoordsXY& tilePos, bool executin auto res = executing ? GameActions::ExecuteNested(&removeSceneryAction) : GameActions::QueryNested(&removeSceneryAction); - if (res->Error == GameActions::Status::Ok) + if (res.Error == GameActions::Status::Ok) { - totalCost += res->Cost; + totalCost += res.Cost; tileEdited = executing; } } diff --git a/src/openrct2/actions/ClearAction.h b/src/openrct2/actions/ClearAction.h index ff777923c8..29d48019d2 100644 --- a/src/openrct2/actions/ClearAction.h +++ b/src/openrct2/actions/ClearAction.h @@ -35,12 +35,12 @@ public: ClearAction(MapRange range, ClearableItems itemsToClear); void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr CreateResult() const; - GameActions::Result::Ptr QueryExecute(bool executing) const; + GameActions::Result CreateResult() const; + GameActions::Result QueryExecute(bool executing) const; money32 ClearSceneryFromTile(const CoordsXY& tilePos, bool executing) const; /** diff --git a/src/openrct2/actions/ClimateSetAction.cpp b/src/openrct2/actions/ClimateSetAction.cpp index ba8459f593..e2a0bfd591 100644 --- a/src/openrct2/actions/ClimateSetAction.cpp +++ b/src/openrct2/actions/ClimateSetAction.cpp @@ -31,21 +31,21 @@ void ClimateSetAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_climate); } -GameActions::Result::Ptr ClimateSetAction::Query() const +GameActions::Result ClimateSetAction::Query() const { if (_climate >= ClimateType::Count) { - return std::make_unique(GameActions::Status::InvalidParameters, STR_INVALID_CLIMATE_ID, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_INVALID_CLIMATE_ID, STR_NONE); } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr ClimateSetAction::Execute() const +GameActions::Result ClimateSetAction::Execute() const { gClimate = ClimateType{ _climate }; gfx_invalidate_screen(); - return std::make_unique(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/ClimateSetAction.h b/src/openrct2/actions/ClimateSetAction.h index f9e59720c7..6207eafb0f 100644 --- a/src/openrct2/actions/ClimateSetAction.h +++ b/src/openrct2/actions/ClimateSetAction.h @@ -26,6 +26,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/CustomAction.cpp b/src/openrct2/actions/CustomAction.cpp index 7ea6790779..959f3c5f8f 100644 --- a/src/openrct2/actions/CustomAction.cpp +++ b/src/openrct2/actions/CustomAction.cpp @@ -40,13 +40,13 @@ void CustomAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_id) << DS_TAG(_json); } -GameActions::Result::Ptr CustomAction::Query() const +GameActions::Result CustomAction::Query() const { auto& scriptingEngine = OpenRCT2::GetContext()->GetScriptEngine(); return scriptingEngine.QueryOrExecuteCustomGameAction(_id, _json, false); } -GameActions::Result::Ptr CustomAction::Execute() const +GameActions::Result CustomAction::Execute() const { auto& scriptingEngine = OpenRCT2::GetContext()->GetScriptEngine(); return scriptingEngine.QueryOrExecuteCustomGameAction(_id, _json, true); diff --git a/src/openrct2/actions/CustomAction.h b/src/openrct2/actions/CustomAction.h index 93e3c49d89..ca3da2d99a 100644 --- a/src/openrct2/actions/CustomAction.h +++ b/src/openrct2/actions/CustomAction.h @@ -29,8 +29,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; #endif diff --git a/src/openrct2/actions/FootpathAdditionPlaceAction.cpp b/src/openrct2/actions/FootpathAdditionPlaceAction.cpp index bd0fc51cda..8e183004f0 100644 --- a/src/openrct2/actions/FootpathAdditionPlaceAction.cpp +++ b/src/openrct2/actions/FootpathAdditionPlaceAction.cpp @@ -45,42 +45,42 @@ void FootpathAdditionPlaceAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_pathItemType); } -GameActions::Result::Ptr FootpathAdditionPlaceAction::Query() const +GameActions::Result FootpathAdditionPlaceAction::Query() const { - auto res = MakeResult(); - res->Expenditure = ExpenditureType::Landscaping; - res->Position = _loc; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::Landscaping; + res.Position = _loc; if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_OFF_EDGE_OF_MAP); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_OFF_EDGE_OF_MAP); } if (!((gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) || gCheatsSandboxMode) && !map_is_location_owned(_loc)) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_LAND_NOT_OWNED_BY_PARK); } if (_loc.z < FootpathMinHeight) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_TOO_LOW); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_TOO_LOW); } if (_loc.z > FootpathMaxHeight) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_TOO_HIGH); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_TOO_HIGH); } auto tileElement = map_get_footpath_element(_loc); if (tileElement == nullptr) { log_error("Could not find path element."); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } auto pathElement = tileElement->AsPath(); if (pathElement->IsLevelCrossing(_loc)) { - return MakeResult( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_CANNOT_BUILD_PATH_ADDITIONS_ON_LEVEL_CROSSINGS); } @@ -96,35 +96,35 @@ GameActions::Result::Ptr FootpathAdditionPlaceAction::Query() const auto* pathBitEntry = get_footpath_item_entry(_pathItemType - 1); if (pathBitEntry == nullptr) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } uint16_t sceneryFlags = pathBitEntry->flags; if ((sceneryFlags & PATH_BIT_FLAG_DONT_ALLOW_ON_SLOPE) && pathElement->IsSloped()) { - return MakeResult( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_CANT_BUILD_THIS_ON_SLOPED_FOOTPATH); } if ((sceneryFlags & PATH_BIT_FLAG_DONT_ALLOW_ON_QUEUE) && pathElement->IsQueue()) { - return MakeResult( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_CANNOT_PLACE_THESE_ON_QUEUE_LINE_AREA); } if (!(sceneryFlags & (PATH_BIT_FLAG_JUMPING_FOUNTAIN_WATER | PATH_BIT_FLAG_JUMPING_FOUNTAIN_SNOW)) && (pathElement->GetEdges()) == 0x0F) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } if ((sceneryFlags & PATH_BIT_FLAG_IS_QUEUE_SCREEN) && !pathElement->IsQueue()) { - return MakeResult( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_CAN_ONLY_PLACE_THESE_ON_QUEUE_AREA); } - res->Cost = pathBitEntry->price; + res.Cost = pathBitEntry->price; } // Should place a ghost? @@ -133,17 +133,17 @@ GameActions::Result::Ptr FootpathAdditionPlaceAction::Query() const // Check if there is something on the path already if (pathElement->HasAddition()) { - return MakeResult(GameActions::Status::ItemAlreadyPlaced, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::ItemAlreadyPlaced, STR_CANT_POSITION_THIS_HERE, STR_NONE); } } return res; } -GameActions::Result::Ptr FootpathAdditionPlaceAction::Execute() const +GameActions::Result FootpathAdditionPlaceAction::Execute() const { - auto res = MakeResult(); - res->Position = _loc; - res->Expenditure = ExpenditureType::Landscaping; + auto res = GameActions::Result(); + res.Position = _loc; + res.Expenditure = ExpenditureType::Landscaping; auto tileElement = map_get_footpath_element(_loc); auto pathElement = tileElement->AsPath(); @@ -151,7 +151,7 @@ GameActions::Result::Ptr FootpathAdditionPlaceAction::Execute() const if (pathElement == nullptr) { log_error("Could not find path element."); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } // No change @@ -166,10 +166,10 @@ GameActions::Result::Ptr FootpathAdditionPlaceAction::Execute() const auto* pathBitEntry = get_footpath_item_entry(_pathItemType - 1); if (pathBitEntry == nullptr) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } - res->Cost = pathBitEntry->price; + res.Cost = pathBitEntry->price; } if (GetFlags() & GAME_COMMAND_FLAG_GHOST) diff --git a/src/openrct2/actions/FootpathAdditionPlaceAction.h b/src/openrct2/actions/FootpathAdditionPlaceAction.h index 71b4787a5c..e2328e177c 100644 --- a/src/openrct2/actions/FootpathAdditionPlaceAction.h +++ b/src/openrct2/actions/FootpathAdditionPlaceAction.h @@ -26,6 +26,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/FootpathAdditionRemoveAction.cpp b/src/openrct2/actions/FootpathAdditionRemoveAction.cpp index 39bdf1e530..81d2e29a87 100644 --- a/src/openrct2/actions/FootpathAdditionRemoveAction.cpp +++ b/src/openrct2/actions/FootpathAdditionRemoveAction.cpp @@ -42,54 +42,54 @@ void FootpathAdditionRemoveAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc); } -GameActions::Result::Ptr FootpathAdditionRemoveAction::Query() const +GameActions::Result FootpathAdditionRemoveAction::Query() const { if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_OFF_EDGE_OF_MAP); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_OFF_EDGE_OF_MAP); } if (!((gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) || gCheatsSandboxMode) && !map_is_location_owned(_loc)) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); } if (_loc.z < FootpathMinHeight) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_TOO_LOW); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_TOO_LOW); } if (_loc.z > FootpathMaxHeight) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_TOO_HIGH); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_TOO_HIGH); } auto tileElement = map_get_footpath_element(_loc); if (tileElement == nullptr) { log_warning("Could not find path element."); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); } auto pathElement = tileElement->AsPath(); if (pathElement == nullptr) { log_warning("Could not find path element."); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); } if (!pathElement->AdditionIsGhost() && (GetFlags() & GAME_COMMAND_FLAG_GHOST)) { log_warning("Tried to remove non ghost during ghost removal."); - return MakeResult(GameActions::Status::Disallowed, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_REMOVE_THIS, STR_NONE); } - auto res = MakeResult(); - res->Position = _loc; - res->Cost = MONEY(0, 0); + auto res = GameActions::Result(); + res.Position = _loc; + res.Cost = MONEY(0, 0); return res; } -GameActions::Result::Ptr FootpathAdditionRemoveAction::Execute() const +GameActions::Result FootpathAdditionRemoveAction::Execute() const { auto tileElement = map_get_footpath_element(_loc); auto pathElement = tileElement->AsPath(); @@ -102,14 +102,14 @@ GameActions::Result::Ptr FootpathAdditionRemoveAction::Execute() const if (pathElement == nullptr) { log_error("Could not find path element."); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); } pathElement->SetAddition(0); map_invalidate_tile_full(_loc); - auto res = MakeResult(); - res->Position = _loc; - res->Cost = MONEY(0, 0); + auto res = GameActions::Result(); + res.Position = _loc; + res.Cost = MONEY(0, 0); return res; } diff --git a/src/openrct2/actions/FootpathAdditionRemoveAction.h b/src/openrct2/actions/FootpathAdditionRemoveAction.h index 3369e18a38..0c7e35396a 100644 --- a/src/openrct2/actions/FootpathAdditionRemoveAction.h +++ b/src/openrct2/actions/FootpathAdditionRemoveAction.h @@ -25,6 +25,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/FootpathPlaceAction.cpp b/src/openrct2/actions/FootpathPlaceAction.cpp index 95e592a88c..a856b55adb 100644 --- a/src/openrct2/actions/FootpathPlaceAction.cpp +++ b/src/openrct2/actions/FootpathPlaceAction.cpp @@ -61,44 +61,44 @@ void FootpathPlaceAction::Serialise(DataSerialiser& stream) << DS_TAG(_constructFlags); } -GameActions::Result::Ptr FootpathPlaceAction::Query() const +GameActions::Result FootpathPlaceAction::Query() const { - GameActions::Result::Ptr res = std::make_unique(); - res->Cost = 0; - res->Expenditure = ExpenditureType::Landscaping; - res->Position = _loc.ToTileCentre(); + auto res = GameActions::Result(); + res.Cost = 0; + res.Expenditure = ExpenditureType::Landscaping; + res.Position = _loc.ToTileCentre(); gFootpathGroundFlags = 0; if (!LocationValid(_loc) || map_is_edge(_loc)) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_BUILD_FOOTPATH_HERE, STR_OFF_EDGE_OF_MAP); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_BUILD_FOOTPATH_HERE, STR_OFF_EDGE_OF_MAP); } if (!((gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) || gCheatsSandboxMode) && !map_is_location_owned(_loc)) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_BUILD_FOOTPATH_HERE, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_BUILD_FOOTPATH_HERE, STR_LAND_NOT_OWNED_BY_PARK); } if (_slope & SLOPE_IS_IRREGULAR_FLAG) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_BUILD_FOOTPATH_HERE, STR_LAND_SLOPE_UNSUITABLE); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_BUILD_FOOTPATH_HERE, STR_LAND_SLOPE_UNSUITABLE); } if (_loc.z < FootpathMinHeight) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_BUILD_FOOTPATH_HERE, STR_TOO_LOW); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_BUILD_FOOTPATH_HERE, STR_TOO_LOW); } if (_loc.z > FootpathMaxHeight) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_BUILD_FOOTPATH_HERE, STR_TOO_HIGH); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_BUILD_FOOTPATH_HERE, STR_TOO_HIGH); } if (_direction != INVALID_DIRECTION && !direction_valid(_direction)) { log_error("Direction invalid. direction = %u", _direction); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_BUILD_FOOTPATH_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_BUILD_FOOTPATH_HERE, STR_NONE); } footpath_provisional_remove(); @@ -110,12 +110,12 @@ GameActions::Result::Ptr FootpathPlaceAction::Query() const return ElementUpdateQuery(tileElement, std::move(res)); } -GameActions::Result::Ptr FootpathPlaceAction::Execute() const +GameActions::Result FootpathPlaceAction::Execute() const { - GameActions::Result::Ptr res = std::make_unique(); - res->Cost = 0; - res->Expenditure = ExpenditureType::Landscaping; - res->Position = _loc.ToTileCentre(); + auto res = GameActions::Result(); + res.Cost = 0; + res.Expenditure = ExpenditureType::Landscaping; + res.Position = _loc.ToTileCentre(); if (!(GetFlags() & GAME_COMMAND_FLAG_GHOST)) { @@ -196,25 +196,25 @@ bool FootpathPlaceAction::IsSameAsEntranceElement(const EntranceElement& entranc return entranceElement.GetSurfaceEntryIndex() == _type; } -GameActions::Result::Ptr FootpathPlaceAction::ElementUpdateQuery(PathElement* pathElement, GameActions::Result::Ptr res) const +GameActions::Result FootpathPlaceAction::ElementUpdateQuery(PathElement* pathElement, GameActions::Result res) const { if (!IsSameAsPathElement(pathElement)) { - res->Cost += MONEY(6, 00); + res.Cost += MONEY(6, 00); } if (GetFlags() & GAME_COMMAND_FLAG_GHOST && !pathElement->IsGhost()) { - return MakeResult(GameActions::Status::Unknown, STR_CANT_BUILD_FOOTPATH_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_BUILD_FOOTPATH_HERE, STR_NONE); } return res; } -GameActions::Result::Ptr FootpathPlaceAction::ElementUpdateExecute(PathElement* pathElement, GameActions::Result::Ptr res) const +GameActions::Result FootpathPlaceAction::ElementUpdateExecute(PathElement* pathElement, GameActions::Result res) const { if (!IsSameAsPathElement(pathElement)) { - res->Cost += MONEY(6, 00); + res.Cost += MONEY(6, 00); } footpath_queue_chain_reset(); @@ -263,16 +263,16 @@ GameActions::Result::Ptr FootpathPlaceAction::ElementUpdateExecute(PathElement* return res; } -GameActions::Result::Ptr FootpathPlaceAction::ElementInsertQuery(GameActions::Result::Ptr res) const +GameActions::Result FootpathPlaceAction::ElementInsertQuery(GameActions::Result res) const { bool entrancePath = false, entranceIsSamePath = false; if (!MapCheckCapacityAndReorganise(_loc)) { - return MakeResult(GameActions::Status::NoFreeElements, STR_CANT_BUILD_FOOTPATH_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::NoFreeElements, STR_CANT_BUILD_FOOTPATH_HERE, STR_NONE); } - res->Cost = MONEY(12, 00); + res.Cost = MONEY(12, 00); QuarterTile quarterTile{ 0b1111, 0 }; auto zLow = _loc.z; @@ -292,7 +292,7 @@ GameActions::Result::Ptr FootpathPlaceAction::ElementInsertQuery(GameActions::Re if (IsSameAsEntranceElement(*entranceElement)) entranceIsSamePath = true; else - res->Cost -= MONEY(6, 00); + res.Cost -= MONEY(6, 00); } // Do not attempt to build a crossing with a queue or a sloped path. @@ -301,37 +301,38 @@ GameActions::Result::Ptr FootpathPlaceAction::ElementInsertQuery(GameActions::Re : CREATE_CROSSING_MODE_PATH_OVER_TRACK; auto canBuild = MapCanConstructWithClearAt( { _loc, zLow, zHigh }, &map_place_non_scenery_clear_func, quarterTile, GetFlags(), crossingMode); - if (!entrancePath && canBuild->Error != GameActions::Status::Ok) + if (!entrancePath && canBuild.Error != GameActions::Status::Ok) { - canBuild->ErrorTitle = STR_CANT_BUILD_FOOTPATH_HERE; + canBuild.ErrorTitle = STR_CANT_BUILD_FOOTPATH_HERE; return canBuild; } - res->Cost += canBuild->Cost; + res.Cost += canBuild.Cost; - const auto clearanceData = canBuild->GetData(); + const auto clearanceData = canBuild.GetData(); gFootpathGroundFlags = clearanceData.GroundFlags; if (!gCheatsDisableClearanceChecks && (clearanceData.GroundFlags & ELEMENT_IS_UNDERWATER)) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_BUILD_FOOTPATH_HERE, STR_CANT_BUILD_THIS_UNDERWATER); + return GameActions::Result( + GameActions::Status::Disallowed, STR_CANT_BUILD_FOOTPATH_HERE, STR_CANT_BUILD_THIS_UNDERWATER); } auto surfaceElement = map_get_surface_element_at(_loc); if (surfaceElement == nullptr) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_BUILD_FOOTPATH_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_BUILD_FOOTPATH_HERE, STR_NONE); } int32_t supportHeight = zLow - surfaceElement->GetBaseZ(); - res->Cost += supportHeight < 0 ? MONEY(20, 00) : (supportHeight / PATH_HEIGHT_STEP) * MONEY(5, 00); + res.Cost += supportHeight < 0 ? MONEY(20, 00) : (supportHeight / PATH_HEIGHT_STEP) * MONEY(5, 00); // Prevent the place sound from being spammed if (entranceIsSamePath) - res->Cost = 0; + res.Cost = 0; return res; } -GameActions::Result::Ptr FootpathPlaceAction::ElementInsertExecute(GameActions::Result::Ptr res) const +GameActions::Result FootpathPlaceAction::ElementInsertExecute(GameActions::Result res) const { bool entrancePath = false, entranceIsSamePath = false; @@ -340,7 +341,7 @@ GameActions::Result::Ptr FootpathPlaceAction::ElementInsertExecute(GameActions:: footpath_remove_litter(_loc); } - res->Cost = MONEY(12, 00); + res.Cost = MONEY(12, 00); QuarterTile quarterTile{ 0b1111, 0 }; auto zLow = _loc.z; @@ -360,7 +361,7 @@ GameActions::Result::Ptr FootpathPlaceAction::ElementInsertExecute(GameActions:: if (IsSameAsEntranceElement(*entranceElement)) entranceIsSamePath = true; else - res->Cost -= MONEY(6, 00); + res.Cost -= MONEY(6, 00); } // Do not attempt to build a crossing with a queue or a sloped. @@ -370,23 +371,23 @@ GameActions::Result::Ptr FootpathPlaceAction::ElementInsertExecute(GameActions:: auto canBuild = MapCanConstructWithClearAt( { _loc, zLow, zHigh }, &map_place_non_scenery_clear_func, quarterTile, GAME_COMMAND_FLAG_APPLY | GetFlags(), crossingMode); - if (!entrancePath && canBuild->Error != GameActions::Status::Ok) + if (!entrancePath && canBuild.Error != GameActions::Status::Ok) { - canBuild->ErrorTitle = STR_CANT_BUILD_FOOTPATH_HERE; + canBuild.ErrorTitle = STR_CANT_BUILD_FOOTPATH_HERE; return canBuild; } - res->Cost += canBuild->Cost; + res.Cost += canBuild.Cost; - const auto clearanceData = canBuild->GetData(); + const auto clearanceData = canBuild.GetData(); gFootpathGroundFlags = clearanceData.GroundFlags; auto surfaceElement = map_get_surface_element_at(_loc); if (surfaceElement == nullptr) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_BUILD_FOOTPATH_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_BUILD_FOOTPATH_HERE, STR_NONE); } int32_t supportHeight = zLow - surfaceElement->GetBaseZ(); - res->Cost += supportHeight < 0 ? MONEY(20, 00) : (supportHeight / PATH_HEIGHT_STEP) * MONEY(5, 00); + res.Cost += supportHeight < 0 ? MONEY(20, 00) : (supportHeight / PATH_HEIGHT_STEP) * MONEY(5, 00); if (entrancePath) { @@ -443,7 +444,7 @@ GameActions::Result::Ptr FootpathPlaceAction::ElementInsertExecute(GameActions:: // Prevent the place sound from being spammed if (entranceIsSamePath) - res->Cost = 0; + res.Cost = 0; return res; } diff --git a/src/openrct2/actions/FootpathPlaceAction.h b/src/openrct2/actions/FootpathPlaceAction.h index 0ea7a63bd1..afefaefcda 100644 --- a/src/openrct2/actions/FootpathPlaceAction.h +++ b/src/openrct2/actions/FootpathPlaceAction.h @@ -32,14 +32,14 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr ElementUpdateQuery(PathElement* pathElement, GameActions::Result::Ptr res) const; - GameActions::Result::Ptr ElementUpdateExecute(PathElement* pathElement, GameActions::Result::Ptr res) const; - GameActions::Result::Ptr ElementInsertQuery(GameActions::Result::Ptr res) const; - GameActions::Result::Ptr ElementInsertExecute(GameActions::Result::Ptr res) const; + GameActions::Result ElementUpdateQuery(PathElement* pathElement, GameActions::Result res) const; + GameActions::Result ElementUpdateExecute(PathElement* pathElement, GameActions::Result res) const; + GameActions::Result ElementInsertQuery(GameActions::Result res) const; + GameActions::Result ElementInsertExecute(GameActions::Result res) const; void AutomaticallySetPeepSpawn() const; void RemoveIntersectingWalls(PathElement* pathElement) const; PathElement* map_get_footpath_element_slope(const CoordsXYZ& footpathPos, int32_t slope) const; diff --git a/src/openrct2/actions/FootpathPlaceFromTrackAction.cpp b/src/openrct2/actions/FootpathPlaceFromTrackAction.cpp index f065357607..b5a6d42e4a 100644 --- a/src/openrct2/actions/FootpathPlaceFromTrackAction.cpp +++ b/src/openrct2/actions/FootpathPlaceFromTrackAction.cpp @@ -47,46 +47,48 @@ uint16_t FootpathPlaceFromTrackAction::GetActionFlags() const return GameAction::GetActionFlags(); } -GameActions::Result::Ptr FootpathPlaceFromTrackAction::Query() const +GameActions::Result FootpathPlaceFromTrackAction::Query() const { - GameActions::Result::Ptr res = std::make_unique(); - res->Cost = 0; - res->Expenditure = ExpenditureType::Landscaping; - res->Position = _loc.ToTileCentre(); + auto res = GameActions::Result(); + res.Cost = 0; + res.Expenditure = ExpenditureType::Landscaping; + res.Position = _loc.ToTileCentre(); gFootpathGroundFlags = 0; if (!LocationValid(_loc) || map_is_edge(_loc)) { - return MakeResult( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_OFF_EDGE_OF_MAP); } if (!((gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) || gCheatsSandboxMode) && !map_is_location_owned(_loc)) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_LAND_NOT_OWNED_BY_PARK); } if (_loc.z < FootpathMinHeight) { - return MakeResult(GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_TOO_LOW); + return GameActions::Result( + GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_TOO_LOW); } if (_loc.z > FootpathMaxHeight) { - return MakeResult(GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_TOO_HIGH); + return GameActions::Result( + GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_TOO_HIGH); } return ElementInsertQuery(std::move(res)); } -GameActions::Result::Ptr FootpathPlaceFromTrackAction::Execute() const +GameActions::Result FootpathPlaceFromTrackAction::Execute() const { - GameActions::Result::Ptr res = std::make_unique(); - res->Cost = 0; - res->Expenditure = ExpenditureType::Landscaping; - res->Position = _loc.ToTileCentre(); + auto res = GameActions::Result(); + res.Cost = 0; + res.Expenditure = ExpenditureType::Landscaping; + res.Position = _loc.ToTileCentre(); if (!(GetFlags() & GAME_COMMAND_FLAG_GHOST)) { @@ -101,18 +103,18 @@ GameActions::Result::Ptr FootpathPlaceFromTrackAction::Execute() const return ElementInsertExecute(std::move(res)); } -GameActions::Result::Ptr FootpathPlaceFromTrackAction::ElementInsertQuery(GameActions::Result::Ptr res) const +GameActions::Result FootpathPlaceFromTrackAction::ElementInsertQuery(GameActions::Result res) const { bool entrancePath = false, entranceIsSamePath = false; if (!MapCheckCapacityAndReorganise(_loc)) { - return MakeResult( + return GameActions::Result( GameActions::Status::NoFreeElements, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); } - res->Cost = MONEY(12, 00); + res.Cost = MONEY(12, 00); QuarterTile quarterTile{ 0b1111, 0 }; auto zLow = _loc.z; @@ -132,7 +134,7 @@ GameActions::Result::Ptr FootpathPlaceFromTrackAction::ElementInsertQuery(GameAc if (IsSameAsEntranceElement(*entranceElement)) entranceIsSamePath = true; else - res->Cost -= MONEY(6, 00); + res.Cost -= MONEY(6, 00); } // Do not attempt to build a crossing with a queue or a sloped path. @@ -141,38 +143,39 @@ GameActions::Result::Ptr FootpathPlaceFromTrackAction::ElementInsertQuery(GameAc : CREATE_CROSSING_MODE_PATH_OVER_TRACK; auto canBuild = MapCanConstructWithClearAt( { _loc, zLow, zHigh }, &map_place_non_scenery_clear_func, quarterTile, GetFlags(), crossingMode); - if (!entrancePath && canBuild->Error != GameActions::Status::Ok) + if (!entrancePath && canBuild.Error != GameActions::Status::Ok) { - canBuild->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + canBuild.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; return canBuild; } - res->Cost += canBuild->Cost; + res.Cost += canBuild.Cost; - const auto clearanceData = canBuild->GetData(); + const auto clearanceData = canBuild.GetData(); gFootpathGroundFlags = clearanceData.GroundFlags; if (!gCheatsDisableClearanceChecks && (clearanceData.GroundFlags & ELEMENT_IS_UNDERWATER)) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_CANT_BUILD_THIS_UNDERWATER); } auto surfaceElement = map_get_surface_element_at(_loc); if (surfaceElement == nullptr) { - return MakeResult(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } int32_t supportHeight = zLow - surfaceElement->GetBaseZ(); - res->Cost += supportHeight < 0 ? MONEY(20, 00) : (supportHeight / PATH_HEIGHT_STEP) * MONEY(5, 00); + res.Cost += supportHeight < 0 ? MONEY(20, 00) : (supportHeight / PATH_HEIGHT_STEP) * MONEY(5, 00); // Prevent the place sound from being spammed if (entranceIsSamePath) - res->Cost = 0; + res.Cost = 0; return res; } -GameActions::Result::Ptr FootpathPlaceFromTrackAction::ElementInsertExecute(GameActions::Result::Ptr res) const +GameActions::Result FootpathPlaceFromTrackAction::ElementInsertExecute(GameActions::Result res) const { bool entrancePath = false, entranceIsSamePath = false; @@ -181,7 +184,7 @@ GameActions::Result::Ptr FootpathPlaceFromTrackAction::ElementInsertExecute(Game footpath_remove_litter(_loc); } - res->Cost = MONEY(12, 00); + res.Cost = MONEY(12, 00); QuarterTile quarterTile{ 0b1111, 0 }; auto zLow = _loc.z; @@ -201,7 +204,7 @@ GameActions::Result::Ptr FootpathPlaceFromTrackAction::ElementInsertExecute(Game if (IsSameAsEntranceElement(*entranceElement)) entranceIsSamePath = true; else - res->Cost -= MONEY(6, 00); + res.Cost -= MONEY(6, 00); } // Do not attempt to build a crossing with a queue or a sloped path. @@ -211,23 +214,24 @@ GameActions::Result::Ptr FootpathPlaceFromTrackAction::ElementInsertExecute(Game auto canBuild = MapCanConstructWithClearAt( { _loc, zLow, zHigh }, &map_place_non_scenery_clear_func, quarterTile, GAME_COMMAND_FLAG_APPLY | GetFlags(), crossingMode); - if (!entrancePath && canBuild->Error != GameActions::Status::Ok) + if (!entrancePath && canBuild.Error != GameActions::Status::Ok) { - canBuild->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + canBuild.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; return canBuild; } - res->Cost += canBuild->Cost; + res.Cost += canBuild.Cost; - const auto clearanceData = canBuild->GetData(); + const auto clearanceData = canBuild.GetData(); gFootpathGroundFlags = clearanceData.GroundFlags; auto surfaceElement = map_get_surface_element_at(_loc); if (surfaceElement == nullptr) { - return MakeResult(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } int32_t supportHeight = zLow - surfaceElement->GetBaseZ(); - res->Cost += supportHeight < 0 ? MONEY(20, 00) : (supportHeight / PATH_HEIGHT_STEP) * MONEY(5, 00); + res.Cost += supportHeight < 0 ? MONEY(20, 00) : (supportHeight / PATH_HEIGHT_STEP) * MONEY(5, 00); if (entrancePath) { @@ -275,7 +279,7 @@ GameActions::Result::Ptr FootpathPlaceFromTrackAction::ElementInsertExecute(Game // Prevent the place sound from being spammed if (entranceIsSamePath) - res->Cost = 0; + res.Cost = 0; return res; } diff --git a/src/openrct2/actions/FootpathPlaceFromTrackAction.h b/src/openrct2/actions/FootpathPlaceFromTrackAction.h index adabeabd8e..3ca0b5bb40 100644 --- a/src/openrct2/actions/FootpathPlaceFromTrackAction.h +++ b/src/openrct2/actions/FootpathPlaceFromTrackAction.h @@ -30,11 +30,11 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr ElementInsertQuery(GameActions::Result::Ptr res) const; - GameActions::Result::Ptr ElementInsertExecute(GameActions::Result::Ptr res) const; + GameActions::Result ElementInsertQuery(GameActions::Result res) const; + GameActions::Result ElementInsertExecute(GameActions::Result res) const; bool IsSameAsEntranceElement(const EntranceElement& entranceElement) const; }; diff --git a/src/openrct2/actions/FootpathRemoveAction.cpp b/src/openrct2/actions/FootpathRemoveAction.cpp index 92c8d68264..aa64dbdfe3 100644 --- a/src/openrct2/actions/FootpathRemoveAction.cpp +++ b/src/openrct2/actions/FootpathRemoveAction.cpp @@ -43,40 +43,42 @@ void FootpathRemoveAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc); } -GameActions::Result::Ptr FootpathRemoveAction::Query() const +GameActions::Result FootpathRemoveAction::Query() const { - GameActions::Result::Ptr res = std::make_unique(); - res->Cost = 0; - res->Expenditure = ExpenditureType::Landscaping; - res->Position = { _loc.x + 16, _loc.y + 16, _loc.z }; + auto res = GameActions::Result(); + res.Cost = 0; + res.Expenditure = ExpenditureType::Landscaping; + res.Position = { _loc.x + 16, _loc.y + 16, _loc.z }; if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_REMOVE_FOOTPATH_FROM_HERE, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result( + GameActions::Status::NotOwned, STR_CANT_REMOVE_FOOTPATH_FROM_HERE, STR_LAND_NOT_OWNED_BY_PARK); } if (!((gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) || gCheatsSandboxMode) && !map_is_location_owned(_loc)) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_REMOVE_FOOTPATH_FROM_HERE, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result( + GameActions::Status::NotOwned, STR_CANT_REMOVE_FOOTPATH_FROM_HERE, STR_LAND_NOT_OWNED_BY_PARK); } TileElement* footpathElement = GetFootpathElement(); if (footpathElement == nullptr) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_FOOTPATH_FROM_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_FOOTPATH_FROM_HERE, STR_NONE); } - res->Cost = GetRefundPrice(footpathElement); + res.Cost = GetRefundPrice(footpathElement); return res; } -GameActions::Result::Ptr FootpathRemoveAction::Execute() const +GameActions::Result FootpathRemoveAction::Execute() const { - GameActions::Result::Ptr res = std::make_unique(); - res->Cost = 0; - res->Expenditure = ExpenditureType::Landscaping; - res->Position = { _loc.x + 16, _loc.y + 16, _loc.z }; + auto res = GameActions::Result(); + res.Cost = 0; + res.Expenditure = ExpenditureType::Landscaping; + res.Position = { _loc.x + 16, _loc.y + 16, _loc.z }; if (!(GetFlags() & GAME_COMMAND_FLAG_GHOST)) { @@ -89,9 +91,9 @@ GameActions::Result::Ptr FootpathRemoveAction::Execute() const { footpath_queue_chain_reset(); auto bannerRes = RemoveBannersAtElement(_loc, footpathElement); - if (bannerRes->Error == GameActions::Status::Ok) + if (bannerRes.Error == GameActions::Status::Ok) { - res->Cost += bannerRes->Cost; + res.Cost += bannerRes.Cost; } footpath_remove_edges_at(_loc, footpathElement); map_invalidate_tile_full(_loc); @@ -111,10 +113,10 @@ GameActions::Result::Ptr FootpathRemoveAction::Execute() const } else { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_FOOTPATH_FROM_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_FOOTPATH_FROM_HERE, STR_NONE); } - res->Cost += GetRefundPrice(footpathElement); + res.Cost += GetRefundPrice(footpathElement); return res; } @@ -158,9 +160,9 @@ money32 FootpathRemoveAction::GetRefundPrice(TileElement* footpathElement) const * * rct2: 0x006BA23E */ -GameActions::Result::Ptr FootpathRemoveAction::RemoveBannersAtElement(const CoordsXY& loc, TileElement* tileElement) const +GameActions::Result FootpathRemoveAction::RemoveBannersAtElement(const CoordsXY& loc, TileElement* tileElement) const { - auto result = MakeResult(); + auto result = GameActions::Result(); while (!(tileElement++)->IsLastForTile()) { if (tileElement->GetType() == TILE_ELEMENT_TYPE_PATH) @@ -175,9 +177,9 @@ GameActions::Result::Ptr FootpathRemoveAction::RemoveBannersAtElement(const Coor bannerRemoveAction.SetFlags(bannerFlags); auto res = GameActions::ExecuteNested(&bannerRemoveAction); // Ghost removal is free - if (res->Error == GameActions::Status::Ok && !isGhost) + if (res.Error == GameActions::Status::Ok && !isGhost) { - result->Cost += res->Cost; + result.Cost += res.Cost; } tileElement--; } diff --git a/src/openrct2/actions/FootpathRemoveAction.h b/src/openrct2/actions/FootpathRemoveAction.h index bc803f91df..1b8fc1d0be 100644 --- a/src/openrct2/actions/FootpathRemoveAction.h +++ b/src/openrct2/actions/FootpathRemoveAction.h @@ -26,11 +26,11 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: TileElement* GetFootpathElement() const; money32 GetRefundPrice(TileElement* footpathElement) const; - GameActions::Result::Ptr RemoveBannersAtElement(const CoordsXY& loc, TileElement* tileElement) const; + GameActions::Result RemoveBannersAtElement(const CoordsXY& loc, TileElement* tileElement) const; }; diff --git a/src/openrct2/actions/GameAction.cpp b/src/openrct2/actions/GameAction.cpp index 686c4942b2..48324d2c48 100644 --- a/src/openrct2/actions/GameAction.cpp +++ b/src/openrct2/actions/GameAction.cpp @@ -142,8 +142,8 @@ namespace GameActions Guard::Assert(action != nullptr); - GameActions::Result::Ptr result = Execute(action); - if (result->Error == GameActions::Status::Ok && network_get_mode() == NETWORK_MODE_SERVER) + GameActions::Result result = Execute(action); + if (result.Error == GameActions::Status::Ok && network_get_mode() == NETWORK_MODE_SERVER) { // Relay this action to all other clients. network_send_game_action(action); @@ -188,43 +188,43 @@ namespace GameActions return false; } - static GameActions::Result::Ptr QueryInternal(const GameAction* action, bool topLevel) + static GameActions::Result QueryInternal(const GameAction* action, bool topLevel) { Guard::ArgumentNotNull(action); uint16_t actionFlags = action->GetActionFlags(); if (topLevel && !CheckActionInPausedMode(actionFlags)) { - GameActions::Result::Ptr result = std::make_unique(); + GameActions::Result result = GameActions::Result(); - result->Error = GameActions::Status::GamePaused; - result->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; - result->ErrorMessage = STR_CONSTRUCTION_NOT_POSSIBLE_WHILE_GAME_IS_PAUSED; + result.Error = GameActions::Status::GamePaused; + result.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + result.ErrorMessage = STR_CONSTRUCTION_NOT_POSSIBLE_WHILE_GAME_IS_PAUSED; return result; } auto result = action->Query(); - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { - if (!finance_check_affordability(result->Cost, action->GetFlags())) + if (!finance_check_affordability(result.Cost, action->GetFlags())) { - result->Error = GameActions::Status::InsufficientFunds; - result->ErrorTitle = STR_CANT_DO_THIS; - result->ErrorMessage = STR_NOT_ENOUGH_CASH_REQUIRES; - Formatter(result->ErrorMessageArgs.data()).Add(result->Cost); + result.Error = GameActions::Status::InsufficientFunds; + result.ErrorTitle = STR_CANT_DO_THIS; + result.ErrorMessage = STR_NOT_ENOUGH_CASH_REQUIRES; + Formatter(result.ErrorMessageArgs.data()).Add(result.Cost); } } return result; } - GameActions::Result::Ptr Query(const GameAction* action) + GameActions::Result Query(const GameAction* action) { return QueryInternal(action, true); } - GameActions::Result::Ptr QueryNested(const GameAction* action) + GameActions::Result QueryNested(const GameAction* action) { return QueryInternal(action, false); } @@ -260,15 +260,15 @@ namespace GameActions action->Serialise(ds); } - static void LogActionFinish(ActionLogContext_t& ctx, const GameAction* action, const GameActions::Result::Ptr& result) + static void LogActionFinish(ActionLogContext_t& ctx, const GameAction* action, const GameActions::Result& result) { MemoryStream& output = ctx.output; char temp[128] = {}; - if (result->Error != GameActions::Status::Ok) + if (result.Error != GameActions::Status::Ok) { - snprintf(temp, sizeof(temp), ") Failed, %u", static_cast(result->Error)); + snprintf(temp, sizeof(temp), ") Failed, %u", static_cast(result.Error)); } else { @@ -283,7 +283,7 @@ namespace GameActions network_append_server_log(text); } - static GameActions::Result::Ptr ExecuteInternal(const GameAction* action, bool topLevel) + static GameActions::Result ExecuteInternal(const GameAction* action, bool topLevel) { Guard::ArgumentNotNull(action); @@ -297,19 +297,18 @@ namespace GameActions if ((flags & GAME_COMMAND_FLAG_REPLAY) == 0) { // TODO: Introduce proper error. - GameActions::Result::Ptr result = std::make_unique(); - - result->Error = GameActions::Status::GamePaused; - result->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; - result->ErrorMessage = STR_CONSTRUCTION_NOT_POSSIBLE_WHILE_GAME_IS_PAUSED; + auto result = GameActions::Result(); + result.Error = GameActions::Status::GamePaused; + result.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + result.ErrorMessage = STR_CONSTRUCTION_NOT_POSSIBLE_WHILE_GAME_IS_PAUSED; return result; } } - GameActions::Result::Ptr result = QueryInternal(action, topLevel); + GameActions::Result result = QueryInternal(action, topLevel); #ifdef ENABLE_SCRIPTING - if (result->Error == GameActions::Status::Ok + if (result.Error == GameActions::Status::Ok && ((network_get_mode() == NETWORK_MODE_NONE) || (flags & GAME_COMMAND_FLAG_NETWORKED))) { auto& scriptEngine = GetContext()->GetScriptEngine(); @@ -317,7 +316,7 @@ namespace GameActions // Script hooks may now have changed the game action result... } #endif - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { if (topLevel) { @@ -353,7 +352,7 @@ namespace GameActions // Execute the action, changing the game state result = action->Execute(); #ifdef ENABLE_SCRIPTING - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { auto& scriptEngine = GetContext()->GetScriptEngine(); scriptEngine.RunGameActionHooks(*action, result, true); @@ -368,13 +367,13 @@ namespace GameActions return result; // Update money balance - if (result->Error == GameActions::Status::Ok && finance_check_money_required(flags) && result->Cost != 0) + if (result.Error == GameActions::Status::Ok && finance_check_money_required(flags) && result.Cost != 0) { - finance_payment(result->Cost, result->Expenditure); - MoneyEffect::Create(result->Cost, result->Position); + finance_payment(result.Cost, result.Expenditure); + MoneyEffect::Create(result.Cost, result.Position); } - if (!(actionFlags & GameActions::Flags::ClientOnly) && result->Error == GameActions::Status::Ok) + if (!(actionFlags & GameActions::Flags::ClientOnly) && result.Error == GameActions::Status::Ok) { if (network_get_mode() != NETWORK_MODE_NONE) { @@ -385,14 +384,14 @@ namespace GameActions playerIndex != -1, "Unable to find player %u for game action %u", playerId, action->GetType()); network_set_player_last_action(playerIndex, action->GetType()); - if (result->Cost != 0) + if (result.Cost != 0) { - network_add_player_money_spent(playerIndex, result->Cost); + network_add_player_money_spent(playerIndex, result.Cost); } - if (!result->Position.IsNull()) + if (!result.Position.IsNull()) { - network_set_player_last_action_coord(playerIndex, result->Position); + network_set_player_last_action_coord(playerIndex, result.Position); } } else @@ -425,7 +424,7 @@ namespace GameActions auto cb = action->GetCallback(); if (cb != nullptr) { - cb(action, result.get()); + cb(action, &result); } // Only show errors when its not a ghost and not a preview and also top level action. @@ -443,21 +442,21 @@ namespace GameActions } } - if (result->Error != GameActions::Status::Ok && shouldShowError) + if (result.Error != GameActions::Status::Ok && shouldShowError) { auto windowManager = GetContext()->GetUiContext()->GetWindowManager(); - windowManager->ShowError(result->GetErrorTitle(), result->GetErrorMessage()); + windowManager->ShowError(result.GetErrorTitle(), result.GetErrorMessage()); } return result; } - GameActions::Result::Ptr Execute(const GameAction* action) + GameActions::Result Execute(const GameAction* action) { return ExecuteInternal(action, true); } - GameActions::Result::Ptr ExecuteNested(const GameAction* action) + GameActions::Result ExecuteNested(const GameAction* action) { return ExecuteInternal(action, false); } diff --git a/src/openrct2/actions/GameAction.h b/src/openrct2/actions/GameAction.h index fc8fa89267..4a017bb1f5 100644 --- a/src/openrct2/actions/GameAction.h +++ b/src/openrct2/actions/GameAction.h @@ -217,12 +217,12 @@ public: /** * Query the result of the game action without changing the game state. */ - virtual GameActions::Result::Ptr Query() const abstract; + virtual GameActions::Result Query() const abstract; /** * Apply the game action and change the game state. */ - virtual GameActions::Result::Ptr Execute() const abstract; + virtual GameActions::Result Execute() const abstract; bool LocationValid(const CoordsXY& coords) const; }; @@ -244,12 +244,6 @@ public: : GameAction(TYPE) { } - -protected: - template static std::unique_ptr MakeResult(TTypes&&... args) - { - return std::make_unique(std::forward(args)...); - } }; namespace GameActions @@ -276,11 +270,11 @@ namespace GameActions GameAction::Ptr Clone(const GameAction* action); // This should be used if a round trip is to be expected. - GameActions::Result::Ptr Query(const GameAction* action); - GameActions::Result::Ptr Execute(const GameAction* action); + GameActions::Result Query(const GameAction* action); + GameActions::Result Execute(const GameAction* action); // This should be used from within game actions. - GameActions::Result::Ptr QueryNested(const GameAction* action); - GameActions::Result::Ptr ExecuteNested(const GameAction* action); + GameActions::Result QueryNested(const GameAction* action); + GameActions::Result ExecuteNested(const GameAction* action); } // namespace GameActions diff --git a/src/openrct2/actions/GameActionCompat.cpp b/src/openrct2/actions/GameActionCompat.cpp index 6aebf1433c..a778adfa02 100644 --- a/src/openrct2/actions/GameActionCompat.cpp +++ b/src/openrct2/actions/GameActionCompat.cpp @@ -37,12 +37,12 @@ money32 park_entrance_place_ghost(const CoordsXYZD& entranceLoc) gameAction.SetFlags(GAME_COMMAND_FLAG_GHOST); auto result = GameActions::Execute(&gameAction); - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { gParkEntranceGhostPosition = entranceLoc; gParkEntranceGhostExists = true; } - return result->Cost; + return result.Cost; } #pragma endregion @@ -135,7 +135,7 @@ money32 maze_set_track( auto gameAction = MazeSetTrackAction({ x, y, z, direction }, initialPlacement, rideIndex, mode); gameAction.SetFlags(flags); - GameActions::Result::Ptr res; + GameActions::Result res; if (!(flags & GAME_COMMAND_FLAG_APPLY)) res = GameActions::Query(&gameAction); @@ -144,21 +144,21 @@ money32 maze_set_track( // NOTE: ride_construction_tooldown_construct requires them to be set. // Refactor result type once there's no C code referencing this function. - if (const auto* title = std::get_if(&res->ErrorTitle)) + if (const auto* title = std::get_if(&res.ErrorTitle)) gGameCommandErrorTitle = *title; else gGameCommandErrorTitle = STR_NONE; - if (const auto* message = std::get_if(&res->ErrorMessage)) + if (const auto* message = std::get_if(&res.ErrorMessage)) gGameCommandErrorText = *message; else gGameCommandErrorText = STR_NONE; - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) { return MONEY32_UNDEFINED; } - return res->Cost; + return res.Cost; } #pragma endregion diff --git a/src/openrct2/actions/GameActionResult.h b/src/openrct2/actions/GameActionResult.h index 41a4410003..e79eeb6811 100644 --- a/src/openrct2/actions/GameActionResult.h +++ b/src/openrct2/actions/GameActionResult.h @@ -61,7 +61,6 @@ namespace GameActions class Result final { public: - using Ptr = std::unique_ptr; using StringVariant = std::variant; GameActions::Status Error = GameActions::Status::Ok; diff --git a/src/openrct2/actions/GuestSetFlagsAction.cpp b/src/openrct2/actions/GuestSetFlagsAction.cpp index de52b37a98..303e092428 100644 --- a/src/openrct2/actions/GuestSetFlagsAction.cpp +++ b/src/openrct2/actions/GuestSetFlagsAction.cpp @@ -37,27 +37,27 @@ void GuestSetFlagsAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_peepId) << DS_TAG(_newFlags); } -GameActions::Result::Ptr GuestSetFlagsAction::Query() const +GameActions::Result GuestSetFlagsAction::Query() const { auto* peep = TryGetEntity(_peepId); if (peep == nullptr) { log_error("Used invalid sprite index for peep: %u", static_cast(_peepId)); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_THIS, STR_NONE); } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr GuestSetFlagsAction::Execute() const +GameActions::Result GuestSetFlagsAction::Execute() const { auto* peep = TryGetEntity(_peepId); if (peep == nullptr) { log_error("Used invalid sprite index for peep: %u", static_cast(_peepId)); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_THIS, STR_NONE); } peep->PeepFlags = _newFlags; - return std::make_unique(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/GuestSetFlagsAction.h b/src/openrct2/actions/GuestSetFlagsAction.h index 66462b8e3b..9cc5b4384f 100644 --- a/src/openrct2/actions/GuestSetFlagsAction.h +++ b/src/openrct2/actions/GuestSetFlagsAction.h @@ -26,6 +26,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/GuestSetNameAction.cpp b/src/openrct2/actions/GuestSetNameAction.cpp index af9f3769ad..7627298b87 100644 --- a/src/openrct2/actions/GuestSetNameAction.cpp +++ b/src/openrct2/actions/GuestSetNameAction.cpp @@ -54,41 +54,41 @@ void GuestSetNameAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_spriteIndex) << DS_TAG(_name); } -GameActions::Result::Ptr GuestSetNameAction::Query() const +GameActions::Result GuestSetNameAction::Query() const { if (_spriteIndex >= MAX_ENTITIES) { - return std::make_unique(GameActions::Status::InvalidParameters, STR_CANT_NAME_GUEST, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_NAME_GUEST, STR_NONE); } auto guest = TryGetEntity(_spriteIndex); if (guest == nullptr) { log_warning("Invalid game command for sprite %u", _spriteIndex); - return std::make_unique(GameActions::Status::InvalidParameters, STR_CANT_NAME_GUEST, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_NAME_GUEST, STR_NONE); } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr GuestSetNameAction::Execute() const +GameActions::Result GuestSetNameAction::Execute() const { auto guest = TryGetEntity(_spriteIndex); if (guest == nullptr) { log_warning("Invalid game command for sprite %u", _spriteIndex); - return std::make_unique(GameActions::Status::InvalidParameters, STR_CANT_NAME_GUEST, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_NAME_GUEST, STR_NONE); } auto curName = guest->GetName(); if (curName == _name) { - return std::make_unique(); + return GameActions::Result(); } if (!guest->SetName(_name)) { - return std::make_unique(GameActions::Status::Unknown, STR_CANT_NAME_GUEST, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_NAME_GUEST, STR_NONE); } // Easter egg functions are for guests only @@ -99,8 +99,8 @@ GameActions::Result::Ptr GuestSetNameAction::Execute() const auto intent = Intent(INTENT_ACTION_REFRESH_GUEST_LIST); context_broadcast_intent(&intent); - auto res = std::make_unique(); - res->Position = guest->GetLocation(); + auto res = GameActions::Result(); + res.Position = guest->GetLocation(); return res; } diff --git a/src/openrct2/actions/GuestSetNameAction.h b/src/openrct2/actions/GuestSetNameAction.h index c1c404989b..347bc6b079 100644 --- a/src/openrct2/actions/GuestSetNameAction.h +++ b/src/openrct2/actions/GuestSetNameAction.h @@ -29,6 +29,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/LandBuyRightsAction.cpp b/src/openrct2/actions/LandBuyRightsAction.cpp index 4b23324081..2fa1c32d71 100644 --- a/src/openrct2/actions/LandBuyRightsAction.cpp +++ b/src/openrct2/actions/LandBuyRightsAction.cpp @@ -48,19 +48,19 @@ void LandBuyRightsAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_range) << DS_TAG(_setting); } -GameActions::Result::Ptr LandBuyRightsAction::Query() const +GameActions::Result LandBuyRightsAction::Query() const { return QueryExecute(false); } -GameActions::Result::Ptr LandBuyRightsAction::Execute() const +GameActions::Result LandBuyRightsAction::Execute() const { return QueryExecute(true); } -GameActions::Result::Ptr LandBuyRightsAction::QueryExecute(bool isExecuting) const +GameActions::Result LandBuyRightsAction::QueryExecute(bool isExecuting) const { - auto res = MakeResult(); + auto res = GameActions::Result(); MapRange normRange = _range.Normalise(); // Keep big coordinates within map boundaries @@ -75,8 +75,8 @@ GameActions::Result::Ptr LandBuyRightsAction::QueryExecute(bool isExecuting) con (validRange.GetTop() + validRange.GetBottom()) / 2 + 16, 0 }; centre.z = tile_element_height(centre); - res->Position = centre; - res->Expenditure = ExpenditureType::LandPurchase; + res.Position = centre; + res.Expenditure = ExpenditureType::LandPurchase; // Game command modified to accept selection size for (auto y = validRange.GetTop(); y <= validRange.GetBottom(); y += COORDS_XY_STEP) @@ -86,9 +86,9 @@ GameActions::Result::Ptr LandBuyRightsAction::QueryExecute(bool isExecuting) con if (!LocationValid({ x, y })) continue; auto result = map_buy_land_rights_for_tile({ x, y }, isExecuting); - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { - res->Cost += result->Cost; + res.Cost += result.Cost; } } } @@ -99,22 +99,22 @@ GameActions::Result::Ptr LandBuyRightsAction::QueryExecute(bool isExecuting) con return res; } -GameActions::Result::Ptr LandBuyRightsAction::map_buy_land_rights_for_tile(const CoordsXY& loc, bool isExecuting) const +GameActions::Result LandBuyRightsAction::map_buy_land_rights_for_tile(const CoordsXY& loc, bool isExecuting) const { if (_setting >= LandBuyRightSetting::Count) { log_warning("Tried calling buy land rights with an incorrect setting. setting = %u", _setting); - return MakeResult(GameActions::Status::InvalidParameters, _ErrorTitles[0], STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, _ErrorTitles[0], STR_NONE); } SurfaceElement* surfaceElement = map_get_surface_element_at(loc); if (surfaceElement == nullptr) { log_error("Could not find surface. x = %d, y = %d", loc.x, loc.y); - return MakeResult(GameActions::Status::InvalidParameters, _ErrorTitles[EnumValue(_setting)], STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, _ErrorTitles[EnumValue(_setting)], STR_NONE); } - auto res = MakeResult(); + auto res = GameActions::Result(); switch (_setting) { case LandBuyRightSetting::BuyLand: // 0 @@ -126,14 +126,15 @@ GameActions::Result::Ptr LandBuyRightsAction::map_buy_land_rights_for_tile(const if ((gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) != 0 || (surfaceElement->GetOwnership() & OWNERSHIP_AVAILABLE) == 0) { - return MakeResult(GameActions::Status::NotOwned, _ErrorTitles[EnumValue(_setting)], STR_LAND_NOT_FOR_SALE); + return GameActions::Result( + GameActions::Status::NotOwned, _ErrorTitles[EnumValue(_setting)], STR_LAND_NOT_FOR_SALE); } if (isExecuting) { surfaceElement->SetOwnership(OWNERSHIP_OWNED); update_park_fences_around_tile(loc); } - res->Cost = gLandPrice; + res.Cost = gLandPrice; return res; case LandBuyRightSetting::BuyConstructionRights: // 2 @@ -145,7 +146,7 @@ GameActions::Result::Ptr LandBuyRightsAction::map_buy_land_rights_for_tile(const if ((gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) != 0 || (surfaceElement->GetOwnership() & OWNERSHIP_CONSTRUCTION_RIGHTS_AVAILABLE) == 0) { - return MakeResult( + return GameActions::Result( GameActions::Status::NotOwned, _ErrorTitles[EnumValue(_setting)], STR_CONSTRUCTION_RIGHTS_NOT_FOR_SALE); } @@ -155,11 +156,11 @@ GameActions::Result::Ptr LandBuyRightsAction::map_buy_land_rights_for_tile(const uint16_t baseZ = surfaceElement->GetBaseZ(); map_invalidate_tile({ loc, baseZ, baseZ + 16 }); } - res->Cost = gConstructionRightsPrice; + res.Cost = gConstructionRightsPrice; return res; default: log_warning("Tried calling buy land rights with an incorrect setting. setting = %u", _setting); - return MakeResult(GameActions::Status::InvalidParameters, _ErrorTitles[0], STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, _ErrorTitles[0], STR_NONE); } } diff --git a/src/openrct2/actions/LandBuyRightsAction.h b/src/openrct2/actions/LandBuyRightsAction.h index ff4c7e2ca9..28d5857ec3 100644 --- a/src/openrct2/actions/LandBuyRightsAction.h +++ b/src/openrct2/actions/LandBuyRightsAction.h @@ -37,10 +37,10 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr QueryExecute(bool isExecuting) const; - GameActions::Result::Ptr map_buy_land_rights_for_tile(const CoordsXY& loc, bool isExecuting) const; + GameActions::Result QueryExecute(bool isExecuting) const; + GameActions::Result map_buy_land_rights_for_tile(const CoordsXY& loc, bool isExecuting) const; }; diff --git a/src/openrct2/actions/LandLowerAction.cpp b/src/openrct2/actions/LandLowerAction.cpp index bf6f66428e..00d6986540 100644 --- a/src/openrct2/actions/LandLowerAction.cpp +++ b/src/openrct2/actions/LandLowerAction.cpp @@ -42,19 +42,19 @@ void LandLowerAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_coords) << DS_TAG(_range) << DS_TAG(_selectionType); } -GameActions::Result::Ptr LandLowerAction::Query() const +GameActions::Result LandLowerAction::Query() const { return QueryExecute(false); } -GameActions::Result::Ptr LandLowerAction::Execute() const +GameActions::Result LandLowerAction::Execute() const { return QueryExecute(true); } -GameActions::Result::Ptr LandLowerAction::QueryExecute(bool isExecuting) const +GameActions::Result LandLowerAction::QueryExecute(bool isExecuting) const { - auto res = MakeResult(); + auto res = GameActions::Result(); size_t tableRow = _selectionType; // The selections between MAP_SELECT_TYPE_FULL and MAP_SELECT_TYPE_EDGE_0 are not included in the tables @@ -69,8 +69,8 @@ GameActions::Result::Ptr LandLowerAction::QueryExecute(bool isExecuting) const MapRange validRange = MapRange{ aX, aY, bX, bY }; - res->Position = { _coords.x, _coords.y, tile_element_height(_coords) }; - res->Expenditure = ExpenditureType::Landscaping; + res.Position = { _coords.x, _coords.y, tile_element_height(_coords) }; + res.Expenditure = ExpenditureType::Landscaping; if (isExecuting) { @@ -120,13 +120,13 @@ GameActions::Result::Ptr LandLowerAction::QueryExecute(bool isExecuting) const landSetHeightAction.SetFlags(GetFlags()); auto result = isExecuting ? GameActions::ExecuteNested(&landSetHeightAction) : GameActions::QueryNested(&landSetHeightAction); - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { - res->Cost += result->Cost; + res.Cost += result.Cost; } else { - result->ErrorTitle = STR_CANT_LOWER_LAND_HERE; + result.ErrorTitle = STR_CANT_LOWER_LAND_HERE; return result; } } @@ -134,8 +134,7 @@ GameActions::Result::Ptr LandLowerAction::QueryExecute(bool isExecuting) const if (!withinOwnership) { - return std::make_unique( - GameActions::Status::Disallowed, STR_CANT_LOWER_LAND_HERE, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_LOWER_LAND_HERE, STR_LAND_NOT_OWNED_BY_PARK); } // Force ride construction to recheck area diff --git a/src/openrct2/actions/LandLowerAction.h b/src/openrct2/actions/LandLowerAction.h index 5f6248ed61..7a3685e8a8 100644 --- a/src/openrct2/actions/LandLowerAction.h +++ b/src/openrct2/actions/LandLowerAction.h @@ -25,9 +25,9 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr QueryExecute(bool isExecuting) const; + GameActions::Result QueryExecute(bool isExecuting) const; }; diff --git a/src/openrct2/actions/LandRaiseAction.cpp b/src/openrct2/actions/LandRaiseAction.cpp index 5a39145123..ccc124b391 100644 --- a/src/openrct2/actions/LandRaiseAction.cpp +++ b/src/openrct2/actions/LandRaiseAction.cpp @@ -43,19 +43,19 @@ void LandRaiseAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_coords) << DS_TAG(_range) << DS_TAG(_selectionType); } -GameActions::Result::Ptr LandRaiseAction::Query() const +GameActions::Result LandRaiseAction::Query() const { return QueryExecute(false); } -GameActions::Result::Ptr LandRaiseAction::Execute() const +GameActions::Result LandRaiseAction::Execute() const { return QueryExecute(true); } -GameActions::Result::Ptr LandRaiseAction::QueryExecute(bool isExecuting) const +GameActions::Result LandRaiseAction::QueryExecute(bool isExecuting) const { - auto res = MakeResult(); + auto res = GameActions::Result(); size_t tableRow = _selectionType; // The selections between MAP_SELECT_TYPE_FULL and MAP_SELECT_TYPE_EDGE_0 are not included in the tables @@ -70,8 +70,8 @@ GameActions::Result::Ptr LandRaiseAction::QueryExecute(bool isExecuting) const MapRange validRange = MapRange{ aX, aY, bX, bY }; - res->Position = { _coords.x, _coords.y, tile_element_height(_coords) }; - res->Expenditure = ExpenditureType::Landscaping; + res.Position = { _coords.x, _coords.y, tile_element_height(_coords) }; + res.Expenditure = ExpenditureType::Landscaping; if (isExecuting) { @@ -116,13 +116,13 @@ GameActions::Result::Ptr LandRaiseAction::QueryExecute(bool isExecuting) const landSetHeightAction.SetFlags(GetFlags()); auto result = isExecuting ? GameActions::ExecuteNested(&landSetHeightAction) : GameActions::QueryNested(&landSetHeightAction); - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { - res->Cost += result->Cost; + res.Cost += result.Cost; } else { - result->ErrorTitle = STR_CANT_RAISE_LAND_HERE; + result.ErrorTitle = STR_CANT_RAISE_LAND_HERE; return result; } } @@ -130,8 +130,7 @@ GameActions::Result::Ptr LandRaiseAction::QueryExecute(bool isExecuting) const if (!withinOwnership) { - return std::make_unique( - GameActions::Status::Disallowed, STR_CANT_RAISE_LAND_HERE, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_RAISE_LAND_HERE, STR_LAND_NOT_OWNED_BY_PARK); } // Force ride construction to recheck area diff --git a/src/openrct2/actions/LandRaiseAction.h b/src/openrct2/actions/LandRaiseAction.h index 19a47926a6..d52eb9ffaf 100644 --- a/src/openrct2/actions/LandRaiseAction.h +++ b/src/openrct2/actions/LandRaiseAction.h @@ -25,9 +25,9 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr QueryExecute(bool isExecuting) const; + GameActions::Result QueryExecute(bool isExecuting) const; }; diff --git a/src/openrct2/actions/LandSetHeightAction.cpp b/src/openrct2/actions/LandSetHeightAction.cpp index 8031b818e1..695e113996 100644 --- a/src/openrct2/actions/LandSetHeightAction.cpp +++ b/src/openrct2/actions/LandSetHeightAction.cpp @@ -45,25 +45,24 @@ void LandSetHeightAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_coords) << DS_TAG(_height) << DS_TAG(_style); } -GameActions::Result::Ptr LandSetHeightAction::Query() const +GameActions::Result LandSetHeightAction::Query() const { if (gParkFlags & PARK_FLAGS_FORBID_LANDSCAPE_CHANGES) { - return std::make_unique( - GameActions::Status::Disallowed, STR_FORBIDDEN_BY_THE_LOCAL_AUTHORITY, STR_NONE); + return GameActions::Result(GameActions::Status::Disallowed, STR_FORBIDDEN_BY_THE_LOCAL_AUTHORITY, STR_NONE); } rct_string_id errorTitle = CheckParameters(); if (errorTitle != STR_NONE) { - return std::make_unique(GameActions::Status::Disallowed, errorTitle, STR_NONE); + return GameActions::Result(GameActions::Status::Disallowed, errorTitle, STR_NONE); } if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && !gCheatsSandboxMode) { if (!map_is_location_in_park(_coords)) { - return std::make_unique(GameActions::Status::Disallowed, STR_LAND_NOT_OWNED_BY_PARK, STR_NONE); + return GameActions::Result(GameActions::Status::Disallowed, STR_LAND_NOT_OWNED_BY_PARK, STR_NONE); } } @@ -76,8 +75,8 @@ GameActions::Result::Ptr LandSetHeightAction::Query() const TileElement* tileElement = CheckTreeObstructions(); if (tileElement != nullptr) { - auto res = MakeResult(GameActions::Status::Disallowed, STR_NONE, STR_NONE); - map_obstruction_set_error_text(tileElement, *res); + auto res = GameActions::Result(GameActions::Status::Disallowed, STR_NONE, STR_NONE); + map_obstruction_set_error_text(tileElement, res); return res; } } @@ -90,13 +89,13 @@ GameActions::Result::Ptr LandSetHeightAction::Query() const errorTitle = CheckRideSupports(); if (errorTitle != STR_NONE) { - return std::make_unique(GameActions::Status::Disallowed, errorTitle, STR_NONE); + return GameActions::Result(GameActions::Status::Disallowed, errorTitle, STR_NONE); } } auto* surfaceElement = map_get_surface_element_at(_coords); if (surfaceElement == nullptr) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); // We need to check if there is _currently_ a level crossing on the tile. // For that, we need the old height, so we can't use the _height variable. @@ -104,14 +103,14 @@ GameActions::Result::Ptr LandSetHeightAction::Query() const auto* pathElement = map_get_footpath_element(oldCoords); if (pathElement != nullptr && pathElement->AsPath()->IsLevelCrossing(oldCoords)) { - return MakeResult(GameActions::Status::Disallowed, STR_REMOVE_LEVEL_CROSSING_FIRST, STR_NONE); + return GameActions::Result(GameActions::Status::Disallowed, STR_REMOVE_LEVEL_CROSSING_FIRST, STR_NONE); } TileElement* tileElement = CheckFloatingStructures(reinterpret_cast(surfaceElement), _height); if (tileElement != nullptr) { - auto res = MakeResult(GameActions::Status::Disallowed, STR_NONE, STR_NONE); - map_obstruction_set_error_text(tileElement, *res); + auto res = GameActions::Result(GameActions::Status::Disallowed, STR_NONE, STR_NONE); + map_obstruction_set_error_text(tileElement, res); return res; } @@ -130,27 +129,27 @@ GameActions::Result::Ptr LandSetHeightAction::Query() const auto clearResult = MapCanConstructWithClearAt( { _coords, _height * COORDS_Z_STEP, zCorner * COORDS_Z_STEP }, &map_set_land_height_clear_func, { 0b1111, 0 }, 0, CREATE_CROSSING_MODE_NONE); - if (clearResult->Error != GameActions::Status::Ok) + if (clearResult.Error != GameActions::Status::Ok) { - clearResult->Error = GameActions::Status::Disallowed; + clearResult.Error = GameActions::Status::Disallowed; return clearResult; } tileElement = CheckUnremovableObstructions(reinterpret_cast(surfaceElement), zCorner); if (tileElement != nullptr) { - auto res = MakeResult(GameActions::Status::Disallowed, STR_NONE, STR_NONE); - map_obstruction_set_error_text(tileElement, *res); + auto res = GameActions::Result(GameActions::Status::Disallowed, STR_NONE, STR_NONE); + map_obstruction_set_error_text(tileElement, res); return res; } } - auto res = std::make_unique(); - res->Cost = sceneryRemovalCost + GetSurfaceHeightChangeCost(surfaceElement); - res->Expenditure = ExpenditureType::Landscaping; + auto res = GameActions::Result(); + res.Cost = sceneryRemovalCost + GetSurfaceHeightChangeCost(surfaceElement); + res.Expenditure = ExpenditureType::Landscaping; return res; } -GameActions::Result::Ptr LandSetHeightAction::Execute() const +GameActions::Result LandSetHeightAction::Execute() const { money32 cost = MONEY(0, 0); auto surfaceHeight = tile_element_height(_coords); @@ -165,15 +164,15 @@ GameActions::Result::Ptr LandSetHeightAction::Execute() const auto* surfaceElement = map_get_surface_element_at(_coords); if (surfaceElement == nullptr) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); cost += GetSurfaceHeightChangeCost(surfaceElement); SetSurfaceHeight(reinterpret_cast(surfaceElement)); - auto res = std::make_unique(); - res->Position = { _coords.x + 16, _coords.y + 16, surfaceHeight }; - res->Cost = cost; - res->Expenditure = ExpenditureType::Landscaping; + auto res = GameActions::Result(); + res.Position = { _coords.x + 16, _coords.y + 16, surfaceHeight }; + res.Cost = cost; + res.Expenditure = ExpenditureType::Landscaping; return res; } diff --git a/src/openrct2/actions/LandSetHeightAction.h b/src/openrct2/actions/LandSetHeightAction.h index 854bb34c0b..a9b75e9a58 100644 --- a/src/openrct2/actions/LandSetHeightAction.h +++ b/src/openrct2/actions/LandSetHeightAction.h @@ -25,8 +25,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: rct_string_id CheckParameters() const; diff --git a/src/openrct2/actions/LandSetRightsAction.cpp b/src/openrct2/actions/LandSetRightsAction.cpp index e977285795..8dac23eaf2 100644 --- a/src/openrct2/actions/LandSetRightsAction.cpp +++ b/src/openrct2/actions/LandSetRightsAction.cpp @@ -53,19 +53,19 @@ void LandSetRightsAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_range) << DS_TAG(_setting) << DS_TAG(_ownership); } -GameActions::Result::Ptr LandSetRightsAction::Query() const +GameActions::Result LandSetRightsAction::Query() const { return QueryExecute(false); } -GameActions::Result::Ptr LandSetRightsAction::Execute() const +GameActions::Result LandSetRightsAction::Execute() const { return QueryExecute(true); } -GameActions::Result::Ptr LandSetRightsAction::QueryExecute(bool isExecuting) const +GameActions::Result LandSetRightsAction::QueryExecute(bool isExecuting) const { - auto res = MakeResult(); + auto res = GameActions::Result(); MapRange normRange = _range.Normalise(); // Keep big coordinates within map boundaries @@ -80,12 +80,12 @@ GameActions::Result::Ptr LandSetRightsAction::QueryExecute(bool isExecuting) con (validRange.GetTop() + validRange.GetBottom()) / 2 + 16, 0 }; centre.z = tile_element_height(centre); - res->Position = centre; - res->Expenditure = ExpenditureType::LandPurchase; + res.Position = centre; + res.Expenditure = ExpenditureType::LandPurchase; if (!(gScreenFlags & SCREEN_FLAGS_EDITOR) && !gCheatsSandboxMode) { - return MakeResult(GameActions::Status::NotInEditorMode, STR_NONE, STR_LAND_NOT_FOR_SALE); + return GameActions::Result(GameActions::Status::NotInEditorMode, STR_NONE, STR_LAND_NOT_FOR_SALE); } // Game command modified to accept selection size @@ -96,9 +96,9 @@ GameActions::Result::Ptr LandSetRightsAction::QueryExecute(bool isExecuting) con if (!LocationValid({ x, y })) continue; auto result = map_buy_land_rights_for_tile({ x, y }, isExecuting); - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { - res->Cost += result->Cost; + res.Cost += result.Cost; } } } @@ -111,16 +111,16 @@ GameActions::Result::Ptr LandSetRightsAction::QueryExecute(bool isExecuting) con return res; } -GameActions::Result::Ptr LandSetRightsAction::map_buy_land_rights_for_tile(const CoordsXY& loc, bool isExecuting) const +GameActions::Result LandSetRightsAction::map_buy_land_rights_for_tile(const CoordsXY& loc, bool isExecuting) const { SurfaceElement* surfaceElement = map_get_surface_element_at(loc); if (surfaceElement == nullptr) { log_error("Could not find surface. x = %d, y = %d", loc.x, loc.y); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - auto res = MakeResult(); + auto res = GameActions::Result(); switch (_setting) { case LandSetRightSetting::UnownLand: @@ -183,7 +183,7 @@ GameActions::Result::Ptr LandSetRightsAction::map_buy_land_rights_for_tile(const } } - res->Cost = gLandPrice; + res.Cost = gLandPrice; if (isExecuting) { if (_ownership != OWNERSHIP_UNOWNED) @@ -204,6 +204,6 @@ GameActions::Result::Ptr LandSetRightsAction::map_buy_land_rights_for_tile(const } default: log_warning("Tried calling set land rights with an incorrect setting. setting = %u", _setting); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } } diff --git a/src/openrct2/actions/LandSetRightsAction.h b/src/openrct2/actions/LandSetRightsAction.h index 3709a89381..f4077052a2 100644 --- a/src/openrct2/actions/LandSetRightsAction.h +++ b/src/openrct2/actions/LandSetRightsAction.h @@ -36,10 +36,10 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr QueryExecute(bool isExecuting) const; - GameActions::Result::Ptr map_buy_land_rights_for_tile(const CoordsXY& loc, bool isExecuting) const; + GameActions::Result QueryExecute(bool isExecuting) const; + GameActions::Result map_buy_land_rights_for_tile(const CoordsXY& loc, bool isExecuting) const; }; diff --git a/src/openrct2/actions/LandSmoothAction.cpp b/src/openrct2/actions/LandSmoothAction.cpp index f42cdf8c4e..a434d7c6db 100644 --- a/src/openrct2/actions/LandSmoothAction.cpp +++ b/src/openrct2/actions/LandSmoothAction.cpp @@ -45,17 +45,17 @@ void LandSmoothAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_coords) << DS_TAG(_range) << DS_TAG(_selectionType) << DS_TAG(_isLowering); } -GameActions::Result::Ptr LandSmoothAction::Query() const +GameActions::Result LandSmoothAction::Query() const { return SmoothLand(false); } -GameActions::Result::Ptr LandSmoothAction::Execute() const +GameActions::Result LandSmoothAction::Execute() const { return SmoothLand(true); } -GameActions::Result::Ptr LandSmoothAction::SmoothLandTile( +GameActions::Result LandSmoothAction::SmoothLandTile( int32_t direction, bool isExecuting, const CoordsXY& loc, SurfaceElement* surfaceElement) const { int32_t targetBaseZ = surfaceElement->base_height; @@ -222,9 +222,9 @@ money32 LandSmoothAction::SmoothLandRowByEdge( landSetHeightAction.SetFlags(GetFlags()); auto res = isExecuting ? GameActions::ExecuteNested(&landSetHeightAction) : GameActions::QueryNested(&landSetHeightAction); - if (res->Error == GameActions::Status::Ok) + if (res.Error == GameActions::Status::Ok) { - totalCost += res->Cost; + totalCost += res.Cost; } } return totalCost; @@ -308,15 +308,15 @@ money32 LandSmoothAction::SmoothLandRowByCorner( expectedLandHeight += landChangePerTile; // change land of current tile auto result = SmoothLandTile(direction, isExecuting, nextLoc, surfaceElement); - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { - totalCost += result->Cost; + totalCost += result.Cost; } } return totalCost; } -GameActions::Result::Ptr LandSmoothAction::SmoothLand(bool isExecuting) const +GameActions::Result LandSmoothAction::SmoothLand(bool isExecuting) const { const bool raiseLand = !_isLowering; const int32_t selectionType = _selectionType; @@ -332,10 +332,10 @@ GameActions::Result::Ptr LandSmoothAction::SmoothLand(bool isExecuting) const int32_t centreZ = tile_element_height(_coords); - auto res = MakeResult(); - res->ErrorTitle = _ErrorTitles[_isLowering ? 0 : 1]; - res->Expenditure = ExpenditureType::Landscaping; - res->Position = { _coords.x, _coords.y, centreZ }; + auto res = GameActions::Result(); + res.ErrorTitle = _ErrorTitles[_isLowering ? 0 : 1]; + res.Expenditure = ExpenditureType::Landscaping; + res.Position = { _coords.x, _coords.y, centreZ }; // Do the smoothing switch (selectionType) @@ -352,7 +352,7 @@ GameActions::Result::Ptr LandSmoothAction::SmoothLand(bool isExecuting) const { int32_t z = std::clamp( static_cast(tile_element_get_corner_height(surfaceElement, 2)), minHeight, maxHeight); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, -32, -32, 0, 2); } } @@ -362,7 +362,7 @@ GameActions::Result::Ptr LandSmoothAction::SmoothLand(bool isExecuting) const { int32_t z = std::clamp( static_cast(tile_element_get_corner_height(surfaceElement, 3)), minHeight, maxHeight); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetBottom() }, z, -32, 32, 1, 3); } } @@ -372,7 +372,7 @@ GameActions::Result::Ptr LandSmoothAction::SmoothLand(bool isExecuting) const { int32_t z = std::clamp( static_cast(tile_element_get_corner_height(surfaceElement, 0)), minHeight, maxHeight); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetRight(), validRange.GetBottom() }, z, 32, 32, 2, 0); } } @@ -382,7 +382,7 @@ GameActions::Result::Ptr LandSmoothAction::SmoothLand(bool isExecuting) const { int32_t z = std::clamp( static_cast(tile_element_get_corner_height(surfaceElement, 1)), minHeight, maxHeight); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetRight(), validRange.GetTop() }, z, 32, -32, 3, 1); } } @@ -398,7 +398,7 @@ GameActions::Result::Ptr LandSmoothAction::SmoothLand(bool isExecuting) const static_cast(tile_element_get_corner_height(surfaceElement, 3)), minHeight, maxHeight); z2 = std::clamp( static_cast(tile_element_get_corner_height(surfaceElement, 2)), minHeight, maxHeight); - res->Cost += SmoothLandRowByEdge(isExecuting, { validRange.GetLeft(), y }, z1, z2, -32, 0, 0, 1, 3, 2); + res.Cost += SmoothLandRowByEdge(isExecuting, { validRange.GetLeft(), y }, z1, z2, -32, 0, 0, 1, 3, 2); } surfaceElement = map_get_surface_element_at(CoordsXY{ validRange.GetRight(), y }); @@ -408,7 +408,7 @@ GameActions::Result::Ptr LandSmoothAction::SmoothLand(bool isExecuting) const static_cast(tile_element_get_corner_height(surfaceElement, 1)), minHeight, maxHeight); z2 = std::clamp( static_cast(tile_element_get_corner_height(surfaceElement, 0)), minHeight, maxHeight); - res->Cost += SmoothLandRowByEdge(isExecuting, { validRange.GetRight(), y }, z1, z2, 32, 0, 2, 3, 1, 0); + res.Cost += SmoothLandRowByEdge(isExecuting, { validRange.GetRight(), y }, z1, z2, 32, 0, 2, 3, 1, 0); } } @@ -421,7 +421,7 @@ GameActions::Result::Ptr LandSmoothAction::SmoothLand(bool isExecuting) const static_cast(tile_element_get_corner_height(surfaceElement, 1)), minHeight, maxHeight); z2 = std::clamp( static_cast(tile_element_get_corner_height(surfaceElement, 2)), minHeight, maxHeight); - res->Cost += SmoothLandRowByEdge(isExecuting, { x, validRange.GetTop() }, z1, z2, 0, -32, 0, 3, 1, 2); + res.Cost += SmoothLandRowByEdge(isExecuting, { x, validRange.GetTop() }, z1, z2, 0, -32, 0, 3, 1, 2); } surfaceElement = map_get_surface_element_at(CoordsXY{ x, validRange.GetBottom() }); @@ -431,7 +431,7 @@ GameActions::Result::Ptr LandSmoothAction::SmoothLand(bool isExecuting) const static_cast(tile_element_get_corner_height(surfaceElement, 0)), minHeight, maxHeight); z2 = std::clamp( static_cast(tile_element_get_corner_height(surfaceElement, 3)), minHeight, maxHeight); - res->Cost += SmoothLandRowByEdge(isExecuting, { x, validRange.GetBottom() }, z1, z2, 0, 32, 1, 2, 0, 3); + res.Cost += SmoothLandRowByEdge(isExecuting, { x, validRange.GetBottom() }, z1, z2, 0, 32, 1, 2, 0, 3); } } break; @@ -464,67 +464,67 @@ GameActions::Result::Ptr LandSmoothAction::SmoothLand(bool isExecuting) const // Smooth the corners int32_t z = map_get_corner_height(newBaseZ, newSlope, 2); - res->Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, -32, -32, 0, 2); + res.Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, -32, -32, 0, 2); z = map_get_corner_height(newBaseZ, newSlope, 0); - res->Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 32, 32, 2, 0); + res.Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 32, 32, 2, 0); z = map_get_corner_height(newBaseZ, newSlope, 3); - res->Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, -32, 32, 1, 3); + res.Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, -32, 32, 1, 3); z = map_get_corner_height(newBaseZ, newSlope, 1); - res->Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 32, -32, 3, 1); + res.Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 32, -32, 3, 1); // Smooth the edges switch (selectionType) { case MAP_SELECT_TYPE_CORNER_0: z = map_get_corner_height(newBaseZ, newSlope, 0); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 32, 0, 3, 0); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 0, 32, 1, 0); z = map_get_corner_height(newBaseZ, newSlope, 3); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, -32, 0, 0, 3); z = map_get_corner_height(newBaseZ, newSlope, 1); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 0, -32, 0, 1); break; case MAP_SELECT_TYPE_CORNER_1: z = map_get_corner_height(newBaseZ, newSlope, 1); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 32, 0, 2, 1); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 0, -32, 0, 1); z = map_get_corner_height(newBaseZ, newSlope, 2); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, -32, 0, 1, 2); z = map_get_corner_height(newBaseZ, newSlope, 0); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 0, 32, 1, 0); break; case MAP_SELECT_TYPE_CORNER_2: z = map_get_corner_height(newBaseZ, newSlope, 2); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, -32, 0, 1, 2); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 0, -32, 3, 2); z = map_get_corner_height(newBaseZ, newSlope, 1); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 32, 0, 2, 1); z = map_get_corner_height(newBaseZ, newSlope, 3); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 0, 32, 2, 3); break; case MAP_SELECT_TYPE_CORNER_3: z = map_get_corner_height(newBaseZ, newSlope, 3); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, -32, 0, 0, 3); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 0, 32, 2, 3); z = map_get_corner_height(newBaseZ, newSlope, 0); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 32, 0, 3, 0); z = map_get_corner_height(newBaseZ, newSlope, 2); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 0, -32, 3, 2); break; } @@ -581,38 +581,39 @@ GameActions::Result::Ptr LandSmoothAction::SmoothLand(bool isExecuting) const uint8_t z3 = map_get_corner_height(newBaseZ, newSlope, c3); uint8_t z4 = map_get_corner_height(newBaseZ, newSlope, c4); // Smooth the edge at the top of the new slope - res->Cost += SmoothLandRowByEdge( + res.Cost += SmoothLandRowByEdge( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z1, z2, stepOffsets[edge].x, stepOffsets[edge].y, c3, c4, c1, c2); // Smooth the edge at the bottom of the new slope - res->Cost += SmoothLandRowByEdge( + res.Cost += SmoothLandRowByEdge( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z3, z4, -stepOffsets[edge].x, -stepOffsets[edge].y, c1, c2, c3, c4); // Smooth corners - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z1, -stepOffsets[edge].y, stepOffsets[edge].x, c2, c1); - res->Cost += SmoothLandRowByCorner( + res.Cost += SmoothLandRowByCorner( isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z2, stepOffsets[edge].y, -stepOffsets[edge].x, c1, c2); int32_t z = map_get_corner_height(newBaseZ, newSlope, 2); - res->Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, -32, -32, 0, 2); + res.Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, -32, -32, 0, 2); z = map_get_corner_height(newBaseZ, newSlope, 0); - res->Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 32, 32, 2, 0); + res.Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 32, 32, 2, 0); z = map_get_corner_height(newBaseZ, newSlope, 3); - res->Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, -32, 32, 1, 3); + res.Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, -32, 32, 1, 3); z = map_get_corner_height(newBaseZ, newSlope, 1); - res->Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 32, -32, 3, 1); + res.Cost += SmoothLandRowByCorner(isExecuting, { validRange.GetLeft(), validRange.GetTop() }, z, 32, -32, 3, 1); break; } default: log_error("Invalid map selection %u", _selectionType); - return MakeResult(GameActions::Status::InvalidParameters, std::get(res->ErrorTitle), STR_NONE); + return GameActions::Result( + GameActions::Status::InvalidParameters, std::get(res.ErrorTitle), STR_NONE); } // switch selectionType // Raise / lower the land tool selection area - GameActions::Result::Ptr result; + GameActions::Result result; if (raiseLand) { auto raiseLandAction = LandRaiseAction({ _coords.x, _coords.y }, validRange, selectionType); @@ -625,7 +626,7 @@ GameActions::Result::Ptr LandSmoothAction::SmoothLand(bool isExecuting) const lowerLandAction.SetFlags(GetFlags()); result = isExecuting ? GameActions::ExecuteNested(&lowerLandAction) : GameActions::QueryNested(&lowerLandAction); } - if (result->Error != GameActions::Status::Ok) + if (result.Error != GameActions::Status::Ok) { return result; } @@ -634,6 +635,6 @@ GameActions::Result::Ptr LandSmoothAction::SmoothLand(bool isExecuting) const { OpenRCT2::Audio::Play3D(OpenRCT2::Audio::SoundId::PlaceItem, { _coords.x, _coords.y, centreZ }); } - res->Cost += result->Cost; + res.Cost += result.Cost; return res; } diff --git a/src/openrct2/actions/LandSmoothAction.h b/src/openrct2/actions/LandSmoothAction.h index dd7cb1fd70..406da35a5a 100644 --- a/src/openrct2/actions/LandSmoothAction.h +++ b/src/openrct2/actions/LandSmoothAction.h @@ -31,11 +31,11 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr SmoothLandTile( + GameActions::Result SmoothLandTile( int32_t direction, bool isExecuting, const CoordsXY& loc, SurfaceElement* surfaceElement) const; money32 SmoothLandRowByEdge( bool isExecuting, const CoordsXY& loc, int32_t expectedLandHeight1, int32_t expectedLandHeight2, int32_t stepX, @@ -43,5 +43,5 @@ private: money32 SmoothLandRowByCorner( bool isExecuting, const CoordsXY& loc, int32_t expectedLandHeight, int32_t stepX, int32_t stepY, int32_t direction, int32_t checkDirection) const; - GameActions::Result::Ptr SmoothLand(bool isExecuting) const; + GameActions::Result SmoothLand(bool isExecuting) const; }; diff --git a/src/openrct2/actions/LargeSceneryPlaceAction.cpp b/src/openrct2/actions/LargeSceneryPlaceAction.cpp index f4c7818f55..eec2979b57 100644 --- a/src/openrct2/actions/LargeSceneryPlaceAction.cpp +++ b/src/openrct2/actions/LargeSceneryPlaceAction.cpp @@ -47,15 +47,15 @@ void LargeSceneryPlaceAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_sceneryType) << DS_TAG(_primaryColour) << DS_TAG(_secondaryColour); } -GameActions::Result::Ptr LargeSceneryPlaceAction::Query() const +GameActions::Result LargeSceneryPlaceAction::Query() const { - auto res = MakeResult(); - res->ErrorTitle = STR_CANT_POSITION_THIS_HERE; - res->Expenditure = ExpenditureType::Landscaping; + auto res = GameActions::Result(); + res.ErrorTitle = STR_CANT_POSITION_THIS_HERE; + res.Expenditure = ExpenditureType::Landscaping; int16_t surfaceHeight = tile_element_height(_loc); - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = surfaceHeight; + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = surfaceHeight; auto resultData = LargeSceneryPlaceActionResult{}; @@ -66,20 +66,20 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Query() const log_error( "Invalid game command for scenery placement, primaryColour = %u, secondaryColour = %u", _primaryColour, _secondaryColour); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } if (_sceneryType >= MAX_LARGE_SCENERY_OBJECTS) { log_error("Invalid game command for scenery placement, sceneryType = %u", _sceneryType); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } auto* sceneryEntry = get_large_scenery_entry(_sceneryType); if (sceneryEntry == nullptr) { log_error("Invalid game command for scenery placement, sceneryType = %u", _sceneryType); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } uint32_t totalNumTiles = GetTotalNumTiles(sceneryEntry->tiles); @@ -90,14 +90,14 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Query() const maxHeight = _loc.z; } - res->Position.z = maxHeight; + res.Position.z = maxHeight; if (sceneryEntry->scrolling_mode != SCROLLING_MODE_NONE) { if (HasReachedBannerLimit()) { log_error("No free banners available"); - return MakeResult( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_TOO_MANY_BANNERS_IN_GAME); } } @@ -118,25 +118,26 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Query() const auto canBuild = MapCanConstructWithClearAt( { curTile, zLow, zHigh }, &map_place_scenery_clear_func, quarterTile, GetFlags(), CREATE_CROSSING_MODE_NONE, isTree); - if (canBuild->Error != GameActions::Status::Ok) + if (canBuild.Error != GameActions::Status::Ok) { - canBuild->ErrorTitle = STR_CANT_POSITION_THIS_HERE; + canBuild.ErrorTitle = STR_CANT_POSITION_THIS_HERE; return canBuild; } - supportsCost += canBuild->Cost; + supportsCost += canBuild.Cost; - const auto clearanceData = canBuild->GetData(); + const auto clearanceData = canBuild.GetData(); int32_t tempSceneryGroundFlags = clearanceData.GroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND); if (!gCheatsDisableClearanceChecks) { if ((clearanceData.GroundFlags & ELEMENT_IS_UNDERWATER) || (clearanceData.GroundFlags & ELEMENT_IS_UNDERGROUND)) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_CANT_BUILD_THIS_UNDERWATER); + return GameActions::Result( + GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_CANT_BUILD_THIS_UNDERWATER); } if (resultData.GroundFlags && !(resultData.GroundFlags & tempSceneryGroundFlags)) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_CANT_BUILD_PARTLY_ABOVE_AND_PARTLY_BELOW_GROUND); } @@ -146,40 +147,42 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Query() const if (!LocationValid(curTile) || map_is_edge(curTile)) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_OFF_EDGE_OF_MAP); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_OFF_EDGE_OF_MAP); } if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && !map_is_location_owned({ curTile, zLow }) && !gCheatsSandboxMode) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result( + GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_LAND_NOT_OWNED_BY_PARK); } } if (!CheckMapCapacity(sceneryEntry->tiles, totalNumTiles)) { log_error("No free map elements available"); - return MakeResult(GameActions::Status::NoFreeElements, STR_CANT_POSITION_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); + return GameActions::Result( + GameActions::Status::NoFreeElements, STR_CANT_POSITION_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); } // Force ride construction to recheck area _currentTrackSelectionFlags |= TRACK_SELECTION_FLAG_RECHECK; - res->Cost = (sceneryEntry->price * 10) + supportsCost; - res->SetData(std::move(resultData)); + res.Cost = (sceneryEntry->price * 10) + supportsCost; + res.SetData(std::move(resultData)); return res; } -GameActions::Result::Ptr LargeSceneryPlaceAction::Execute() const +GameActions::Result LargeSceneryPlaceAction::Execute() const { - auto res = MakeResult(); - res->ErrorTitle = STR_CANT_POSITION_THIS_HERE; - res->Expenditure = ExpenditureType::Landscaping; + auto res = GameActions::Result(); + res.ErrorTitle = STR_CANT_POSITION_THIS_HERE; + res.Expenditure = ExpenditureType::Landscaping; int16_t surfaceHeight = tile_element_height(_loc); - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = surfaceHeight; + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = surfaceHeight; auto resultData = LargeSceneryPlaceActionResult{}; @@ -189,13 +192,13 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Execute() const if (sceneryEntry == nullptr) { log_error("Invalid game command for scenery placement, sceneryType = %u", _sceneryType); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } if (sceneryEntry->tiles == nullptr) { log_error("Invalid large scenery object, sceneryType = %u", _sceneryType); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } int16_t maxHeight = GetMaxSurfaceHeight(sceneryEntry->tiles); @@ -205,7 +208,7 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Execute() const maxHeight = _loc.z; } - res->Position.z = maxHeight; + res.Position.z = maxHeight; // Allocate banner Banner* banner = nullptr; @@ -215,7 +218,7 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Execute() const if (banner == nullptr) { log_error("No free banners available"); - return MakeResult( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_TOO_MANY_BANNERS_IN_GAME); } @@ -252,19 +255,19 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Execute() const auto canBuild = MapCanConstructWithClearAt( { curTile, zLow, zHigh }, &map_place_scenery_clear_func, quarterTile, GetFlags(), CREATE_CROSSING_MODE_NONE, isTree); - if (canBuild->Error != GameActions::Status::Ok) + if (canBuild.Error != GameActions::Status::Ok) { if (banner != nullptr) { DeleteBanner(banner->id); } - canBuild->ErrorTitle = STR_CANT_POSITION_THIS_HERE; + canBuild.ErrorTitle = STR_CANT_POSITION_THIS_HERE; return canBuild; } - supportsCost += canBuild->Cost; + supportsCost += canBuild.Cost; - const auto clearanceData = canBuild->GetData(); + const auto clearanceData = canBuild.GetData(); resultData.GroundFlags = clearanceData.GroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND); if (!(GetFlags() & GAME_COMMAND_FLAG_GHOST)) @@ -299,8 +302,8 @@ GameActions::Result::Ptr LargeSceneryPlaceAction::Execute() const // Force ride construction to recheck area _currentTrackSelectionFlags |= TRACK_SELECTION_FLAG_RECHECK; - res->Cost = (sceneryEntry->price * 10) + supportsCost; - res->SetData(std::move(resultData)); + res.Cost = (sceneryEntry->price * 10) + supportsCost; + res.SetData(std::move(resultData)); return res; } diff --git a/src/openrct2/actions/LargeSceneryPlaceAction.h b/src/openrct2/actions/LargeSceneryPlaceAction.h index 8de7f56a36..07f9d38330 100644 --- a/src/openrct2/actions/LargeSceneryPlaceAction.h +++ b/src/openrct2/actions/LargeSceneryPlaceAction.h @@ -39,8 +39,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: int16_t GetTotalNumTiles(rct_large_scenery_tile* tiles) const; diff --git a/src/openrct2/actions/LargeSceneryRemoveAction.cpp b/src/openrct2/actions/LargeSceneryRemoveAction.cpp index 4cc356603b..c5c9a453ff 100644 --- a/src/openrct2/actions/LargeSceneryRemoveAction.cpp +++ b/src/openrct2/actions/LargeSceneryRemoveAction.cpp @@ -48,30 +48,31 @@ void LargeSceneryRemoveAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_tileIndex); } -GameActions::Result::Ptr LargeSceneryRemoveAction::Query() const +GameActions::Result LargeSceneryRemoveAction::Query() const { - GameActions::Result::Ptr res = std::make_unique(); + auto res = GameActions::Result(); const uint32_t flags = GetFlags(); int32_t z = tile_element_height(_loc); - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = z; - res->Expenditure = ExpenditureType::Landscaping; - res->Cost = 0; + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = z; + res.Expenditure = ExpenditureType::Landscaping; + res.Cost = 0; TileElement* tileElement = FindLargeSceneryElement(_loc, _tileIndex); if (tileElement == nullptr) { log_warning("Invalid game command for scenery removal, x = %d, y = %d", _loc.x, _loc.y); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); } auto* sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); // If we have a bugged scenery entry, do not touch the tile element. if (sceneryEntry == nullptr) - return MakeResult(GameActions::Status::Unknown, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_REMOVE_THIS, STR_NONE); auto rotatedOffsets = CoordsXYZ{ CoordsXY{ sceneryEntry->tiles[_tileIndex].x_offset, sceneryEntry->tiles[_tileIndex].y_offset }.Rotate(_loc.direction), @@ -94,13 +95,13 @@ GameActions::Result::Ptr LargeSceneryRemoveAction::Query() const { if (!map_is_location_owned({ currentTile.x, currentTile.y, currentTile.z })) { - return MakeResult(GameActions::Status::NoClearance, STR_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NoClearance, STR_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); } } if (!LocationValid(currentTile)) { - return MakeResult(GameActions::Status::NoClearance, STR_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NoClearance, STR_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); } // Prevent duplicate costs when using the clear scenery tool that overlaps multiple large // scenery tile elements. @@ -115,33 +116,34 @@ GameActions::Result::Ptr LargeSceneryRemoveAction::Query() const } if (calculate_cost) - res->Cost = sceneryEntry->removal_price * 10; + res.Cost = sceneryEntry->removal_price * 10; return res; } -GameActions::Result::Ptr LargeSceneryRemoveAction::Execute() const +GameActions::Result LargeSceneryRemoveAction::Execute() const { - GameActions::Result::Ptr res = std::make_unique(); + auto res = GameActions::Result(); int32_t z = tile_element_height(_loc); - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = z; - res->Expenditure = ExpenditureType::Landscaping; - res->Cost = 0; + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = z; + res.Expenditure = ExpenditureType::Landscaping; + res.Cost = 0; TileElement* tileElement = FindLargeSceneryElement(_loc, _tileIndex); if (tileElement == nullptr) { log_warning("Invalid game command for scenery removal, x = %d, y = %d", _loc.x, _loc.y); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); } auto* sceneryEntry = tileElement->AsLargeScenery()->GetEntry(); // If we have a bugged scenery entry, do not touch the tile element. if (sceneryEntry == nullptr) - return MakeResult(GameActions::Status::Unknown, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_REMOVE_THIS, STR_NONE); tileElement->RemoveBannerEntry(); @@ -165,7 +167,7 @@ GameActions::Result::Ptr LargeSceneryRemoveAction::Execute() const { if (!map_is_location_owned({ currentTile.x, currentTile.y, currentTile.z })) { - return MakeResult(GameActions::Status::NoClearance, STR_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NoClearance, STR_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); } } @@ -181,7 +183,7 @@ GameActions::Result::Ptr LargeSceneryRemoveAction::Execute() const } } - res->Cost = sceneryEntry->removal_price * 10; + res.Cost = sceneryEntry->removal_price * 10; return res; } diff --git a/src/openrct2/actions/LargeSceneryRemoveAction.h b/src/openrct2/actions/LargeSceneryRemoveAction.h index 550e628789..593cf2d94f 100644 --- a/src/openrct2/actions/LargeSceneryRemoveAction.h +++ b/src/openrct2/actions/LargeSceneryRemoveAction.h @@ -26,8 +26,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: TileElement* FindLargeSceneryElement(const CoordsXYZ& pos, int32_t sequenceIndex) const; diff --git a/src/openrct2/actions/LargeScenerySetColourAction.cpp b/src/openrct2/actions/LargeScenerySetColourAction.cpp index 7c5d82f0ae..0848051f1d 100644 --- a/src/openrct2/actions/LargeScenerySetColourAction.cpp +++ b/src/openrct2/actions/LargeScenerySetColourAction.cpp @@ -34,41 +34,41 @@ void LargeScenerySetColourAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_tileIndex) << DS_TAG(_primaryColour) << DS_TAG(_secondaryColour); } -GameActions::Result::Ptr LargeScenerySetColourAction::Query() const +GameActions::Result LargeScenerySetColourAction::Query() const { return QueryExecute(false); } -GameActions::Result::Ptr LargeScenerySetColourAction::Execute() const +GameActions::Result LargeScenerySetColourAction::Execute() const { return QueryExecute(true); } -GameActions::Result::Ptr LargeScenerySetColourAction::QueryExecute(bool isExecuting) const +GameActions::Result LargeScenerySetColourAction::QueryExecute(bool isExecuting) const { - auto res = MakeResult(); - res->Expenditure = ExpenditureType::Landscaping; - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = tile_element_height(_loc); - res->ErrorTitle = STR_CANT_REPAINT_THIS; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::Landscaping; + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = tile_element_height(_loc); + res.ErrorTitle = STR_CANT_REPAINT_THIS; if (_loc.x < 0 || _loc.y < 0 || _loc.x > GetMapSizeMaxXY() || _loc.y > GetMapSizeMaxXY()) { log_error("Invalid x / y coordinates: x = %d, y = %d", _loc.x, _loc.y); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } if (_primaryColour > 31) { log_error("Invalid primary colour: colour = %u", _primaryColour); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } if (_secondaryColour > 31) { log_error("Invalid primary colour: colour = %u", _secondaryColour); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } auto largeElement = map_get_large_scenery_segment(_loc, _tileIndex); @@ -78,7 +78,7 @@ GameActions::Result::Ptr LargeScenerySetColourAction::QueryExecute(bool isExecut log_error( "Could not find large scenery at: x = %d, y = %d, z = %d, direction = %d, tileIndex = %u", _loc.x, _loc.y, _loc.z, _loc.direction, _tileIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } if ((GetFlags() & GAME_COMMAND_FLAG_GHOST) && !(largeElement->IsGhost())) @@ -91,7 +91,7 @@ GameActions::Result::Ptr LargeScenerySetColourAction::QueryExecute(bool isExecut if (sceneryEntry == nullptr) { log_error("Could not find scenery object. type = %u", largeElement->GetEntryIndex()); - return MakeResult(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); } // Work out the base tile coordinates (Tile with index 0) auto rotatedBaseCoordsOffset = CoordsXYZ{ @@ -112,13 +112,13 @@ GameActions::Result::Ptr LargeScenerySetColourAction::QueryExecute(bool isExecut { if (!map_is_location_owned(currentTile)) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_REPAINT_THIS, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_CANT_REPAINT_THIS, STR_LAND_NOT_OWNED_BY_PARK); } } if (!LocationValid(currentTile)) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_REPAINT_THIS, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_CANT_REPAINT_THIS, STR_LAND_NOT_OWNED_BY_PARK); } auto tileElement = map_get_large_scenery_segment({ currentTile.x, currentTile.y, _loc.z, _loc.direction }, i); @@ -128,7 +128,7 @@ GameActions::Result::Ptr LargeScenerySetColourAction::QueryExecute(bool isExecut log_error( "Large scenery element not found at: x = %d, y = %d, z = %d, direction = %d", _loc.x, _loc.y, _loc.z, _loc.direction); - return MakeResult(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); } if (isExecuting) { diff --git a/src/openrct2/actions/LargeScenerySetColourAction.h b/src/openrct2/actions/LargeScenerySetColourAction.h index bedd48a396..d8525706d5 100644 --- a/src/openrct2/actions/LargeScenerySetColourAction.h +++ b/src/openrct2/actions/LargeScenerySetColourAction.h @@ -26,9 +26,9 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr QueryExecute(bool isExecuting) const; + GameActions::Result QueryExecute(bool isExecuting) const; }; diff --git a/src/openrct2/actions/LoadOrQuitAction.cpp b/src/openrct2/actions/LoadOrQuitAction.cpp index 76933e5b5f..82411494d1 100644 --- a/src/openrct2/actions/LoadOrQuitAction.cpp +++ b/src/openrct2/actions/LoadOrQuitAction.cpp @@ -30,12 +30,12 @@ void LoadOrQuitAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_mode) << DS_TAG(_savePromptMode); } -GameActions::Result::Ptr LoadOrQuitAction::Query() const +GameActions::Result LoadOrQuitAction::Query() const { - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr LoadOrQuitAction::Execute() const +GameActions::Result LoadOrQuitAction::Execute() const { auto mode = static_cast(_mode); switch (mode) @@ -51,5 +51,5 @@ GameActions::Result::Ptr LoadOrQuitAction::Execute() const game_load_or_quit_no_save_prompt(); break; } - return std::make_unique(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/LoadOrQuitAction.h b/src/openrct2/actions/LoadOrQuitAction.h index 452dd048a1..46bf364ccc 100644 --- a/src/openrct2/actions/LoadOrQuitAction.h +++ b/src/openrct2/actions/LoadOrQuitAction.h @@ -30,6 +30,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/MazePlaceTrackAction.cpp b/src/openrct2/actions/MazePlaceTrackAction.cpp index 2515746381..0c596a1519 100644 --- a/src/openrct2/actions/MazePlaceTrackAction.cpp +++ b/src/openrct2/actions/MazePlaceTrackAction.cpp @@ -35,38 +35,38 @@ void MazePlaceTrackAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_rideIndex) << DS_TAG(_mazeEntry); } -GameActions::Result::Ptr MazePlaceTrackAction::Query() const +GameActions::Result MazePlaceTrackAction::Query() const { - auto res = std::make_unique(); + auto res = GameActions::Result(); - res->Position = _loc + CoordsXYZ{ 8, 8, 0 }; - res->Expenditure = ExpenditureType::RideConstruction; - res->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + res.Position = _loc + CoordsXYZ{ 8, 8, 0 }; + res.Expenditure = ExpenditureType::RideConstruction; + res.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; if ((_loc.z & 0xF) != 0) { - res->Error = GameActions::Status::Unknown; - res->ErrorMessage = STR_CONSTRUCTION_ERR_UNKNOWN; + res.Error = GameActions::Status::Unknown; + res.ErrorMessage = STR_CONSTRUCTION_ERR_UNKNOWN; return res; } if (!LocationValid(_loc) || (!map_is_location_owned(_loc) && !gCheatsSandboxMode)) { - res->Error = GameActions::Status::NotOwned; - res->ErrorMessage = STR_LAND_NOT_OWNED_BY_PARK; + res.Error = GameActions::Status::NotOwned; + res.ErrorMessage = STR_LAND_NOT_OWNED_BY_PARK; return res; } if (!MapCheckCapacityAndReorganise(_loc)) { - res->Error = GameActions::Status::NoFreeElements; - res->ErrorMessage = STR_TILE_ELEMENT_LIMIT_REACHED; + res.Error = GameActions::Status::NoFreeElements; + res.ErrorMessage = STR_TILE_ELEMENT_LIMIT_REACHED; return res; } auto surfaceElement = map_get_surface_element_at(_loc); if (surfaceElement == nullptr) { - res->Error = GameActions::Status::Unknown; - res->ErrorMessage = STR_INVALID_SELECTION_OF_OBJECTS; + res.Error = GameActions::Status::Unknown; + res.ErrorMessage = STR_INVALID_SELECTION_OF_OBJECTS; return res; } @@ -80,63 +80,63 @@ GameActions::Result::Ptr MazePlaceTrackAction::Query() const if (heightDifference > GetRideTypeDescriptor(RIDE_TYPE_MAZE).Heights.MaxHeight) { - res->Error = GameActions::Status::TooHigh; - res->ErrorMessage = STR_TOO_HIGH_FOR_SUPPORTS; + res.Error = GameActions::Status::TooHigh; + res.ErrorMessage = STR_TOO_HIGH_FOR_SUPPORTS; return res; } } auto canBuild = MapCanConstructWithClearAt( { _loc.ToTileStart(), baseHeight, clearanceHeight }, &map_place_non_scenery_clear_func, { 0b1111, 0 }, GetFlags()); - if (canBuild->Error != GameActions::Status::Ok) + if (canBuild.Error != GameActions::Status::Ok) { - canBuild->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + canBuild.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; return canBuild; } - const auto clearanceData = canBuild->GetData(); + const auto clearanceData = canBuild.GetData(); if (clearanceData.GroundFlags & ELEMENT_IS_UNDERWATER) { - res->Error = GameActions::Status::NoClearance; - res->ErrorMessage = STR_RIDE_CANT_BUILD_THIS_UNDERWATER; + res.Error = GameActions::Status::NoClearance; + res.ErrorMessage = STR_RIDE_CANT_BUILD_THIS_UNDERWATER; return res; } if (clearanceData.GroundFlags & ELEMENT_IS_UNDERGROUND) { - res->Error = GameActions::Status::NoClearance; - res->ErrorMessage = STR_CAN_ONLY_BUILD_THIS_ABOVE_GROUND; + res.Error = GameActions::Status::NoClearance; + res.ErrorMessage = STR_CAN_ONLY_BUILD_THIS_ABOVE_GROUND; return res; } auto ride = get_ride(_rideIndex); if (ride == nullptr || ride->type == RIDE_TYPE_NULL) { - res->Error = GameActions::Status::InvalidParameters; - res->ErrorMessage = STR_INVALID_SELECTION_OF_OBJECTS; + res.Error = GameActions::Status::InvalidParameters; + res.ErrorMessage = STR_INVALID_SELECTION_OF_OBJECTS; return res; } const auto& ted = GetTrackElementDescriptor(TrackElemType::Maze); money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * ted.Price) >> 16)); - res->Cost = canBuild->Cost + price / 2 * 10; + res.Cost = canBuild.Cost + price / 2 * 10; return res; } -GameActions::Result::Ptr MazePlaceTrackAction::Execute() const +GameActions::Result MazePlaceTrackAction::Execute() const { - auto res = std::make_unique(); + auto res = GameActions::Result(); - res->Position = _loc + CoordsXYZ{ 8, 8, 0 }; - res->Expenditure = ExpenditureType::RideConstruction; - res->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + res.Position = _loc + CoordsXYZ{ 8, 8, 0 }; + res.Expenditure = ExpenditureType::RideConstruction; + res.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; auto ride = get_ride(_rideIndex); if (ride == nullptr) { - res->Error = GameActions::Status::InvalidParameters; - res->ErrorMessage = STR_NONE; + res.Error = GameActions::Status::InvalidParameters; + res.ErrorMessage = STR_NONE; return res; } @@ -153,15 +153,15 @@ GameActions::Result::Ptr MazePlaceTrackAction::Execute() const auto canBuild = MapCanConstructWithClearAt( { _loc.ToTileStart(), baseHeight, clearanceHeight }, &map_place_non_scenery_clear_func, { 0b1111, 0 }, GetFlags() | GAME_COMMAND_FLAG_APPLY); - if (canBuild->Error != GameActions::Status::Ok) + if (canBuild.Error != GameActions::Status::Ok) { - canBuild->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + canBuild.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; return canBuild; } const auto& ted = GetTrackElementDescriptor(TrackElemType::Maze); money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * ted.Price) >> 16)); - res->Cost = canBuild->Cost + price / 2 * 10; + res.Cost = canBuild.Cost + price / 2 * 10; auto startLoc = _loc.ToTileStart(); diff --git a/src/openrct2/actions/MazePlaceTrackAction.h b/src/openrct2/actions/MazePlaceTrackAction.h index 2f49e0a368..5ef4f0e0d3 100644 --- a/src/openrct2/actions/MazePlaceTrackAction.h +++ b/src/openrct2/actions/MazePlaceTrackAction.h @@ -23,6 +23,6 @@ public: void AcceptParameters(GameActionParameterVisitor& visitor) override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/MazeSetTrackAction.cpp b/src/openrct2/actions/MazeSetTrackAction.cpp index c9376787e0..15e6d444d6 100644 --- a/src/openrct2/actions/MazeSetTrackAction.cpp +++ b/src/openrct2/actions/MazeSetTrackAction.cpp @@ -47,38 +47,38 @@ void MazeSetTrackAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_loc.direction) << DS_TAG(_initialPlacement) << DS_TAG(_rideIndex) << DS_TAG(_mode); } -GameActions::Result::Ptr MazeSetTrackAction::Query() const +GameActions::Result MazeSetTrackAction::Query() const { - auto res = std::make_unique(); + auto res = GameActions::Result(); - res->Position = _loc + CoordsXYZ{ 8, 8, 0 }; - res->Expenditure = ExpenditureType::RideConstruction; - res->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + res.Position = _loc + CoordsXYZ{ 8, 8, 0 }; + res.Expenditure = ExpenditureType::RideConstruction; + res.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; if ((_loc.z & 0xF) != 0 && _mode == GC_SET_MAZE_TRACK_BUILD) { - res->Error = GameActions::Status::Unknown; - res->ErrorMessage = STR_CONSTRUCTION_ERR_UNKNOWN; + res.Error = GameActions::Status::Unknown; + res.ErrorMessage = STR_CONSTRUCTION_ERR_UNKNOWN; return res; } if (!LocationValid(_loc) || (!map_is_location_owned(_loc) && !gCheatsSandboxMode)) { - res->Error = GameActions::Status::NotOwned; - res->ErrorMessage = STR_LAND_NOT_OWNED_BY_PARK; + res.Error = GameActions::Status::NotOwned; + res.ErrorMessage = STR_LAND_NOT_OWNED_BY_PARK; return res; } if (!MapCheckCapacityAndReorganise(_loc)) { - res->Error = GameActions::Status::NoFreeElements; - res->ErrorMessage = STR_TILE_ELEMENT_LIMIT_REACHED; + res.Error = GameActions::Status::NoFreeElements; + res.ErrorMessage = STR_TILE_ELEMENT_LIMIT_REACHED; return res; } auto surfaceElement = map_get_surface_element_at(_loc); if (surfaceElement == nullptr) { - res->Error = GameActions::Status::Unknown; - res->ErrorMessage = STR_INVALID_SELECTION_OF_OBJECTS; + res.Error = GameActions::Status::Unknown; + res.ErrorMessage = STR_INVALID_SELECTION_OF_OBJECTS; return res; } @@ -92,8 +92,8 @@ GameActions::Result::Ptr MazeSetTrackAction::Query() const if (heightDifference > GetRideTypeDescriptor(RIDE_TYPE_MAZE).Heights.MaxHeight) { - res->Error = GameActions::Status::TooHigh; - res->ErrorMessage = STR_TOO_HIGH_FOR_SUPPORTS; + res.Error = GameActions::Status::TooHigh; + res.ErrorMessage = STR_TOO_HIGH_FOR_SUPPORTS; return res; } } @@ -103,63 +103,63 @@ GameActions::Result::Ptr MazeSetTrackAction::Query() const { if (_mode != GC_SET_MAZE_TRACK_BUILD) { - res->Error = GameActions::Status::Unknown; - res->ErrorMessage = STR_INVALID_SELECTION_OF_OBJECTS; + res.Error = GameActions::Status::Unknown; + res.ErrorMessage = STR_INVALID_SELECTION_OF_OBJECTS; return res; } auto constructResult = MapCanConstructAt({ _loc.ToTileStart(), baseHeight, clearanceHeight }, { 0b1111, 0 }); - if (constructResult->Error != GameActions::Status::Ok) + if (constructResult.Error != GameActions::Status::Ok) { - constructResult->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + constructResult.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; return constructResult; } - const auto clearanceData = constructResult->GetData(); + const auto clearanceData = constructResult.GetData(); if (clearanceData.GroundFlags & ELEMENT_IS_UNDERWATER) { - res->Error = GameActions::Status::NoClearance; - res->ErrorMessage = STR_RIDE_CANT_BUILD_THIS_UNDERWATER; + res.Error = GameActions::Status::NoClearance; + res.ErrorMessage = STR_RIDE_CANT_BUILD_THIS_UNDERWATER; return res; } if (clearanceData.GroundFlags & ELEMENT_IS_UNDERGROUND) { - res->Error = GameActions::Status::NoClearance; - res->ErrorMessage = STR_CAN_ONLY_BUILD_THIS_ABOVE_GROUND; + res.Error = GameActions::Status::NoClearance; + res.ErrorMessage = STR_CAN_ONLY_BUILD_THIS_ABOVE_GROUND; return res; } auto ride = get_ride(_rideIndex); if (ride == nullptr || ride->type == RIDE_CRASH_TYPE_NONE) { - res->Error = GameActions::Status::NoClearance; - res->ErrorMessage = STR_INVALID_SELECTION_OF_OBJECTS; + res.Error = GameActions::Status::NoClearance; + res.ErrorMessage = STR_INVALID_SELECTION_OF_OBJECTS; return res; } const auto& ted = GetTrackElementDescriptor(TrackElemType::Maze); money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * ted.Price) >> 16)); - res->Cost = price / 2 * 10; + res.Cost = price / 2 * 10; return res; } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr MazeSetTrackAction::Execute() const +GameActions::Result MazeSetTrackAction::Execute() const { - auto res = std::make_unique(); + auto res = GameActions::Result(); - res->Position = _loc + CoordsXYZ{ 8, 8, 0 }; - res->Expenditure = ExpenditureType::RideConstruction; - res->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + res.Position = _loc + CoordsXYZ{ 8, 8, 0 }; + res.Expenditure = ExpenditureType::RideConstruction; + res.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; auto ride = get_ride(_rideIndex); if (ride == nullptr) { - res->Error = GameActions::Status::InvalidParameters; - res->ErrorMessage = STR_NONE; + res.Error = GameActions::Status::InvalidParameters; + res.ErrorMessage = STR_NONE; return res; } @@ -175,7 +175,7 @@ GameActions::Result::Ptr MazeSetTrackAction::Execute() const { const auto& ted = GetTrackElementDescriptor(TrackElemType::Maze); money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * ted.Price) >> 16)); - res->Cost = price / 2 * 10; + res.Cost = price / 2 * 10; auto startLoc = _loc.ToTileStart(); @@ -254,8 +254,8 @@ GameActions::Result::Ptr MazeSetTrackAction::Execute() const if (tileElement == nullptr) { log_error("No surface found"); - res->Error = GameActions::Status::Unknown; - res->ErrorMessage = STR_NONE; + res.Error = GameActions::Status::Unknown; + res.ErrorMessage = STR_NONE; return res; } diff --git a/src/openrct2/actions/MazeSetTrackAction.h b/src/openrct2/actions/MazeSetTrackAction.h index 4db9438434..912191f2bc 100644 --- a/src/openrct2/actions/MazeSetTrackAction.h +++ b/src/openrct2/actions/MazeSetTrackAction.h @@ -51,8 +51,8 @@ public: void AcceptParameters(GameActionParameterVisitor& visitor) override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: uint8_t MazeGetSegmentBit(uint16_t x, uint16_t y) const; diff --git a/src/openrct2/actions/NetworkModifyGroupAction.cpp b/src/openrct2/actions/NetworkModifyGroupAction.cpp index 6f82e1ad6b..a375f156bb 100644 --- a/src/openrct2/actions/NetworkModifyGroupAction.cpp +++ b/src/openrct2/actions/NetworkModifyGroupAction.cpp @@ -34,12 +34,12 @@ void NetworkModifyGroupAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_type) << DS_TAG(_groupId) << DS_TAG(_name) << DS_TAG(_permissionIndex) << DS_TAG(_permissionState); } -GameActions::Result::Ptr NetworkModifyGroupAction::Query() const +GameActions::Result NetworkModifyGroupAction::Query() const { return network_modify_groups(GetPlayer(), _type, _groupId, _name, _permissionIndex, _permissionState, false); } -GameActions::Result::Ptr NetworkModifyGroupAction::Execute() const +GameActions::Result NetworkModifyGroupAction::Execute() const { return network_modify_groups(GetPlayer(), _type, _groupId, _name, _permissionIndex, _permissionState, true); } diff --git a/src/openrct2/actions/NetworkModifyGroupAction.h b/src/openrct2/actions/NetworkModifyGroupAction.h index 3b0acdccc6..91dfd94545 100644 --- a/src/openrct2/actions/NetworkModifyGroupAction.h +++ b/src/openrct2/actions/NetworkModifyGroupAction.h @@ -47,6 +47,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/ParkEntranceRemoveAction.cpp b/src/openrct2/actions/ParkEntranceRemoveAction.cpp index 912d0be2cc..e210963ca1 100644 --- a/src/openrct2/actions/ParkEntranceRemoveAction.cpp +++ b/src/openrct2/actions/ParkEntranceRemoveAction.cpp @@ -31,39 +31,39 @@ void ParkEntranceRemoveAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc); } -GameActions::Result::Ptr ParkEntranceRemoveAction::Query() const +GameActions::Result ParkEntranceRemoveAction::Query() const { if (!(gScreenFlags & SCREEN_FLAGS_EDITOR) && !gCheatsSandboxMode) { - return MakeResult(GameActions::Status::NotInEditorMode, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::NotInEditorMode, STR_CANT_REMOVE_THIS, STR_NONE); } - auto res = MakeResult(); - res->Expenditure = ExpenditureType::LandPurchase; - res->Position = _loc; - res->ErrorTitle = STR_CANT_REMOVE_THIS; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::LandPurchase; + res.Position = _loc; + res.ErrorTitle = STR_CANT_REMOVE_THIS; auto entranceIndex = park_entrance_get_index(_loc); if (!LocationValid(_loc) || entranceIndex == -1) { log_error("Could not find entrance at x = %d, y = %d, z = %d", _loc.x, _loc.y, _loc.z); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); } return res; } -GameActions::Result::Ptr ParkEntranceRemoveAction::Execute() const +GameActions::Result ParkEntranceRemoveAction::Execute() const { - auto res = MakeResult(); - res->Expenditure = ExpenditureType::LandPurchase; - res->Position = _loc; - res->ErrorTitle = STR_CANT_REMOVE_THIS; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::LandPurchase; + res.Position = _loc; + res.ErrorTitle = STR_CANT_REMOVE_THIS; auto entranceIndex = park_entrance_get_index(_loc); if (entranceIndex == -1) { log_error("Could not find entrance at x = %d, y = %d, z = %d", _loc.x, _loc.y, _loc.z); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_NONE); } auto direction = (gParkEntrances[entranceIndex].direction - 1) & 3; diff --git a/src/openrct2/actions/ParkEntranceRemoveAction.h b/src/openrct2/actions/ParkEntranceRemoveAction.h index 9fb1208293..82fe5e0a1d 100644 --- a/src/openrct2/actions/ParkEntranceRemoveAction.h +++ b/src/openrct2/actions/ParkEntranceRemoveAction.h @@ -23,8 +23,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: void ParkEntranceRemoveSegment(const CoordsXYZ& loc) const; diff --git a/src/openrct2/actions/ParkMarketingAction.cpp b/src/openrct2/actions/ParkMarketingAction.cpp index 2b5ce2dda8..69e58b259d 100644 --- a/src/openrct2/actions/ParkMarketingAction.cpp +++ b/src/openrct2/actions/ParkMarketingAction.cpp @@ -46,15 +46,15 @@ void ParkMarketingAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_type) << DS_TAG(_item) << DS_TAG(_numWeeks); } -GameActions::Result::Ptr ParkMarketingAction::Query() const +GameActions::Result ParkMarketingAction::Query() const { if (static_cast(_type) >= std::size(AdvertisingCampaignPricePerWeek) || _numWeeks >= 256) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_START_MARKETING_CAMPAIGN, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_START_MARKETING_CAMPAIGN, STR_NONE); } if (gParkFlags & PARK_FLAGS_FORBID_MARKETING_CAMPAIGN) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_CANT_START_MARKETING_CAMPAIGN, STR_MARKETING_CAMPAIGNS_FORBIDDEN_BY_LOCAL_AUTHORITY); } @@ -62,7 +62,7 @@ GameActions::Result::Ptr ParkMarketingAction::Query() const return CreateResult(); } -GameActions::Result::Ptr ParkMarketingAction::Execute() const +GameActions::Result ParkMarketingAction::Execute() const { MarketingCampaign campaign{}; campaign.Type = _type; @@ -85,12 +85,12 @@ GameActions::Result::Ptr ParkMarketingAction::Execute() const return CreateResult(); } -GameActions::Result::Ptr ParkMarketingAction::CreateResult() const +GameActions::Result ParkMarketingAction::CreateResult() const { - auto result = MakeResult(); - result->ErrorTitle = STR_CANT_START_MARKETING_CAMPAIGN; - result->Expenditure = ExpenditureType::Marketing; - result->Cost = CalculatePrice(); + auto result = GameActions::Result(); + result.ErrorTitle = STR_CANT_START_MARKETING_CAMPAIGN; + result.Expenditure = ExpenditureType::Marketing; + result.Cost = CalculatePrice(); return result; } diff --git a/src/openrct2/actions/ParkMarketingAction.h b/src/openrct2/actions/ParkMarketingAction.h index 68f016c9ee..189d847392 100644 --- a/src/openrct2/actions/ParkMarketingAction.h +++ b/src/openrct2/actions/ParkMarketingAction.h @@ -27,10 +27,10 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr CreateResult() const; + GameActions::Result CreateResult() const; money32 CalculatePrice() const; }; diff --git a/src/openrct2/actions/ParkSetDateAction.cpp b/src/openrct2/actions/ParkSetDateAction.cpp index 36aa12a413..3545f75ce3 100644 --- a/src/openrct2/actions/ParkSetDateAction.cpp +++ b/src/openrct2/actions/ParkSetDateAction.cpp @@ -42,18 +42,18 @@ void ParkSetDateAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_year) << DS_TAG(_month) << DS_TAG(_day); } -GameActions::Result::Ptr ParkSetDateAction::Query() const +GameActions::Result ParkSetDateAction::Query() const { if (_year <= 0 || _year > MAX_YEAR || _month <= 0 || _month > MONTH_COUNT || _day <= 0 || _day > 31) { - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - return MakeResult(); + return GameActions::Result(); } -GameActions::Result::Ptr ParkSetDateAction::Execute() const +GameActions::Result ParkSetDateAction::Execute() const { date_set(_year, _month, _day); - return MakeResult(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/ParkSetDateAction.h b/src/openrct2/actions/ParkSetDateAction.h index efe6bf1840..bbb8db6fa4 100644 --- a/src/openrct2/actions/ParkSetDateAction.h +++ b/src/openrct2/actions/ParkSetDateAction.h @@ -27,6 +27,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/ParkSetLoanAction.cpp b/src/openrct2/actions/ParkSetLoanAction.cpp index e40049f76b..27be2e8f1a 100644 --- a/src/openrct2/actions/ParkSetLoanAction.cpp +++ b/src/openrct2/actions/ParkSetLoanAction.cpp @@ -38,7 +38,7 @@ void ParkSetLoanAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_value); } -GameActions::Result::Ptr ParkSetLoanAction::Query() const +GameActions::Result ParkSetLoanAction::Query() const { auto currentLoan = gBankLoan; auto loanDifference = currentLoan - _value; @@ -46,7 +46,7 @@ GameActions::Result::Ptr ParkSetLoanAction::Query() const { if (_value > gMaxBankLoan) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_CANT_BORROW_ANY_MORE_MONEY, STR_BANK_REFUSES_TO_INCREASE_LOAN); } } @@ -54,18 +54,19 @@ GameActions::Result::Ptr ParkSetLoanAction::Query() const { if (loanDifference > gCash) { - return MakeResult(GameActions::Status::InsufficientFunds, STR_CANT_PAY_BACK_LOAN, STR_NOT_ENOUGH_CASH_AVAILABLE); + return GameActions::Result( + GameActions::Status::InsufficientFunds, STR_CANT_PAY_BACK_LOAN, STR_NOT_ENOUGH_CASH_AVAILABLE); } } - return MakeResult(); + return GameActions::Result(); } -GameActions::Result::Ptr ParkSetLoanAction::Execute() const +GameActions::Result ParkSetLoanAction::Execute() const { gCash -= (gBankLoan - _value); gBankLoan = _value; auto windowManager = OpenRCT2::GetContext()->GetUiContext()->GetWindowManager(); windowManager->BroadcastIntent(Intent(INTENT_ACTION_UPDATE_CASH)); - return MakeResult(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/ParkSetLoanAction.h b/src/openrct2/actions/ParkSetLoanAction.h index 09440b3aa6..6f91dca101 100644 --- a/src/openrct2/actions/ParkSetLoanAction.h +++ b/src/openrct2/actions/ParkSetLoanAction.h @@ -25,6 +25,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/ParkSetNameAction.cpp b/src/openrct2/actions/ParkSetNameAction.cpp index 760e11c86b..e0ec6e88b8 100644 --- a/src/openrct2/actions/ParkSetNameAction.cpp +++ b/src/openrct2/actions/ParkSetNameAction.cpp @@ -43,16 +43,16 @@ void ParkSetNameAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_name); } -GameActions::Result::Ptr ParkSetNameAction::Query() const +GameActions::Result ParkSetNameAction::Query() const { if (_name.empty()) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_RENAME_PARK, STR_INVALID_NAME_FOR_PARK); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_RENAME_PARK, STR_INVALID_NAME_FOR_PARK); } - return MakeResult(); + return GameActions::Result(); } -GameActions::Result::Ptr ParkSetNameAction::Execute() const +GameActions::Result ParkSetNameAction::Execute() const { // Do a no-op if new name is the same as the current name is the same auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark(); @@ -62,5 +62,5 @@ GameActions::Result::Ptr ParkSetNameAction::Execute() const scrolling_text_invalidate(); gfx_invalidate_screen(); } - return MakeResult(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/ParkSetNameAction.h b/src/openrct2/actions/ParkSetNameAction.h index 6e55625a8e..cdbf4897e0 100644 --- a/src/openrct2/actions/ParkSetNameAction.h +++ b/src/openrct2/actions/ParkSetNameAction.h @@ -25,6 +25,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/ParkSetParameterAction.cpp b/src/openrct2/actions/ParkSetParameterAction.cpp index 2e443b3751..d6cd6f7387 100644 --- a/src/openrct2/actions/ParkSetParameterAction.cpp +++ b/src/openrct2/actions/ParkSetParameterAction.cpp @@ -31,19 +31,19 @@ void ParkSetParameterAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_parameter) << DS_TAG(_value); } -GameActions::Result::Ptr ParkSetParameterAction::Query() const +GameActions::Result ParkSetParameterAction::Query() const { if (_parameter >= ParkParameter::Count) { - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - auto res = MakeResult(); - res->ErrorTitle = _ErrorTitles[EnumValue(_parameter)]; + auto res = GameActions::Result(); + res.ErrorTitle = _ErrorTitles[EnumValue(_parameter)]; return res; } -GameActions::Result::Ptr ParkSetParameterAction::Execute() const +GameActions::Result ParkSetParameterAction::Execute() const { switch (_parameter) { @@ -66,10 +66,10 @@ GameActions::Result::Ptr ParkSetParameterAction::Execute() const window_invalidate_by_class(WC_RIDE); break; default: - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - auto res = MakeResult(); - res->ErrorTitle = _ErrorTitles[EnumValue(_parameter)]; + auto res = GameActions::Result(); + res.ErrorTitle = _ErrorTitles[EnumValue(_parameter)]; return res; } diff --git a/src/openrct2/actions/ParkSetParameterAction.h b/src/openrct2/actions/ParkSetParameterAction.h index 11c5bf4db6..e0902a7241 100644 --- a/src/openrct2/actions/ParkSetParameterAction.h +++ b/src/openrct2/actions/ParkSetParameterAction.h @@ -39,6 +39,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/ParkSetResearchFundingAction.cpp b/src/openrct2/actions/ParkSetResearchFundingAction.cpp index 7483c89f07..98b4cbfb77 100644 --- a/src/openrct2/actions/ParkSetResearchFundingAction.cpp +++ b/src/openrct2/actions/ParkSetResearchFundingAction.cpp @@ -34,21 +34,21 @@ void ParkSetResearchFundingAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_priorities) << DS_TAG(_fundingAmount); } -GameActions::Result::Ptr ParkSetResearchFundingAction::Query() const +GameActions::Result ParkSetResearchFundingAction::Query() const { if (_fundingAmount >= RESEARCH_FUNDING_COUNT) { - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - return MakeResult(); + return GameActions::Result(); } -GameActions::Result::Ptr ParkSetResearchFundingAction::Execute() const +GameActions::Result ParkSetResearchFundingAction::Execute() const { gResearchPriorities = _priorities; gResearchFundingLevel = _fundingAmount; auto windowManager = OpenRCT2::GetContext()->GetUiContext()->GetWindowManager(); windowManager->BroadcastIntent(Intent(INTENT_ACTION_UPDATE_RESEARCH)); - return MakeResult(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/ParkSetResearchFundingAction.h b/src/openrct2/actions/ParkSetResearchFundingAction.h index e0674695e7..483f678f33 100644 --- a/src/openrct2/actions/ParkSetResearchFundingAction.h +++ b/src/openrct2/actions/ParkSetResearchFundingAction.h @@ -25,6 +25,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/PauseToggleAction.cpp b/src/openrct2/actions/PauseToggleAction.cpp index 479b5b204a..a9c5fa8426 100644 --- a/src/openrct2/actions/PauseToggleAction.cpp +++ b/src/openrct2/actions/PauseToggleAction.cpp @@ -14,13 +14,13 @@ uint16_t PauseToggleAction::GetActionFlags() const return GameAction::GetActionFlags() | GameActions::Flags::AllowWhilePaused; } -GameActions::Result::Ptr PauseToggleAction::Query() const +GameActions::Result PauseToggleAction::Query() const { - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr PauseToggleAction::Execute() const +GameActions::Result PauseToggleAction::Execute() const { pause_toggle(); - return std::make_unique(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/PauseToggleAction.h b/src/openrct2/actions/PauseToggleAction.h index e0b4053175..aaaedf80dc 100644 --- a/src/openrct2/actions/PauseToggleAction.h +++ b/src/openrct2/actions/PauseToggleAction.h @@ -20,7 +20,7 @@ public: uint16_t GetActionFlags() const override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; // clang-format on diff --git a/src/openrct2/actions/PeepPickupAction.cpp b/src/openrct2/actions/PeepPickupAction.cpp index 9c75fce9e5..84f1b25f91 100644 --- a/src/openrct2/actions/PeepPickupAction.cpp +++ b/src/openrct2/actions/PeepPickupAction.cpp @@ -35,36 +35,36 @@ void PeepPickupAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_type) << DS_TAG(_spriteId) << DS_TAG(_loc) << DS_TAG(_owner); } -GameActions::Result::Ptr PeepPickupAction::Query() const +GameActions::Result PeepPickupAction::Query() const { if (_spriteId >= MAX_ENTITIES || _spriteId == SPRITE_INDEX_NULL) { log_error("Failed to pick up peep for sprite %d", _spriteId); - return MakeResult(GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); } if (!_loc.IsNull() && !LocationValid(_loc)) { - return MakeResult(GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); } auto* const peep = TryGetEntity(_spriteId); if (peep == nullptr) { log_error("Failed to pick up peep for sprite %d", _spriteId); - return MakeResult(GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); } - auto res = MakeResult(); + auto res = GameActions::Result(); switch (_type) { case PeepPickupType::Pickup: { - res->Position = peep->GetLocation(); + res.Position = peep->GetLocation(); if (!peep->CanBePickedUp()) { - return MakeResult(GameActions::Status::Disallowed, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::Disallowed, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); } Peep* existing = network_get_pickup_peep(_owner); if (existing != nullptr) @@ -83,43 +83,43 @@ GameActions::Result::Ptr PeepPickupAction::Query() const } break; case PeepPickupType::Cancel: - res->Position = peep->GetLocation(); + res.Position = peep->GetLocation(); break; case PeepPickupType::Place: - res->Position = _loc; + res.Position = _loc; if (network_get_pickup_peep(_owner) != peep) { - return MakeResult(GameActions::Status::Unknown, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); } - if (auto res2 = peep->Place(TileCoordsXYZ(_loc), false); res2->Error != GameActions::Status::Ok) + if (auto res2 = peep->Place(TileCoordsXYZ(_loc), false); res2.Error != GameActions::Status::Ok) { return res2; } break; default: log_error("Invalid pickup type: %u", _type); - return MakeResult(GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); } return res; } -GameActions::Result::Ptr PeepPickupAction::Execute() const +GameActions::Result PeepPickupAction::Execute() const { Peep* const peep = TryGetEntity(_spriteId); if (peep == nullptr) { log_error("Failed to pick up peep for sprite %d", _spriteId); - return MakeResult(GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); } - auto res = MakeResult(); + auto res = GameActions::Result(); switch (_type) { case PeepPickupType::Pickup: { - res->Position = peep->GetLocation(); + res.Position = peep->GetLocation(); Peep* existing = network_get_pickup_peep(_owner); if (existing != nullptr) @@ -148,7 +148,7 @@ GameActions::Result::Ptr PeepPickupAction::Execute() const break; case PeepPickupType::Cancel: { - res->Position = peep->GetLocation(); + res.Position = peep->GetLocation(); Peep* const pickedUpPeep = network_get_pickup_peep(_owner); if (pickedUpPeep != nullptr) @@ -160,8 +160,8 @@ GameActions::Result::Ptr PeepPickupAction::Execute() const } break; case PeepPickupType::Place: - res->Position = _loc; - if (auto res2 = peep->Place(TileCoordsXYZ(_loc), true); res2->Error != GameActions::Status::Ok) + res.Position = _loc; + if (auto res2 = peep->Place(TileCoordsXYZ(_loc), true); res2.Error != GameActions::Status::Ok) { return res2; } @@ -169,7 +169,7 @@ GameActions::Result::Ptr PeepPickupAction::Execute() const break; default: log_error("Invalid pickup type: %u", _type); - return MakeResult(GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); } return res; } diff --git a/src/openrct2/actions/PeepPickupAction.h b/src/openrct2/actions/PeepPickupAction.h index 4e5df75c7e..3dc6dbfd16 100644 --- a/src/openrct2/actions/PeepPickupAction.h +++ b/src/openrct2/actions/PeepPickupAction.h @@ -34,8 +34,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: void CancelConcurrentPickups(Peep* pickedPeep) const; diff --git a/src/openrct2/actions/PlaceParkEntranceAction.cpp b/src/openrct2/actions/PlaceParkEntranceAction.cpp index 93f1eb82ef..9b1498355a 100644 --- a/src/openrct2/actions/PlaceParkEntranceAction.cpp +++ b/src/openrct2/actions/PlaceParkEntranceAction.cpp @@ -40,33 +40,33 @@ void PlaceParkEntranceAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_pathType); } -GameActions::Result::Ptr PlaceParkEntranceAction::Query() const +GameActions::Result PlaceParkEntranceAction::Query() const { if (!(gScreenFlags & SCREEN_FLAGS_EDITOR) && !gCheatsSandboxMode) { - return std::make_unique(GameActions::Status::NotInEditorMode, STR_CANT_BUILD_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::NotInEditorMode, STR_CANT_BUILD_THIS_HERE, STR_NONE); } - auto res = std::make_unique(); - res->Expenditure = ExpenditureType::LandPurchase; - res->Position = { _loc.x, _loc.y, _loc.z }; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::LandPurchase; + res.Position = { _loc.x, _loc.y, _loc.z }; if (!LocationValid(_loc) || _loc.x <= 32 || _loc.y <= 32 || _loc.x >= (GetMapSizeUnits() - 32) || _loc.y >= (GetMapSizeUnits() - 32)) { - return std::make_unique( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_TOO_CLOSE_TO_EDGE_OF_MAP); } if (!CheckMapCapacity(3)) { - return std::make_unique( + return GameActions::Result( GameActions::Status::NoFreeElements, STR_CANT_BUILD_THIS_HERE, STR_ERR_LANDSCAPE_DATA_AREA_FULL); } if (gParkEntrances.size() >= MAX_PARK_ENTRANCES) { - return std::make_unique( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_ERR_TOO_MANY_PARK_ENTRANCES); } @@ -85,9 +85,9 @@ GameActions::Result::Ptr PlaceParkEntranceAction::Query() const entranceLoc.y += CoordsDirectionDelta[(_loc.direction + 1) & 0x3].y * 2; } - if (auto res2 = MapCanConstructAt({ entranceLoc, zLow, zHigh }, { 0b1111, 0 }); res2->Error != GameActions::Status::Ok) + if (auto res2 = MapCanConstructAt({ entranceLoc, zLow, zHigh }, { 0b1111, 0 }); res2.Error != GameActions::Status::Ok) { - res2->ErrorTitle = STR_CANT_BUILD_THIS_HERE; + res2.ErrorTitle = STR_CANT_BUILD_THIS_HERE; return res2; } @@ -95,19 +95,18 @@ GameActions::Result::Ptr PlaceParkEntranceAction::Query() const EntranceElement* entranceElement = map_get_park_entrance_element_at(entranceLoc, false); if (entranceElement != nullptr) { - return std::make_unique( - GameActions::Status::ItemAlreadyPlaced, STR_CANT_BUILD_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::ItemAlreadyPlaced, STR_CANT_BUILD_THIS_HERE, STR_NONE); } } return res; } -GameActions::Result::Ptr PlaceParkEntranceAction::Execute() const +GameActions::Result PlaceParkEntranceAction::Execute() const { - auto res = std::make_unique(); - res->Expenditure = ExpenditureType::LandPurchase; - res->Position = CoordsXYZ{ _loc.x, _loc.y, _loc.z }; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::LandPurchase; + res.Position = CoordsXYZ{ _loc.x, _loc.y, _loc.z }; uint32_t flags = GetFlags(); diff --git a/src/openrct2/actions/PlaceParkEntranceAction.h b/src/openrct2/actions/PlaceParkEntranceAction.h index cc02a66c52..1b49af8965 100644 --- a/src/openrct2/actions/PlaceParkEntranceAction.h +++ b/src/openrct2/actions/PlaceParkEntranceAction.h @@ -24,8 +24,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: bool CheckMapCapacity(int16_t numTiles) const; diff --git a/src/openrct2/actions/PlacePeepSpawnAction.cpp b/src/openrct2/actions/PlacePeepSpawnAction.cpp index b4ce3a211f..4d4eb85701 100644 --- a/src/openrct2/actions/PlacePeepSpawnAction.cpp +++ b/src/openrct2/actions/PlacePeepSpawnAction.cpp @@ -35,22 +35,21 @@ void PlacePeepSpawnAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_location.x) << DS_TAG(_location.y) << DS_TAG(_location.z) << DS_TAG(_location.direction); } -GameActions::Result::Ptr PlacePeepSpawnAction::Query() const +GameActions::Result PlacePeepSpawnAction::Query() const { if (!(gScreenFlags & SCREEN_FLAGS_EDITOR) && !gCheatsSandboxMode) { - return std::make_unique( - GameActions::Status::NotInEditorMode, STR_ERR_CANT_PLACE_PEEP_SPAWN_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::NotInEditorMode, STR_ERR_CANT_PLACE_PEEP_SPAWN_HERE, STR_NONE); } - auto res = std::make_unique(); - res->Expenditure = ExpenditureType::LandPurchase; - res->Position = _location; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::LandPurchase; + res.Position = _location; if (!LocationValid(_location) || _location.x <= 16 || _location.y <= 16 || _location.x >= (GetMapSizeUnits() - 16) || _location.y >= (GetMapSizeUnits() - 16)) { - return std::make_unique( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PEEP_SPAWN_HERE, STR_OFF_EDGE_OF_MAP); } @@ -58,7 +57,7 @@ GameActions::Result::Ptr PlacePeepSpawnAction::Query() const auto pathElement = map_get_path_element_at(TileCoordsXYZ{ _location }); if (pathElement == nullptr) { - return std::make_unique( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PEEP_SPAWN_HERE, STR_CAN_ONLY_BE_BUILT_ACROSS_PATHS); } @@ -66,12 +65,11 @@ GameActions::Result::Ptr PlacePeepSpawnAction::Query() const auto surfaceMapElement = map_get_surface_element_at(_location); if (surfaceMapElement == nullptr) { - return std::make_unique( - GameActions::Status::Unknown, STR_ERR_CANT_PLACE_PEEP_SPAWN_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_ERR_CANT_PLACE_PEEP_SPAWN_HERE, STR_NONE); } if (surfaceMapElement->GetOwnership() != OWNERSHIP_UNOWNED) { - return std::make_unique( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PEEP_SPAWN_HERE, STR_ERR_MUST_BE_OUTSIDE_PARK_BOUNDARIES); } @@ -79,11 +77,11 @@ GameActions::Result::Ptr PlacePeepSpawnAction::Query() const return res; } -GameActions::Result::Ptr PlacePeepSpawnAction::Execute() const +GameActions::Result PlacePeepSpawnAction::Execute() const { - auto res = std::make_unique(); - res->Expenditure = ExpenditureType::LandPurchase; - res->Position = _location; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::LandPurchase; + res.Position = _location; // Shift the spawn point to the edge of the tile auto spawnPos = CoordsXY{ _location.ToTileCentre() } diff --git a/src/openrct2/actions/PlacePeepSpawnAction.h b/src/openrct2/actions/PlacePeepSpawnAction.h index bf71a83f7e..99b9f6e014 100644 --- a/src/openrct2/actions/PlacePeepSpawnAction.h +++ b/src/openrct2/actions/PlacePeepSpawnAction.h @@ -23,6 +23,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/PlayerKickAction.cpp b/src/openrct2/actions/PlayerKickAction.cpp index 1787cacd97..0a64803db8 100644 --- a/src/openrct2/actions/PlayerKickAction.cpp +++ b/src/openrct2/actions/PlayerKickAction.cpp @@ -27,12 +27,12 @@ void PlayerKickAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_playerId); } -GameActions::Result::Ptr PlayerKickAction::Query() const +GameActions::Result PlayerKickAction::Query() const { return network_kick_player(_playerId, false); } -GameActions::Result::Ptr PlayerKickAction::Execute() const +GameActions::Result PlayerKickAction::Execute() const { return network_kick_player(_playerId, true); } diff --git a/src/openrct2/actions/PlayerKickAction.h b/src/openrct2/actions/PlayerKickAction.h index 27e658ef6b..975827fc55 100644 --- a/src/openrct2/actions/PlayerKickAction.h +++ b/src/openrct2/actions/PlayerKickAction.h @@ -24,6 +24,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/PlayerSetGroupAction.cpp b/src/openrct2/actions/PlayerSetGroupAction.cpp index 3dd1ec8c1c..a086f3d7db 100644 --- a/src/openrct2/actions/PlayerSetGroupAction.cpp +++ b/src/openrct2/actions/PlayerSetGroupAction.cpp @@ -28,12 +28,12 @@ void PlayerSetGroupAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_playerId) << DS_TAG(_groupId); } -GameActions::Result::Ptr PlayerSetGroupAction::Query() const +GameActions::Result PlayerSetGroupAction::Query() const { return network_set_player_group(GetPlayer(), _playerId, _groupId, false); } -GameActions::Result::Ptr PlayerSetGroupAction::Execute() const +GameActions::Result PlayerSetGroupAction::Execute() const { return network_set_player_group(GetPlayer(), _playerId, _groupId, true); } diff --git a/src/openrct2/actions/PlayerSetGroupAction.h b/src/openrct2/actions/PlayerSetGroupAction.h index 80d144b3dc..2cf9049ebf 100644 --- a/src/openrct2/actions/PlayerSetGroupAction.h +++ b/src/openrct2/actions/PlayerSetGroupAction.h @@ -24,6 +24,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/RideCreateAction.cpp b/src/openrct2/actions/RideCreateAction.cpp index 2e6ed2f446..671cb7ef44 100644 --- a/src/openrct2/actions/RideCreateAction.cpp +++ b/src/openrct2/actions/RideCreateAction.cpp @@ -65,54 +65,57 @@ void RideCreateAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_rideType) << DS_TAG(_subType) << DS_TAG(_colour1) << DS_TAG(_colour2); } -GameActions::Result::Ptr RideCreateAction::Query() const +GameActions::Result RideCreateAction::Query() const { auto rideIndex = GetNextFreeRideId(); if (rideIndex == RIDE_ID_NULL) { // No more free slots available. - return MakeResult(GameActions::Status::NoFreeElements, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_TOO_MANY_RIDES); + return GameActions::Result( + GameActions::Status::NoFreeElements, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_TOO_MANY_RIDES); } if (_rideType >= RIDE_TYPE_COUNT) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_INVALID_RIDE_TYPE); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_INVALID_RIDE_TYPE); } int32_t rideEntryIndex = ride_get_entry_index(_rideType, _subType); if (rideEntryIndex >= MAX_RIDE_OBJECTS) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_INVALID_RIDE_TYPE); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_INVALID_RIDE_TYPE); } const auto& colourPresets = GetRideTypeDescriptor(_rideType).ColourPresets; if (_colour1 >= colourPresets.count) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_NONE); } rct_ride_entry* rideEntry = get_ride_entry(rideEntryIndex); if (rideEntry == nullptr) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_NONE); } vehicle_colour_preset_list* presetList = rideEntry->vehicle_preset_list; if ((presetList->count > 0 && presetList->count != 255) && _colour2 >= presetList->count) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_NONE); } - auto res = MakeResult(); - res->SetData(ride_id_t{ rideIndex }); + auto res = GameActions::Result(); + res.SetData(ride_id_t{ rideIndex }); return res; } -GameActions::Result::Ptr RideCreateAction::Execute() const +GameActions::Result RideCreateAction::Execute() const { rct_ride_entry* rideEntry; - auto res = MakeResult(); + auto res = GameActions::Result(); int32_t rideEntryIndex = ride_get_entry_index(_rideType, _subType); auto rideIndex = GetNextFreeRideId(); @@ -122,7 +125,7 @@ GameActions::Result::Ptr RideCreateAction::Execute() const if (rideEntry == nullptr) { log_warning("Invalid request for ride %u", rideIndex); - return MakeResult(GameActions::Status::Unknown, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_UNKNOWN_OBJECT_TYPE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_UNKNOWN_OBJECT_TYPE); } ride->id = rideIndex; @@ -303,8 +306,8 @@ GameActions::Result::Ptr RideCreateAction::Execute() const ride_set_vehicle_colours_to_random_preset(ride, _colour2); window_invalidate_by_class(WC_RIDE_LIST); - res->Expenditure = ExpenditureType::RideConstruction; - res->SetData(ride_id_t{ rideIndex }); + res.Expenditure = ExpenditureType::RideConstruction; + res.SetData(ride_id_t{ rideIndex }); return res; } diff --git a/src/openrct2/actions/RideCreateAction.h b/src/openrct2/actions/RideCreateAction.h index 654ca36799..fc7d65af91 100644 --- a/src/openrct2/actions/RideCreateAction.h +++ b/src/openrct2/actions/RideCreateAction.h @@ -30,6 +30,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/RideDemolishAction.cpp b/src/openrct2/actions/RideDemolishAction.cpp index cab6435f44..2212c72512 100644 --- a/src/openrct2/actions/RideDemolishAction.cpp +++ b/src/openrct2/actions/RideDemolishAction.cpp @@ -54,60 +54,57 @@ void RideDemolishAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_rideIndex) << DS_TAG(_modifyType); } -GameActions::Result::Ptr RideDemolishAction::Query() const +GameActions::Result RideDemolishAction::Query() const { auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid game command for ride %u", uint32_t(_rideIndex)); - return std::make_unique(GameActions::Status::InvalidParameters, STR_CANT_DEMOLISH_RIDE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_DEMOLISH_RIDE, STR_NONE); } if (ride->lifecycle_flags & (RIDE_LIFECYCLE_INDESTRUCTIBLE | RIDE_LIFECYCLE_INDESTRUCTIBLE_TRACK) && _modifyType == RIDE_MODIFY_DEMOLISH) { - return std::make_unique( + return GameActions::Result( GameActions::Status::NoClearance, STR_CANT_DEMOLISH_RIDE, STR_LOCAL_AUTHORITY_FORBIDS_DEMOLITION_OR_MODIFICATIONS_TO_THIS_RIDE); } - GameActions::Result::Ptr result = std::make_unique(); + GameActions::Result result = GameActions::Result(); if (_modifyType == RIDE_MODIFY_RENEW) { if (ride->status != RideStatus::Closed && ride->status != RideStatus::Simulating) { - return std::make_unique( - GameActions::Status::Disallowed, STR_CANT_REFURBISH_RIDE, STR_MUST_BE_CLOSED_FIRST); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_REFURBISH_RIDE, STR_MUST_BE_CLOSED_FIRST); } if (ride->num_riders > 0) { - return std::make_unique( - GameActions::Status::Disallowed, STR_CANT_REFURBISH_RIDE, STR_RIDE_NOT_YET_EMPTY); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_REFURBISH_RIDE, STR_RIDE_NOT_YET_EMPTY); } if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_EVER_BEEN_OPENED) || ride->GetRideTypeDescriptor().AvailableBreakdowns == 0) { - return std::make_unique( - GameActions::Status::Disallowed, STR_CANT_REFURBISH_RIDE, STR_CANT_REFURBISH_NOT_NEEDED); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_REFURBISH_RIDE, STR_CANT_REFURBISH_NOT_NEEDED); } - result->ErrorTitle = STR_CANT_REFURBISH_RIDE; - result->Cost = GetRefurbishPrice(ride); + result.ErrorTitle = STR_CANT_REFURBISH_RIDE; + result.Cost = GetRefurbishPrice(ride); } return result; } -GameActions::Result::Ptr RideDemolishAction::Execute() const +GameActions::Result RideDemolishAction::Execute() const { auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid game command for ride %u", uint32_t(_rideIndex)); - return std::make_unique(GameActions::Status::InvalidParameters, STR_CANT_DEMOLISH_RIDE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_DEMOLISH_RIDE, STR_NONE); } switch (_modifyType) @@ -118,10 +115,10 @@ GameActions::Result::Ptr RideDemolishAction::Execute() const return RefurbishRide(ride); } - return std::make_unique(GameActions::Status::InvalidParameters, STR_CANT_DO_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_DO_THIS, STR_NONE); } -GameActions::Result::Ptr RideDemolishAction::DemolishRide(Ride* ride) const +GameActions::Result RideDemolishAction::DemolishRide(Ride* ride) const { money32 refundPrice = DemolishTracks(); @@ -145,14 +142,14 @@ GameActions::Result::Ptr RideDemolishAction::DemolishRide(Ride* ride) const MarketingCancelCampaignsForRide(_rideIndex); - auto res = std::make_unique(); - res->Expenditure = ExpenditureType::RideConstruction; - res->Cost = refundPrice; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::RideConstruction; + res.Cost = refundPrice; if (!ride->overall_view.IsNull()) { auto xy = ride->overall_view.ToTileCentre(); - res->Position = { xy, tile_element_height(xy) }; + res.Position = { xy, tile_element_height(xy) }; } ride->Delete(); @@ -182,9 +179,9 @@ money32 RideDemolishAction::MazeRemoveTrack(const CoordsXYZD& coords) const setMazeTrack.SetFlags(GetFlags()); auto execRes = GameActions::ExecuteNested(&setMazeTrack); - if (execRes->Error == GameActions::Status::Ok) + if (execRes.Error == GameActions::Status::Ok) { - return execRes->Cost; + return execRes.Cost; } return MONEY32_UNDEFINED; @@ -218,13 +215,13 @@ money32 RideDemolishAction::DemolishTracks() const auto removRes = GameActions::ExecuteNested(&trackRemoveAction); - if (removRes->Error != GameActions::Status::Ok) + if (removRes.Error != GameActions::Status::Ok) { tile_element_remove(it.element); } else { - refundPrice += removRes->Cost; + refundPrice += removRes.Cost; } tile_element_iterator_restart_for_tile(&it); @@ -255,11 +252,11 @@ money32 RideDemolishAction::DemolishTracks() const return refundPrice; } -GameActions::Result::Ptr RideDemolishAction::RefurbishRide(Ride* ride) const +GameActions::Result RideDemolishAction::RefurbishRide(Ride* ride) const { - auto res = std::make_unique(); - res->Expenditure = ExpenditureType::RideConstruction; - res->Cost = GetRefurbishPrice(ride); + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::RideConstruction; + res.Cost = GetRefurbishPrice(ride); ride->Renew(); @@ -271,7 +268,7 @@ GameActions::Result::Ptr RideDemolishAction::RefurbishRide(Ride* ride) const if (!ride->overall_view.IsNull()) { auto location = ride->overall_view.ToTileCentre(); - res->Position = { location, tile_element_height(location) }; + res.Position = { location, tile_element_height(location) }; } window_close_by_number(WC_DEMOLISH_RIDE_PROMPT, EnumValue(_rideIndex)); diff --git a/src/openrct2/actions/RideDemolishAction.h b/src/openrct2/actions/RideDemolishAction.h index b80408647b..d3a09b44ee 100644 --- a/src/openrct2/actions/RideDemolishAction.h +++ b/src/openrct2/actions/RideDemolishAction.h @@ -26,14 +26,14 @@ public: uint32_t GetCooldownTime() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr DemolishRide(Ride* ride) const; + GameActions::Result DemolishRide(Ride* ride) const; money32 MazeRemoveTrack(const CoordsXYZD& coords) const; money32 DemolishTracks() const; - GameActions::Result::Ptr RefurbishRide(Ride* ride) const; + GameActions::Result RefurbishRide(Ride* ride) const; money32 GetRefurbishPrice(const Ride* ride) const; money32 GetRefundPrice(const Ride* ride) const; }; diff --git a/src/openrct2/actions/RideEntranceExitPlaceAction.cpp b/src/openrct2/actions/RideEntranceExitPlaceAction.cpp index bc1e02377d..60df0361fa 100644 --- a/src/openrct2/actions/RideEntranceExitPlaceAction.cpp +++ b/src/openrct2/actions/RideEntranceExitPlaceAction.cpp @@ -47,7 +47,7 @@ void RideEntranceExitPlaceAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_direction) << DS_TAG(_rideIndex) << DS_TAG(_stationNum) << DS_TAG(_isExit); } -GameActions::Result::Ptr RideEntranceExitPlaceAction::Query() const +GameActions::Result RideEntranceExitPlaceAction::Query() const { const auto errorTitle = _isExit ? STR_CANT_BUILD_MOVE_EXIT_FOR_THIS_RIDE_ATTRACTION : STR_CANT_BUILD_MOVE_ENTRANCE_FOR_THIS_RIDE_ATTRACTION; @@ -56,23 +56,23 @@ GameActions::Result::Ptr RideEntranceExitPlaceAction::Query() const if (ride == nullptr) { log_warning("Invalid game command for ride %d", EnumValue(_rideIndex)); - return MakeResult(GameActions::Status::InvalidParameters, errorTitle, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, errorTitle, STR_NONE); } if (_stationNum >= MAX_STATIONS) { log_warning("Invalid station number for ride. stationNum: %u", _stationNum); - return MakeResult(GameActions::Status::InvalidParameters, errorTitle, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, errorTitle, STR_NONE); } if (ride->status != RideStatus::Closed && ride->status != RideStatus::Simulating) { - return MakeResult(GameActions::Status::NotClosed, errorTitle, STR_MUST_BE_CLOSED_FIRST); + return GameActions::Result(GameActions::Status::NotClosed, errorTitle, STR_MUST_BE_CLOSED_FIRST); } if (ride->lifecycle_flags & RIDE_LIFECYCLE_INDESTRUCTIBLE_TRACK) { - return MakeResult(GameActions::Status::Disallowed, errorTitle, STR_NOT_ALLOWED_TO_MODIFY_STATION); + return GameActions::Result(GameActions::Status::Disallowed, errorTitle, STR_NOT_ALLOWED_TO_MODIFY_STATION); } const auto location = _isExit ? ride_get_exit_location(ride, _stationNum) : ride_get_entrance_location(ride, _stationNum); @@ -83,9 +83,9 @@ GameActions::Result::Ptr RideEntranceExitPlaceAction::Query() const rideEntranceExitRemove.SetFlags(GetFlags()); auto result = GameActions::QueryNested(&rideEntranceExitRemove); - if (result->Error != GameActions::Status::Ok) + if (result.Error != GameActions::Status::Ok) { - result->ErrorTitle = errorTitle; + result.ErrorTitle = errorTitle; return result; } } @@ -93,40 +93,40 @@ GameActions::Result::Ptr RideEntranceExitPlaceAction::Query() const auto z = ride->stations[_stationNum].GetBaseZ(); if (!LocationValid(_loc) || (!gCheatsSandboxMode && !map_is_location_owned({ _loc, z }))) { - return MakeResult(GameActions::Status::NotOwned, errorTitle, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, errorTitle, STR_LAND_NOT_OWNED_BY_PARK); } if (!MapCheckCapacityAndReorganise(_loc)) { - return MakeResult(GameActions::Status::NoFreeElements, errorTitle, STR_TILE_ELEMENT_LIMIT_REACHED); + return GameActions::Result(GameActions::Status::NoFreeElements, errorTitle, STR_TILE_ELEMENT_LIMIT_REACHED); } auto clear_z = z + (_isExit ? RideExitHeight : RideEntranceHeight); auto canBuild = MapCanConstructWithClearAt( { _loc, z, clear_z }, &map_place_non_scenery_clear_func, { 0b1111, 0 }, GetFlags()); - if (canBuild->Error != GameActions::Status::Ok) + if (canBuild.Error != GameActions::Status::Ok) { - canBuild->ErrorTitle = errorTitle; + canBuild.ErrorTitle = errorTitle; return canBuild; } - const auto clearanceData = canBuild->GetData(); + const auto clearanceData = canBuild.GetData(); if (clearanceData.GroundFlags & ELEMENT_IS_UNDERWATER) { - return MakeResult(GameActions::Status::Disallowed, errorTitle, STR_RIDE_CANT_BUILD_THIS_UNDERWATER); + return GameActions::Result(GameActions::Status::Disallowed, errorTitle, STR_RIDE_CANT_BUILD_THIS_UNDERWATER); } if (z > MaxRideEntranceOrExitHeight) { - return MakeResult(GameActions::Status::Disallowed, errorTitle, STR_TOO_HIGH); + return GameActions::Result(GameActions::Status::Disallowed, errorTitle, STR_TOO_HIGH); } - auto res = MakeResult(); - res->Position = { _loc.ToTileCentre(), z }; - res->Expenditure = ExpenditureType::RideConstruction; + auto res = GameActions::Result(); + res.Position = { _loc.ToTileCentre(), z }; + res.Expenditure = ExpenditureType::RideConstruction; return res; } -GameActions::Result::Ptr RideEntranceExitPlaceAction::Execute() const +GameActions::Result RideEntranceExitPlaceAction::Execute() const { // Remember when in unknown station num mode rideIndex is unknown and z is set // When in known station num mode rideIndex is known and z is unknown @@ -136,7 +136,7 @@ GameActions::Result::Ptr RideEntranceExitPlaceAction::Execute() const if (ride == nullptr) { log_warning("Invalid game command for ride %d", EnumValue(_rideIndex)); - return MakeResult(GameActions::Status::InvalidParameters, errorTitle, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, errorTitle, STR_NONE); } if (!(GetFlags() & GAME_COMMAND_FLAG_GHOST)) @@ -152,9 +152,9 @@ GameActions::Result::Ptr RideEntranceExitPlaceAction::Execute() const rideEntranceExitRemove.SetFlags(GetFlags()); auto result = GameActions::ExecuteNested(&rideEntranceExitRemove); - if (result->Error != GameActions::Status::Ok) + if (result.Error != GameActions::Status::Ok) { - result->ErrorTitle = errorTitle; + result.ErrorTitle = errorTitle; return result; } } @@ -169,15 +169,15 @@ GameActions::Result::Ptr RideEntranceExitPlaceAction::Execute() const auto clear_z = z + (_isExit ? RideExitHeight : RideEntranceHeight); auto canBuild = MapCanConstructWithClearAt( { _loc, z, clear_z }, &map_place_non_scenery_clear_func, { 0b1111, 0 }, GetFlags() | GAME_COMMAND_FLAG_APPLY); - if (canBuild->Error != GameActions::Status::Ok) + if (canBuild.Error != GameActions::Status::Ok) { - canBuild->ErrorTitle = errorTitle; + canBuild.ErrorTitle = errorTitle; return canBuild; } - auto res = MakeResult(); - res->Position = { _loc.ToTileCentre(), z }; - res->Expenditure = ExpenditureType::RideConstruction; + auto res = GameActions::Result(); + res.Position = { _loc.ToTileCentre(), z }; + res.Expenditure = ExpenditureType::RideConstruction; auto* entranceElement = TileElementInsert(CoordsXYZ{ _loc, z }, 0b1111); Guard::Assert(entranceElement != nullptr); @@ -217,41 +217,41 @@ GameActions::Result::Ptr RideEntranceExitPlaceAction::Execute() const return res; } -GameActions::Result::Ptr RideEntranceExitPlaceAction::TrackPlaceQuery(const CoordsXYZ& loc, const bool isExit) +GameActions::Result RideEntranceExitPlaceAction::TrackPlaceQuery(const CoordsXYZ& loc, const bool isExit) { const auto errorTitle = isExit ? STR_CANT_BUILD_MOVE_EXIT_FOR_THIS_RIDE_ATTRACTION : STR_CANT_BUILD_MOVE_ENTRANCE_FOR_THIS_RIDE_ATTRACTION; if (!gCheatsSandboxMode && !map_is_location_owned(loc)) { - return MakeResult(GameActions::Status::NotOwned, errorTitle, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, errorTitle, STR_LAND_NOT_OWNED_BY_PARK); } if (!MapCheckCapacityAndReorganise(loc)) { - return MakeResult(GameActions::Status::NoFreeElements, errorTitle, STR_TILE_ELEMENT_LIMIT_REACHED); + return GameActions::Result(GameActions::Status::NoFreeElements, errorTitle, STR_TILE_ELEMENT_LIMIT_REACHED); } int16_t baseZ = loc.z; int16_t clearZ = baseZ + (isExit ? RideExitHeight : RideEntranceHeight); auto canBuild = MapCanConstructWithClearAt({ loc, baseZ, clearZ }, &map_place_non_scenery_clear_func, { 0b1111, 0 }, 0); - if (canBuild->Error != GameActions::Status::Ok) + if (canBuild.Error != GameActions::Status::Ok) { - canBuild->ErrorTitle = errorTitle; + canBuild.ErrorTitle = errorTitle; return canBuild; } - const auto clearanceData = canBuild->GetData(); + const auto clearanceData = canBuild.GetData(); if (clearanceData.GroundFlags & ELEMENT_IS_UNDERWATER) { - return MakeResult(GameActions::Status::Disallowed, errorTitle, STR_RIDE_CANT_BUILD_THIS_UNDERWATER); + return GameActions::Result(GameActions::Status::Disallowed, errorTitle, STR_RIDE_CANT_BUILD_THIS_UNDERWATER); } if (baseZ > MaxRideEntranceOrExitHeight) { - return MakeResult(GameActions::Status::Disallowed, errorTitle, STR_TOO_HIGH); + return GameActions::Result(GameActions::Status::Disallowed, errorTitle, STR_TOO_HIGH); } - auto res = MakeResult(); - res->Position = { loc.ToTileCentre(), tile_element_height(loc) }; - res->Expenditure = ExpenditureType::RideConstruction; + auto res = GameActions::Result(); + res.Position = { loc.ToTileCentre(), tile_element_height(loc) }; + res.Expenditure = ExpenditureType::RideConstruction; return res; } diff --git a/src/openrct2/actions/RideEntranceExitPlaceAction.h b/src/openrct2/actions/RideEntranceExitPlaceAction.h index 0d737c4a7e..58234cc2f9 100644 --- a/src/openrct2/actions/RideEntranceExitPlaceAction.h +++ b/src/openrct2/actions/RideEntranceExitPlaceAction.h @@ -31,8 +31,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; - static GameActions::Result::Ptr TrackPlaceQuery(const CoordsXYZ& loc, const bool isExit); + static GameActions::Result TrackPlaceQuery(const CoordsXYZ& loc, const bool isExit); }; diff --git a/src/openrct2/actions/RideEntranceExitRemoveAction.cpp b/src/openrct2/actions/RideEntranceExitRemoveAction.cpp index 98691e9062..7b774db60a 100644 --- a/src/openrct2/actions/RideEntranceExitRemoveAction.cpp +++ b/src/openrct2/actions/RideEntranceExitRemoveAction.cpp @@ -69,28 +69,28 @@ static TileElement* FindEntranceElement( return nullptr; } -GameActions::Result::Ptr RideEntranceExitRemoveAction::Query() const +GameActions::Result RideEntranceExitRemoveAction::Query() const { auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid ride id %d for entrance/exit removal", EnumValue(_rideIndex)); - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } if (ride->status != RideStatus::Closed && ride->status != RideStatus::Simulating) { - return MakeResult(GameActions::Status::InvalidParameters, STR_MUST_BE_CLOSED_FIRST, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_MUST_BE_CLOSED_FIRST, STR_NONE); } if (ride->lifecycle_flags & RIDE_LIFECYCLE_INDESTRUCTIBLE_TRACK) { - return MakeResult(GameActions::Status::InvalidParameters, STR_NOT_ALLOWED_TO_MODIFY_STATION, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NOT_ALLOWED_TO_MODIFY_STATION, STR_NONE); } if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::InvalidParameters, STR_LAND_NOT_OWNED_BY_PARK, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_LAND_NOT_OWNED_BY_PARK, STR_NONE); } auto* entranceElement = FindEntranceElement( @@ -101,19 +101,19 @@ GameActions::Result::Ptr RideEntranceExitRemoveAction::Query() const log_warning( "Track Element not found. x = %d, y = %d, ride = %d, station = %d", _loc.x, _loc.y, EnumValue(_rideIndex), _stationNum); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - return MakeResult(); + return GameActions::Result(); } -GameActions::Result::Ptr RideEntranceExitRemoveAction::Execute() const +GameActions::Result RideEntranceExitRemoveAction::Execute() const { auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid ride id %d for entrance/exit removal", EnumValue(_rideIndex)); - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } const bool isGhost = GetFlags() & GAME_COMMAND_FLAG_GHOST; @@ -132,13 +132,13 @@ GameActions::Result::Ptr RideEntranceExitRemoveAction::Execute() const log_warning( "Track Element not found. x = %d, y = %d, ride = %d, station = %d", _loc.x, _loc.y, EnumValue(_rideIndex), _stationNum); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - auto res = MakeResult(); - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = tile_element_height(res->Position); + auto res = GameActions::Result(); + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = tile_element_height(res.Position); footpath_queue_chain_reset(); maze_entrance_hedge_replacement({ _loc, entranceElement }); diff --git a/src/openrct2/actions/RideEntranceExitRemoveAction.h b/src/openrct2/actions/RideEntranceExitRemoveAction.h index bd813d559a..ce06d0d1c6 100644 --- a/src/openrct2/actions/RideEntranceExitRemoveAction.h +++ b/src/openrct2/actions/RideEntranceExitRemoveAction.h @@ -28,6 +28,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/RideSetAppearanceAction.cpp b/src/openrct2/actions/RideSetAppearanceAction.cpp index 4cf798a188..3a4d42a16b 100644 --- a/src/openrct2/actions/RideSetAppearanceAction.cpp +++ b/src/openrct2/actions/RideSetAppearanceAction.cpp @@ -49,13 +49,13 @@ void RideSetAppearanceAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_rideIndex) << DS_TAG(_type) << DS_TAG(_value) << DS_TAG(_index); } -GameActions::Result::Ptr RideSetAppearanceAction::Query() const +GameActions::Result RideSetAppearanceAction::Query() const { auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid game command, ride_id = %u", uint32_t(_rideIndex)); - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } switch (_type) @@ -66,7 +66,7 @@ GameActions::Result::Ptr RideSetAppearanceAction::Query() const if (_index >= std::size(ride->track_colour)) { log_warning("Invalid game command, index %d out of bounds", _index); - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } break; case RideSetAppearanceType::VehicleColourBody: @@ -75,7 +75,7 @@ GameActions::Result::Ptr RideSetAppearanceAction::Query() const if (_index >= std::size(ride->vehicle_colours)) { log_warning("Invalid game command, index %d out of bounds", _index); - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } break; case RideSetAppearanceType::VehicleColourScheme: @@ -83,19 +83,19 @@ GameActions::Result::Ptr RideSetAppearanceAction::Query() const break; default: log_warning("Invalid game command, type %d not recognised", _type); - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr RideSetAppearanceAction::Execute() const +GameActions::Result RideSetAppearanceAction::Execute() const { auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid game command, ride_id = %u", uint32_t(_rideIndex)); - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } switch (_type) @@ -141,11 +141,11 @@ GameActions::Result::Ptr RideSetAppearanceAction::Execute() const } window_invalidate_by_number(WC_RIDE, EnumValue(_rideIndex)); - auto res = std::make_unique(); + auto res = GameActions::Result(); if (!ride->overall_view.IsNull()) { auto location = ride->overall_view.ToTileCentre(); - res->Position = { location, tile_element_height(location) }; + res.Position = { location, tile_element_height(location) }; } return res; diff --git a/src/openrct2/actions/RideSetAppearanceAction.h b/src/openrct2/actions/RideSetAppearanceAction.h index 43efca03be..10560405dc 100644 --- a/src/openrct2/actions/RideSetAppearanceAction.h +++ b/src/openrct2/actions/RideSetAppearanceAction.h @@ -41,6 +41,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/RideSetColourSchemeAction.cpp b/src/openrct2/actions/RideSetColourSchemeAction.cpp index c0df05aacb..5273eb56d3 100644 --- a/src/openrct2/actions/RideSetColourSchemeAction.cpp +++ b/src/openrct2/actions/RideSetColourSchemeAction.cpp @@ -46,20 +46,21 @@ void RideSetColourSchemeAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_trackType) << DS_TAG(_newColourScheme); } -GameActions::Result::Ptr RideSetColourSchemeAction::Query() const +GameActions::Result RideSetColourSchemeAction::Query() const { if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_SET_COLOUR_SCHEME, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_CANT_SET_COLOUR_SCHEME, STR_LAND_NOT_OWNED_BY_PARK); } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr RideSetColourSchemeAction::Execute() const +GameActions::Result RideSetColourSchemeAction::Execute() const { - GameActions::Result::Ptr res = std::make_unique(); - res->Expenditure = ExpenditureType::RideConstruction; - res->ErrorTitle = STR_CANT_SET_COLOUR_SCHEME; + GameActions::Result res = GameActions::Result(); + res.Expenditure = ExpenditureType::RideConstruction; + res.ErrorTitle = STR_CANT_SET_COLOUR_SCHEME; GetTrackElementOriginAndApplyChanges(_loc, _trackType, _newColourScheme, nullptr, TRACK_ELEMENT_SET_COLOUR_SCHEME); diff --git a/src/openrct2/actions/RideSetColourSchemeAction.h b/src/openrct2/actions/RideSetColourSchemeAction.h index e17f51517f..be5fdefd8a 100644 --- a/src/openrct2/actions/RideSetColourSchemeAction.h +++ b/src/openrct2/actions/RideSetColourSchemeAction.h @@ -27,6 +27,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/RideSetNameAction.cpp b/src/openrct2/actions/RideSetNameAction.cpp index f16c9d2bdc..8a3c916ef6 100644 --- a/src/openrct2/actions/RideSetNameAction.cpp +++ b/src/openrct2/actions/RideSetNameAction.cpp @@ -45,33 +45,31 @@ void RideSetNameAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_rideIndex) << DS_TAG(_name); } -GameActions::Result::Ptr RideSetNameAction::Query() const +GameActions::Result RideSetNameAction::Query() const { auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid game command for ride %u", uint32_t(_rideIndex)); - return std::make_unique( - GameActions::Status::InvalidParameters, STR_CANT_RENAME_RIDE_ATTRACTION, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_RENAME_RIDE_ATTRACTION, STR_NONE); } if (!_name.empty() && Ride::NameExists(_name, ride->id)) { - return std::make_unique( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_RENAME_RIDE_ATTRACTION, STR_ERROR_EXISTING_NAME); } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr RideSetNameAction::Execute() const +GameActions::Result RideSetNameAction::Execute() const { auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid game command for ride %u", uint32_t(_rideIndex)); - return std::make_unique( - GameActions::Status::InvalidParameters, STR_CANT_RENAME_RIDE_ATTRACTION, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_RENAME_RIDE_ATTRACTION, STR_NONE); } if (_name.empty()) @@ -92,9 +90,9 @@ GameActions::Result::Ptr RideSetNameAction::Execute() const windowManager->BroadcastIntent(Intent(INTENT_ACTION_REFRESH_RIDE_LIST)); windowManager->BroadcastIntent(Intent(INTENT_ACTION_REFRESH_GUEST_LIST)); - auto res = std::make_unique(); + auto res = GameActions::Result(); auto location = ride->overall_view.ToTileCentre(); - res->Position = { location, tile_element_height(location) }; + res.Position = { location, tile_element_height(location) }; return res; } diff --git a/src/openrct2/actions/RideSetNameAction.h b/src/openrct2/actions/RideSetNameAction.h index 01133d99e8..869a04ad26 100644 --- a/src/openrct2/actions/RideSetNameAction.h +++ b/src/openrct2/actions/RideSetNameAction.h @@ -26,6 +26,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/RideSetPriceAction.cpp b/src/openrct2/actions/RideSetPriceAction.cpp index 12b9531fc2..ad73c2a3ff 100644 --- a/src/openrct2/actions/RideSetPriceAction.cpp +++ b/src/openrct2/actions/RideSetPriceAction.cpp @@ -47,50 +47,50 @@ void RideSetPriceAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_rideIndex) << DS_TAG(_price) << DS_TAG(_primaryPrice); } -GameActions::Result::Ptr RideSetPriceAction::Query() const +GameActions::Result RideSetPriceAction::Query() const { - GameActions::Result::Ptr res = std::make_unique(); + GameActions::Result res = GameActions::Result(); auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid game command, ride_id = %u", uint32_t(_rideIndex)); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } rct_ride_entry* rideEntry = get_ride_entry(ride->subtype); if (rideEntry == nullptr) { log_warning("Invalid game command for ride %u", uint32_t(_rideIndex)); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } return res; } -GameActions::Result::Ptr RideSetPriceAction::Execute() const +GameActions::Result RideSetPriceAction::Execute() const { - GameActions::Result::Ptr res = std::make_unique(); - res->Expenditure = ExpenditureType::ParkRideTickets; + GameActions::Result res = GameActions::Result(); + res.Expenditure = ExpenditureType::ParkRideTickets; auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid game command, ride_id = %u", uint32_t(_rideIndex)); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } rct_ride_entry* rideEntry = get_ride_entry(ride->subtype); if (rideEntry == nullptr) { log_warning("Invalid game command for ride %u", uint32_t(_rideIndex)); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } if (!ride->overall_view.IsNull()) { auto location = ride->overall_view.ToTileCentre(); - res->Position = { location, tile_element_height(location) }; + res.Position = { location, tile_element_height(location) }; } ShopItem shopItem; diff --git a/src/openrct2/actions/RideSetPriceAction.h b/src/openrct2/actions/RideSetPriceAction.h index efd3a834bf..6e24bd54e4 100644 --- a/src/openrct2/actions/RideSetPriceAction.h +++ b/src/openrct2/actions/RideSetPriceAction.h @@ -27,8 +27,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: void RideSetCommonPrice(ShopItem shopItem) const; diff --git a/src/openrct2/actions/RideSetSettingAction.cpp b/src/openrct2/actions/RideSetSettingAction.cpp index 70dee20575..871938f4cd 100644 --- a/src/openrct2/actions/RideSetSettingAction.cpp +++ b/src/openrct2/actions/RideSetSettingAction.cpp @@ -40,13 +40,13 @@ void RideSetSettingAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_rideIndex) << DS_TAG(_setting) << DS_TAG(_value); } -GameActions::Result::Ptr RideSetSettingAction::Query() const +GameActions::Result RideSetSettingAction::Query() const { auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid ride: #%d.", EnumValue(_rideIndex)); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); } switch (_setting) @@ -54,19 +54,20 @@ GameActions::Result::Ptr RideSetSettingAction::Query() const case RideSetSetting::Mode: if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_CANT_CHANGE_OPERATING_MODE, STR_HAS_BROKEN_DOWN_AND_REQUIRES_FIXING); } if (ride->status != RideStatus::Closed && ride->status != RideStatus::Simulating) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_CHANGE_OPERATING_MODE, STR_MUST_BE_CLOSED_FIRST); + return GameActions::Result( + GameActions::Status::Disallowed, STR_CANT_CHANGE_OPERATING_MODE, STR_MUST_BE_CLOSED_FIRST); } if (!ride_is_mode_valid(ride) && !gCheatsShowAllOperatingModes) { log_warning("Invalid ride mode: %u", _value); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); } break; case RideSetSetting::Departure: @@ -75,21 +76,21 @@ GameActions::Result::Ptr RideSetSettingAction::Query() const if (_value > 250) { log_warning("Invalid minimum waiting time: %u", _value); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); } break; case RideSetSetting::MaxWaitingTime: if (_value > 250) { log_warning("Invalid maximum waiting time: %u", _value); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); } break; case RideSetSetting::Operation: if (!ride_is_valid_operation_option(ride)) { log_warning("Invalid operation option value: %u", _value); - return MakeResult( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, GetOperationErrorMessage(ride)); } break; @@ -97,7 +98,7 @@ GameActions::Result::Ptr RideSetSettingAction::Query() const if (_value > RIDE_INSPECTION_NEVER) { log_warning("Invalid inspection interval: %u", _value); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); } break; case RideSetSetting::Music: @@ -109,7 +110,7 @@ GameActions::Result::Ptr RideSetSettingAction::Query() const if (musicObj == nullptr) { log_warning("Invalid music style: %u", _value); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); } break; } @@ -117,13 +118,13 @@ GameActions::Result::Ptr RideSetSettingAction::Query() const if (!ride_is_valid_lift_hill_speed(ride)) { log_warning("Invalid lift hill speed: %u", _value); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); } break; case RideSetSetting::NumCircuits: if (ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT && _value > 1) { - return MakeResult( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_MULTICIRCUIT_NOT_POSSIBLE_WITH_CABLE_LIFT_HILL); } @@ -131,31 +132,31 @@ GameActions::Result::Ptr RideSetSettingAction::Query() const if (!ride_is_valid_num_circuits()) { log_warning("Invalid number of circuits: %u", _value); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); } break; case RideSetSetting::RideType: if (!gCheatsAllowArbitraryRideTypeChanges) { log_warning("Arbitrary ride type changes not allowed."); - return MakeResult(GameActions::Status::Disallowed, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); } break; default: log_warning("Invalid RideSetSetting: %u", static_cast(_setting)); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr RideSetSettingAction::Execute() const +GameActions::Result RideSetSettingAction::Execute() const { auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid ride: #%d.", EnumValue(_rideIndex)); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_OPERATING_MODE, STR_NONE); } switch (_setting) @@ -229,11 +230,11 @@ GameActions::Result::Ptr RideSetSettingAction::Execute() const break; } - auto res = std::make_unique(); + auto res = GameActions::Result(); if (!ride->overall_view.IsNull()) { auto location = ride->overall_view.ToTileCentre(); - res->Position = { location, tile_element_height(location) }; + res.Position = { location, tile_element_height(location) }; } window_invalidate_by_number(WC_RIDE, EnumValue(_rideIndex)); return res; diff --git a/src/openrct2/actions/RideSetSettingAction.h b/src/openrct2/actions/RideSetSettingAction.h index 52f7b89cee..b4d0ce48a1 100644 --- a/src/openrct2/actions/RideSetSettingAction.h +++ b/src/openrct2/actions/RideSetSettingAction.h @@ -42,8 +42,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: bool ride_is_mode_valid(Ride* ride) const; diff --git a/src/openrct2/actions/RideSetStatusAction.cpp b/src/openrct2/actions/RideSetStatusAction.cpp index 6ed78ec399..71162f4836 100644 --- a/src/openrct2/actions/RideSetStatusAction.cpp +++ b/src/openrct2/actions/RideSetStatusAction.cpp @@ -52,32 +52,32 @@ void RideSetStatusAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_rideIndex) << DS_TAG(_status); } -GameActions::Result::Ptr RideSetStatusAction::Query() const +GameActions::Result RideSetStatusAction::Query() const { - GameActions::Result::Ptr res = std::make_unique(); + GameActions::Result res = GameActions::Result(); auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid game command for ride %u", EnumValue(_rideIndex)); - res->Error = GameActions::Status::InvalidParameters; - res->ErrorTitle = STR_RIDE_DESCRIPTION_UNKNOWN; - res->ErrorMessage = STR_NONE; + res.Error = GameActions::Status::InvalidParameters; + res.ErrorTitle = STR_RIDE_DESCRIPTION_UNKNOWN; + res.ErrorMessage = STR_NONE; return res; } if (_status >= RideStatus::Count) { log_warning("Invalid ride status %u for ride %u", EnumValue(_status), EnumValue(_rideIndex)); - res->Error = GameActions::Status::InvalidParameters; - res->ErrorTitle = STR_RIDE_DESCRIPTION_UNKNOWN; - res->ErrorMessage = STR_NONE; + res.Error = GameActions::Status::InvalidParameters; + res.ErrorTitle = STR_RIDE_DESCRIPTION_UNKNOWN; + res.ErrorMessage = STR_NONE; return res; } - res->ErrorTitle = _StatusErrorTitles[EnumValue(_status)]; + res.ErrorTitle = _StatusErrorTitles[EnumValue(_status)]; - Formatter ft(res->ErrorMessageArgs.data()); + Formatter ft(res.ErrorMessageArgs.data()); ft.Increment(6); ride->FormatNameTo(ft); if (_status != ride->status) @@ -85,8 +85,8 @@ GameActions::Result::Ptr RideSetStatusAction::Query() const if (_status == RideStatus::Simulating && (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN)) { // Simulating will force clear the track, so make sure player can't cheat around a break down - res->Error = GameActions::Status::Disallowed; - res->ErrorMessage = STR_HAS_BROKEN_DOWN_AND_REQUIRES_FIXING; + res.Error = GameActions::Status::Disallowed; + res.ErrorMessage = STR_HAS_BROKEN_DOWN_AND_REQUIRES_FIXING; return res; } @@ -94,8 +94,8 @@ GameActions::Result::Ptr RideSetStatusAction::Query() const { if (!ride->Test(_status, false)) { - res->Error = GameActions::Status::Unknown; - res->ErrorMessage = gGameCommandErrorText; + res.Error = GameActions::Status::Unknown; + res.ErrorMessage = gGameCommandErrorText; return res; } } @@ -103,39 +103,39 @@ GameActions::Result::Ptr RideSetStatusAction::Query() const { if (!ride->Open(false)) { - res->Error = GameActions::Status::Unknown; - res->ErrorMessage = gGameCommandErrorText; + res.Error = GameActions::Status::Unknown; + res.ErrorMessage = gGameCommandErrorText; return res; } } } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr RideSetStatusAction::Execute() const +GameActions::Result RideSetStatusAction::Execute() const { - GameActions::Result::Ptr res = std::make_unique(); - res->Expenditure = ExpenditureType::RideRunningCosts; + GameActions::Result res = GameActions::Result(); + res.Expenditure = ExpenditureType::RideRunningCosts; auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid game command for ride %u", uint32_t(_rideIndex)); - res->Error = GameActions::Status::InvalidParameters; - res->ErrorTitle = STR_RIDE_DESCRIPTION_UNKNOWN; - res->ErrorMessage = STR_NONE; + res.Error = GameActions::Status::InvalidParameters; + res.ErrorTitle = STR_RIDE_DESCRIPTION_UNKNOWN; + res.ErrorMessage = STR_NONE; return res; } - res->ErrorTitle = _StatusErrorTitles[static_cast(_status)]; + res.ErrorTitle = _StatusErrorTitles[static_cast(_status)]; - Formatter ft(res->ErrorMessageArgs.data()); + Formatter ft(res.ErrorMessageArgs.data()); ft.Increment(6); ride->FormatNameTo(ft); if (!ride->overall_view.IsNull()) { auto location = ride->overall_view.ToTileCentre(); - res->Position = { location, tile_element_height(location) }; + res.Position = { location, tile_element_height(location) }; } switch (_status) @@ -165,8 +165,8 @@ GameActions::Result::Ptr RideSetStatusAction::Execute() const if (!ride->Test(_status, true)) { - res->Error = GameActions::Status::Unknown; - res->ErrorMessage = gGameCommandErrorText; + res.Error = GameActions::Status::Unknown; + res.ErrorMessage = gGameCommandErrorText; return res; } @@ -206,15 +206,15 @@ GameActions::Result::Ptr RideSetStatusAction::Execute() const { if (!ride->Test(_status, true)) { - res->Error = GameActions::Status::Unknown; - res->ErrorMessage = gGameCommandErrorText; + res.Error = GameActions::Status::Unknown; + res.ErrorMessage = gGameCommandErrorText; return res; } } else if (!ride->Open(true)) { - res->Error = GameActions::Status::Unknown; - res->ErrorMessage = gGameCommandErrorText; + res.Error = GameActions::Status::Unknown; + res.ErrorMessage = gGameCommandErrorText; return res; } diff --git a/src/openrct2/actions/RideSetStatusAction.h b/src/openrct2/actions/RideSetStatusAction.h index 3fb79a81b7..393391992b 100644 --- a/src/openrct2/actions/RideSetStatusAction.h +++ b/src/openrct2/actions/RideSetStatusAction.h @@ -26,6 +26,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/RideSetVehicleAction.cpp b/src/openrct2/actions/RideSetVehicleAction.cpp index a82575f86b..70c5b0e91c 100644 --- a/src/openrct2/actions/RideSetVehicleAction.cpp +++ b/src/openrct2/actions/RideSetVehicleAction.cpp @@ -58,7 +58,7 @@ void RideSetVehicleAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_rideIndex) << DS_TAG(_type) << DS_TAG(_value) << DS_TAG(_colour); } -GameActions::Result::Ptr RideSetVehicleAction::Query() const +GameActions::Result RideSetVehicleAction::Query() const { if (_type >= RideSetVehicleType::Count) { @@ -70,18 +70,17 @@ GameActions::Result::Ptr RideSetVehicleAction::Query() const if (ride == nullptr) { log_warning("Invalid game command, ride_id = %u", uint32_t(_rideIndex)); - return std::make_unique(GameActions::Status::InvalidParameters, errTitle, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, errTitle, STR_NONE); } if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) { - return std::make_unique( - GameActions::Status::Broken, errTitle, STR_HAS_BROKEN_DOWN_AND_REQUIRES_FIXING); + return GameActions::Result(GameActions::Status::Broken, errTitle, STR_HAS_BROKEN_DOWN_AND_REQUIRES_FIXING); } if (ride->status != RideStatus::Closed && ride->status != RideStatus::Simulating) { - return std::make_unique(GameActions::Status::NotClosed, errTitle, STR_MUST_BE_CLOSED_FIRST); + return GameActions::Result(GameActions::Status::NotClosed, errTitle, STR_MUST_BE_CLOSED_FIRST); } switch (_type) @@ -94,13 +93,13 @@ GameActions::Result::Ptr RideSetVehicleAction::Query() const if (!ride_is_vehicle_type_valid(ride)) { log_error("Invalid vehicle type. type = %d", _value); - return std::make_unique(GameActions::Status::InvalidParameters, errTitle, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, errTitle, STR_NONE); } auto rideEntry = get_ride_entry(_value); if (rideEntry == nullptr) { log_warning("Invalid ride entry, ride->subtype = %d", ride->subtype); - return std::make_unique(GameActions::Status::InvalidParameters, errTitle, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, errTitle, STR_NONE); } // Validate preset @@ -108,27 +107,27 @@ GameActions::Result::Ptr RideSetVehicleAction::Query() const if (_colour >= presetList->count && _colour != 255 && _colour != 0) { log_error("Unknown vehicle colour preset. colour = %d", _colour); - return std::make_unique(GameActions::Status::InvalidParameters, errTitle, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, errTitle, STR_NONE); } break; } default: log_error("Unknown vehicle command. type = %d", _type); - return std::make_unique(GameActions::Status::InvalidParameters, errTitle, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, errTitle, STR_NONE); } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr RideSetVehicleAction::Execute() const +GameActions::Result RideSetVehicleAction::Execute() const { auto errTitle = SetVehicleTypeErrorTitle[EnumValue(_type)]; auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid game command, ride_id = %u", uint32_t(_rideIndex)); - return std::make_unique(GameActions::Status::InvalidParameters, errTitle, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, errTitle, STR_NONE); } switch (_type) @@ -151,7 +150,7 @@ GameActions::Result::Ptr RideSetVehicleAction::Execute() const if (rideEntry == nullptr) { log_warning("Invalid ride entry, ride->subtype = %d", ride->subtype); - return std::make_unique(GameActions::Status::InvalidParameters, errTitle, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, errTitle, STR_NONE); } auto clampValue = _value; if (!gCheatsDisableTrainLengthLimit) @@ -173,7 +172,7 @@ GameActions::Result::Ptr RideSetVehicleAction::Execute() const if (rideEntry == nullptr) { log_warning("Invalid ride entry, ride->subtype = %d", ride->subtype); - return std::make_unique(GameActions::Status::InvalidParameters, errTitle, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, errTitle, STR_NONE); } ride_set_vehicle_colours_to_random_preset(ride, _colour); @@ -187,17 +186,17 @@ GameActions::Result::Ptr RideSetVehicleAction::Execute() const default: log_error("Unknown vehicle command. type = %d", _type); - return std::make_unique(GameActions::Status::InvalidParameters, errTitle, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, errTitle, STR_NONE); } ride->num_circuits = 1; ride->UpdateMaxVehicles(); - auto res = std::make_unique(); + auto res = GameActions::Result(); if (!ride->overall_view.IsNull()) { auto location = ride->overall_view.ToTileCentre(); - res->Position = { location, tile_element_height(res->Position) }; + res.Position = { location, tile_element_height(res.Position) }; } auto intent = Intent(INTENT_ACTION_RIDE_PAINT_RESET_VEHICLE); diff --git a/src/openrct2/actions/RideSetVehicleAction.h b/src/openrct2/actions/RideSetVehicleAction.h index 61efcf4a2f..f96a32c886 100644 --- a/src/openrct2/actions/RideSetVehicleAction.h +++ b/src/openrct2/actions/RideSetVehicleAction.h @@ -36,8 +36,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: bool ride_is_vehicle_type_valid(Ride* ride) const; diff --git a/src/openrct2/actions/ScenarioSetSettingAction.cpp b/src/openrct2/actions/ScenarioSetSettingAction.cpp index 3e6b81f732..e136356dc2 100644 --- a/src/openrct2/actions/ScenarioSetSettingAction.cpp +++ b/src/openrct2/actions/ScenarioSetSettingAction.cpp @@ -26,18 +26,18 @@ void ScenarioSetSettingAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_setting) << DS_TAG(_value); } -GameActions::Result::Ptr ScenarioSetSettingAction::Query() const +GameActions::Result ScenarioSetSettingAction::Query() const { if (_setting >= ScenarioSetSetting::Count) { log_error("Invalid setting: %u", _setting); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - return MakeResult(); + return GameActions::Result(); } -GameActions::Result::Ptr ScenarioSetSettingAction::Execute() const +GameActions::Result ScenarioSetSettingAction::Execute() const { switch (_setting) { @@ -242,8 +242,8 @@ GameActions::Result::Ptr ScenarioSetSettingAction::Execute() const break; default: log_error("Invalid setting: %u", _setting); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } window_invalidate_by_class(WC_EDITOR_SCENARIO_OPTIONS); - return MakeResult(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/ScenarioSetSettingAction.h b/src/openrct2/actions/ScenarioSetSettingAction.h index 324f3a2601..a21b591fb7 100644 --- a/src/openrct2/actions/ScenarioSetSettingAction.h +++ b/src/openrct2/actions/ScenarioSetSettingAction.h @@ -58,6 +58,6 @@ public: } void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/SetCheatAction.cpp b/src/openrct2/actions/SetCheatAction.cpp index 6685325d60..cb0eb2a94b 100644 --- a/src/openrct2/actions/SetCheatAction.cpp +++ b/src/openrct2/actions/SetCheatAction.cpp @@ -65,28 +65,28 @@ void SetCheatAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_cheatType) << DS_TAG(_param1) << DS_TAG(_param2); } -GameActions::Result::Ptr SetCheatAction::Query() const +GameActions::Result SetCheatAction::Query() const { if (static_cast(_cheatType) >= static_cast(CheatType::Count)) { - MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } ParametersRange validRange = GetParameterRange(static_cast(_cheatType.id)); if (_param1 < validRange.first.first || _param1 > validRange.first.second) { - MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } if (_param2 < validRange.second.first || _param2 > validRange.second.second) { - MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - return MakeResult(); + return GameActions::Result(); } -GameActions::Result::Ptr SetCheatAction::Execute() const +GameActions::Result SetCheatAction::Execute() const { switch (static_cast(_cheatType.id)) { @@ -243,7 +243,7 @@ GameActions::Result::Ptr SetCheatAction::Execute() const default: { log_error("Unabled cheat: %d", _cheatType.id); - MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } break; } @@ -254,7 +254,7 @@ GameActions::Result::Ptr SetCheatAction::Execute() const } window_invalidate_by_class(WC_CHEATS); - return MakeResult(); + return GameActions::Result(); } ParametersRange SetCheatAction::GetParameterRange(CheatType cheatType) const diff --git a/src/openrct2/actions/SetCheatAction.h b/src/openrct2/actions/SetCheatAction.h index e58ac644bd..81843be1ad 100644 --- a/src/openrct2/actions/SetCheatAction.h +++ b/src/openrct2/actions/SetCheatAction.h @@ -29,8 +29,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: ParametersRange GetParameterRange(CheatType cheatType) const; diff --git a/src/openrct2/actions/SetParkEntranceFeeAction.cpp b/src/openrct2/actions/SetParkEntranceFeeAction.cpp index 807e2b04ba..685f83f670 100644 --- a/src/openrct2/actions/SetParkEntranceFeeAction.cpp +++ b/src/openrct2/actions/SetParkEntranceFeeAction.cpp @@ -37,24 +37,24 @@ void SetParkEntranceFeeAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_fee); } -GameActions::Result::Ptr SetParkEntranceFeeAction::Query() const +GameActions::Result SetParkEntranceFeeAction::Query() const { bool noMoney = (gParkFlags & PARK_FLAGS_NO_MONEY) != 0; bool forceFreeEntry = !park_entry_price_unlocked(); if (noMoney || forceFreeEntry) { - return std::make_unique(GameActions::Status::Disallowed, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Disallowed, STR_NONE, STR_NONE); } if (_fee < MONEY_FREE || _fee > MAX_ENTRANCE_FEE) { - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr SetParkEntranceFeeAction::Execute() const +GameActions::Result SetParkEntranceFeeAction::Execute() const { gParkEntranceFee = _fee; window_invalidate_by_class(WC_PARK_INFORMATION); - return std::make_unique(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/SetParkEntranceFeeAction.h b/src/openrct2/actions/SetParkEntranceFeeAction.h index f319554d8c..2726865504 100644 --- a/src/openrct2/actions/SetParkEntranceFeeAction.h +++ b/src/openrct2/actions/SetParkEntranceFeeAction.h @@ -25,6 +25,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/SignSetNameAction.cpp b/src/openrct2/actions/SignSetNameAction.cpp index 92b9145ab7..6534391923 100644 --- a/src/openrct2/actions/SignSetNameAction.cpp +++ b/src/openrct2/actions/SignSetNameAction.cpp @@ -43,24 +43,24 @@ void SignSetNameAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_bannerIndex) << DS_TAG(_name); } -GameActions::Result::Ptr SignSetNameAction::Query() const +GameActions::Result SignSetNameAction::Query() const { auto banner = GetBanner(_bannerIndex); if (banner == nullptr) { log_warning("Invalid game command for setting sign name, banner id = %d", _bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_RENAME_SIGN, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_RENAME_SIGN, STR_NONE); } - return MakeResult(); + return GameActions::Result(); } -GameActions::Result::Ptr SignSetNameAction::Execute() const +GameActions::Result SignSetNameAction::Execute() const { auto banner = GetBanner(_bannerIndex); if (banner == nullptr) { log_warning("Invalid game command for setting sign name, banner id = %d", _bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_RENAME_SIGN, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_RENAME_SIGN, STR_NONE); } if (!_name.empty()) @@ -89,5 +89,5 @@ GameActions::Result::Ptr SignSetNameAction::Execute() const scrolling_text_invalidate(); gfx_invalidate_screen(); - return MakeResult(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/SignSetNameAction.h b/src/openrct2/actions/SignSetNameAction.h index b351c86750..4d69ceeffe 100644 --- a/src/openrct2/actions/SignSetNameAction.h +++ b/src/openrct2/actions/SignSetNameAction.h @@ -26,6 +26,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/SignSetStyleAction.cpp b/src/openrct2/actions/SignSetStyleAction.cpp index 7f36bcee82..40d4626a4a 100644 --- a/src/openrct2/actions/SignSetStyleAction.cpp +++ b/src/openrct2/actions/SignSetStyleAction.cpp @@ -37,13 +37,13 @@ void SignSetStyleAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_bannerIndex) << DS_TAG(_mainColour) << DS_TAG(_textColour) << DS_TAG(_isLarge); } -GameActions::Result::Ptr SignSetStyleAction::Query() const +GameActions::Result SignSetStyleAction::Query() const { auto banner = GetBanner(_bannerIndex); if (banner == nullptr) { log_error("Invalid banner id. id = ", _bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } if (_isLarge) @@ -52,12 +52,12 @@ GameActions::Result::Ptr SignSetStyleAction::Query() const if (tileElement == nullptr) { log_warning("Invalid game command for setting sign style, banner id '%d' not found", _bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } if (tileElement->GetType() != TILE_ELEMENT_TYPE_LARGE_SCENERY) { log_warning("Invalid game command for setting sign style, banner id '%d' is not large", _bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } } else @@ -67,20 +67,20 @@ GameActions::Result::Ptr SignSetStyleAction::Query() const if (wallElement == nullptr) { log_warning("Invalid game command for setting sign style, banner id '%d' not found", _bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } } - return MakeResult(); + return GameActions::Result(); } -GameActions::Result::Ptr SignSetStyleAction::Execute() const +GameActions::Result SignSetStyleAction::Execute() const { auto banner = GetBanner(_bannerIndex); if (banner == nullptr) { log_error("Invalid banner id. id = ", _bannerIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } CoordsXY coords = banner->position.ToCoordsXY(); @@ -92,7 +92,7 @@ GameActions::Result::Ptr SignSetStyleAction::Execute() const { coords, tileElement->GetBaseZ(), tileElement->GetDirection() }, tileElement->AsLargeScenery()->GetSequenceIndex(), _mainColour, _textColour)) { - return MakeResult(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); } } else @@ -108,5 +108,5 @@ GameActions::Result::Ptr SignSetStyleAction::Execute() const intent.putExtra(INTENT_EXTRA_BANNER_INDEX, _bannerIndex); context_broadcast_intent(&intent); - return MakeResult(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/SignSetStyleAction.h b/src/openrct2/actions/SignSetStyleAction.h index 33eeab5ff4..246ce8d23b 100644 --- a/src/openrct2/actions/SignSetStyleAction.h +++ b/src/openrct2/actions/SignSetStyleAction.h @@ -26,6 +26,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/SmallSceneryPlaceAction.cpp b/src/openrct2/actions/SmallSceneryPlaceAction.cpp index bc6dfec98e..30ce122e4f 100644 --- a/src/openrct2/actions/SmallSceneryPlaceAction.cpp +++ b/src/openrct2/actions/SmallSceneryPlaceAction.cpp @@ -64,7 +64,7 @@ void SmallSceneryPlaceAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_quadrant) << DS_TAG(_sceneryType) << DS_TAG(_primaryColour) << DS_TAG(_secondaryColour); } -GameActions::Result::Ptr SmallSceneryPlaceAction::Query() const +GameActions::Result SmallSceneryPlaceAction::Query() const { bool isOnWater = false; bool supportsRequired = false; @@ -81,36 +81,37 @@ GameActions::Result::Ptr SmallSceneryPlaceAction::Query() const { surfaceHeight = waterHeight; } - auto res = MakeResult(); + auto res = GameActions::Result(); auto centre = _loc.ToTileCentre(); - res->Position.x = centre.x; - res->Position.y = centre.y; - res->Position.z = surfaceHeight; + res.Position.x = centre.x; + res.Position.y = centre.y; + res.Position.z = surfaceHeight; if (_loc.z != 0) { surfaceHeight = _loc.z; - res->Position.z = surfaceHeight; + res.Position.z = surfaceHeight; } if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } if (!MapCheckCapacityAndReorganise(_loc)) { - return MakeResult(GameActions::Status::NoFreeElements, STR_CANT_POSITION_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); + return GameActions::Result( + GameActions::Status::NoFreeElements, STR_CANT_POSITION_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); } if (!_trackDesignDrawingPreview && (_loc.x > GetMapSizeMaxXY() || _loc.y > GetMapSizeMaxXY())) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } auto* sceneryEntry = get_small_scenery_entry(_sceneryType); if (sceneryEntry == nullptr) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } auto quadrant = _quadrant; @@ -157,7 +158,7 @@ GameActions::Result::Ptr SmallSceneryPlaceAction::Query() const if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && !gCheatsSandboxMode && !map_is_location_owned({ _loc.x, _loc.y, targetHeight })) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_POSITION_THIS_HERE, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_CANT_POSITION_THIS_HERE, STR_LAND_NOT_OWNED_BY_PARK); } auto* surfaceElement = map_get_surface_element_at(_loc); @@ -167,7 +168,8 @@ GameActions::Result::Ptr SmallSceneryPlaceAction::Query() const int32_t water_height = surfaceElement->GetWaterHeight() - 1; if (water_height > targetHeight) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_CANT_BUILD_THIS_UNDERWATER); + return GameActions::Result( + GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_CANT_BUILD_THIS_UNDERWATER); } } @@ -175,14 +177,15 @@ GameActions::Result::Ptr SmallSceneryPlaceAction::Query() const { if (isOnWater) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ON_LAND); + return GameActions::Result( + GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ON_LAND); } if (surfaceElement != nullptr && surfaceElement->GetWaterHeight() > 0) { if (surfaceElement->GetWaterHeight() > targetHeight) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ON_LAND); } } @@ -191,7 +194,7 @@ GameActions::Result::Ptr SmallSceneryPlaceAction::Query() const if (!gCheatsDisableClearanceChecks && (sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_REQUIRE_FLAT_SURFACE)) && !supportsRequired && !isOnWater && surfaceElement != nullptr && (surfaceElement->GetSlope() != TILE_ELEMENT_SLOPE_FLAT)) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_LEVEL_LAND_REQUIRED); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_LEVEL_LAND_REQUIRED); } if (!gCheatsDisableSupportLimits && !(sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_STACKABLE)) && supportsRequired) @@ -202,13 +205,15 @@ GameActions::Result::Ptr SmallSceneryPlaceAction::Query() const { if (surfaceElement->GetWaterHeight() > 0 || (surfaceElement->GetBaseZ()) != targetHeight) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_LEVEL_LAND_REQUIRED); + return GameActions::Result( + GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_LEVEL_LAND_REQUIRED); } } } else { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ON_LAND); + return GameActions::Result( + GameActions::Status::Disallowed, STR_CANT_POSITION_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ON_LAND); } } @@ -252,23 +257,23 @@ GameActions::Result::Ptr SmallSceneryPlaceAction::Query() const const auto isTree = sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE); auto canBuild = MapCanConstructWithClearAt( { _loc, zLow, zHigh }, &map_place_scenery_clear_func, quarterTile, GetFlags(), CREATE_CROSSING_MODE_NONE, isTree); - if (canBuild->Error != GameActions::Status::Ok) + if (canBuild.Error != GameActions::Status::Ok) { - canBuild->ErrorTitle = STR_CANT_POSITION_THIS_HERE; + canBuild.ErrorTitle = STR_CANT_POSITION_THIS_HERE; return canBuild; } - const auto clearanceData = canBuild->GetData(); + const auto clearanceData = canBuild.GetData(); const uint8_t groundFlags = clearanceData.GroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND); - res->SetData(SmallSceneryPlaceActionResult{ groundFlags, 0, 0 }); + res.SetData(SmallSceneryPlaceActionResult{ groundFlags, 0, 0 }); - res->Expenditure = ExpenditureType::Landscaping; - res->Cost = (sceneryEntry->price * 10) + canBuild->Cost; + res.Expenditure = ExpenditureType::Landscaping; + res.Cost = (sceneryEntry->price * 10) + canBuild.Cost; return res; } -GameActions::Result::Ptr SmallSceneryPlaceAction::Execute() const +GameActions::Result SmallSceneryPlaceAction::Execute() const { bool supportsRequired = false; if (_loc.z != 0) @@ -284,21 +289,21 @@ GameActions::Result::Ptr SmallSceneryPlaceAction::Execute() const { surfaceHeight = waterHeight; } - auto res = MakeResult(); + auto res = GameActions::Result(); auto centre = _loc.ToTileCentre(); - res->Position.x = centre.x; - res->Position.y = centre.y; - res->Position.z = surfaceHeight; + res.Position.x = centre.x; + res.Position.y = centre.y; + res.Position.z = surfaceHeight; if (_loc.z != 0) { surfaceHeight = _loc.z; - res->Position.z = surfaceHeight; + res.Position.z = surfaceHeight; } auto* sceneryEntry = get_small_scenery_entry(_sceneryType); if (sceneryEntry == nullptr) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_NONE); } auto quadrant = _quadrant; @@ -390,20 +395,21 @@ GameActions::Result::Ptr SmallSceneryPlaceAction::Execute() const auto canBuild = MapCanConstructWithClearAt( { _loc, zLow, zHigh }, &map_place_scenery_clear_func, quarterTile, GetFlags() | GAME_COMMAND_FLAG_APPLY, CREATE_CROSSING_MODE_NONE, isTree); - if (canBuild->Error != GameActions::Status::Ok) + if (canBuild.Error != GameActions::Status::Ok) { - canBuild->ErrorTitle = STR_CANT_POSITION_THIS_HERE; + canBuild.ErrorTitle = STR_CANT_POSITION_THIS_HERE; return canBuild; } - res->Expenditure = ExpenditureType::Landscaping; - res->Cost = (sceneryEntry->price * 10) + canBuild->Cost; + res.Expenditure = ExpenditureType::Landscaping; + res.Cost = (sceneryEntry->price * 10) + canBuild.Cost; auto* sceneryElement = TileElementInsert( CoordsXYZ{ _loc, zLow }, quarterTile.GetBaseQuarterOccupied()); if (sceneryElement == nullptr) { - return MakeResult(GameActions::Status::NoFreeElements, STR_CANT_POSITION_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); + return GameActions::Result( + GameActions::Status::NoFreeElements, STR_CANT_POSITION_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); } sceneryElement->SetDirection(_loc.direction); @@ -419,10 +425,9 @@ GameActions::Result::Ptr SmallSceneryPlaceAction::Execute() const sceneryElement->SetNeedsSupports(); } - const auto clearanceData = canBuild->GetData(); + const auto clearanceData = canBuild.GetData(); const uint8_t groundFlags = clearanceData.GroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND); - res->SetData( - SmallSceneryPlaceActionResult{ groundFlags, sceneryElement->GetBaseZ(), sceneryElement->GetSceneryQuadrant() }); + res.SetData(SmallSceneryPlaceActionResult{ groundFlags, sceneryElement->GetBaseZ(), sceneryElement->GetSceneryQuadrant() }); map_invalidate_tile_full(_loc); if (sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_ANIMATED)) diff --git a/src/openrct2/actions/SmallSceneryPlaceAction.h b/src/openrct2/actions/SmallSceneryPlaceAction.h index 78f9823845..2e40f4fe58 100644 --- a/src/openrct2/actions/SmallSceneryPlaceAction.h +++ b/src/openrct2/actions/SmallSceneryPlaceAction.h @@ -39,6 +39,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/SmallSceneryRemoveAction.cpp b/src/openrct2/actions/SmallSceneryRemoveAction.cpp index f145ca596f..358cb19634 100644 --- a/src/openrct2/actions/SmallSceneryRemoveAction.cpp +++ b/src/openrct2/actions/SmallSceneryRemoveAction.cpp @@ -52,24 +52,25 @@ void SmallSceneryRemoveAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_quadrant) << DS_TAG(_sceneryType); } -GameActions::Result::Ptr SmallSceneryRemoveAction::Query() const +GameActions::Result SmallSceneryRemoveAction::Query() const { - GameActions::Result::Ptr res = std::make_unique(); + GameActions::Result res = GameActions::Result(); if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); } auto* entry = get_small_scenery_entry(_sceneryType); if (entry == nullptr) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); } - res->Cost = entry->removal_price * 10; - res->Expenditure = ExpenditureType::Landscaping; - res->Position = _loc; + res.Cost = entry->removal_price * 10; + res.Expenditure = ExpenditureType::Landscaping; + res.Position = _loc; if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && !(GetFlags() & GAME_COMMAND_FLAG_GHOST) && !gCheatsSandboxMode) { @@ -78,9 +79,9 @@ GameActions::Result::Ptr SmallSceneryRemoveAction::Query() const { if (entry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE)) { - res->Error = GameActions::Status::NoClearance; - res->ErrorTitle = STR_CANT_REMOVE_THIS; - res->ErrorMessage = STR_FORBIDDEN_BY_THE_LOCAL_AUTHORITY; + res.Error = GameActions::Status::NoClearance; + res.ErrorTitle = STR_CANT_REMOVE_THIS; + res.ErrorMessage = STR_FORBIDDEN_BY_THE_LOCAL_AUTHORITY; return res; } } @@ -88,9 +89,9 @@ GameActions::Result::Ptr SmallSceneryRemoveAction::Query() const // Check if the land is owned if (!map_is_location_owned(_loc)) { - res->Error = GameActions::Status::NoClearance; - res->ErrorTitle = STR_CANT_REMOVE_THIS; - res->ErrorMessage = STR_LAND_NOT_OWNED_BY_PARK; + res.Error = GameActions::Status::NoClearance; + res.ErrorTitle = STR_CANT_REMOVE_THIS; + res.ErrorMessage = STR_LAND_NOT_OWNED_BY_PARK; return res; } } @@ -98,33 +99,36 @@ GameActions::Result::Ptr SmallSceneryRemoveAction::Query() const TileElement* tileElement = FindSceneryElement(); if (tileElement == nullptr) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); } return res; } -GameActions::Result::Ptr SmallSceneryRemoveAction::Execute() const +GameActions::Result SmallSceneryRemoveAction::Execute() const { - GameActions::Result::Ptr res = std::make_unique(); + GameActions::Result res = GameActions::Result(); auto* entry = get_small_scenery_entry(_sceneryType); if (entry == nullptr) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); } - res->Cost = entry->removal_price * 10; - res->Expenditure = ExpenditureType::Landscaping; - res->Position = _loc; + res.Cost = entry->removal_price * 10; + res.Expenditure = ExpenditureType::Landscaping; + res.Position = _loc; TileElement* tileElement = FindSceneryElement(); if (tileElement == nullptr) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); } - res->Position.z = tile_element_height(res->Position); + res.Position.z = tile_element_height(res.Position); map_invalidate_tile_full(_loc); tile_element_remove(tileElement); diff --git a/src/openrct2/actions/SmallSceneryRemoveAction.h b/src/openrct2/actions/SmallSceneryRemoveAction.h index 816dde28db..c57ac70da9 100644 --- a/src/openrct2/actions/SmallSceneryRemoveAction.h +++ b/src/openrct2/actions/SmallSceneryRemoveAction.h @@ -28,8 +28,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: TileElement* FindSceneryElement() const; diff --git a/src/openrct2/actions/SmallScenerySetColourAction.cpp b/src/openrct2/actions/SmallScenerySetColourAction.cpp index d947600f78..cafd2e53ef 100644 --- a/src/openrct2/actions/SmallScenerySetColourAction.cpp +++ b/src/openrct2/actions/SmallScenerySetColourAction.cpp @@ -47,35 +47,35 @@ void SmallScenerySetColourAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_quadrant) << DS_TAG(_sceneryType) << DS_TAG(_primaryColour) << DS_TAG(_secondaryColour); } -GameActions::Result::Ptr SmallScenerySetColourAction::Query() const +GameActions::Result SmallScenerySetColourAction::Query() const { return QueryExecute(false); } -GameActions::Result::Ptr SmallScenerySetColourAction::Execute() const +GameActions::Result SmallScenerySetColourAction::Execute() const { return QueryExecute(true); } -GameActions::Result::Ptr SmallScenerySetColourAction::QueryExecute(bool isExecuting) const +GameActions::Result SmallScenerySetColourAction::QueryExecute(bool isExecuting) const { - auto res = MakeResult(); - res->Expenditure = ExpenditureType::Landscaping; - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = _loc.z; - res->ErrorTitle = STR_CANT_REPAINT_THIS; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::Landscaping; + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = _loc.z; + res.ErrorTitle = STR_CANT_REPAINT_THIS; if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_REPAINT_THIS, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_CANT_REPAINT_THIS, STR_LAND_NOT_OWNED_BY_PARK); } if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && !gCheatsSandboxMode) { if (!map_is_location_owned(_loc)) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_REPAINT_THIS, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_CANT_REPAINT_THIS, STR_LAND_NOT_OWNED_BY_PARK); } } @@ -84,7 +84,7 @@ GameActions::Result::Ptr SmallScenerySetColourAction::QueryExecute(bool isExecut if (sceneryElement == nullptr) { log_error("Small scenery not found at: x = %d, y = %d, z = %d", _loc.x, _loc.y, _loc.z); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } if ((GetFlags() & GAME_COMMAND_FLAG_GHOST) && !(sceneryElement->IsGhost())) diff --git a/src/openrct2/actions/SmallScenerySetColourAction.h b/src/openrct2/actions/SmallScenerySetColourAction.h index 73998d3bbb..8f7a9924c7 100644 --- a/src/openrct2/actions/SmallScenerySetColourAction.h +++ b/src/openrct2/actions/SmallScenerySetColourAction.h @@ -28,9 +28,9 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr QueryExecute(bool isExecuting) const; + GameActions::Result QueryExecute(bool isExecuting) const; }; diff --git a/src/openrct2/actions/StaffFireAction.cpp b/src/openrct2/actions/StaffFireAction.cpp index d0d3917f27..8d8114a0f3 100644 --- a/src/openrct2/actions/StaffFireAction.cpp +++ b/src/openrct2/actions/StaffFireAction.cpp @@ -29,35 +29,35 @@ void StaffFireAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_spriteId); } -GameActions::Result::Ptr StaffFireAction::Query() const +GameActions::Result StaffFireAction::Query() const { if (_spriteId >= MAX_ENTITIES) { log_error("Invalid spriteId. spriteId = %u", _spriteId); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } auto staff = TryGetEntity(_spriteId); if (staff == nullptr) { log_error("Invalid spriteId. spriteId = %u", _spriteId); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - return MakeResult(); + return GameActions::Result(); } -GameActions::Result::Ptr StaffFireAction::Execute() const +GameActions::Result StaffFireAction::Execute() const { auto staff = TryGetEntity(_spriteId); if (staff == nullptr) { log_error("Invalid spriteId. spriteId = %u", _spriteId); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } window_close_by_class(WC_FIRE_PROMPT); peep_sprite_remove(staff); // Due to patrol areas best to invalidate the whole screen on removal of staff gfx_invalidate_screen(); - return MakeResult(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/StaffFireAction.h b/src/openrct2/actions/StaffFireAction.h index 9776fc9c93..7caebf323e 100644 --- a/src/openrct2/actions/StaffFireAction.h +++ b/src/openrct2/actions/StaffFireAction.h @@ -23,6 +23,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/StaffHireNewAction.cpp b/src/openrct2/actions/StaffHireNewAction.cpp index a6957bb12a..82e79b1f05 100644 --- a/src/openrct2/actions/StaffHireNewAction.cpp +++ b/src/openrct2/actions/StaffHireNewAction.cpp @@ -63,32 +63,32 @@ void StaffHireNewAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_autoPosition) << DS_TAG(_staffType) << DS_TAG(_entertainerType) << DS_TAG(_staffOrders); } -GameActions::Result::Ptr StaffHireNewAction::Query() const +GameActions::Result StaffHireNewAction::Query() const { return QueryExecute(false); } -GameActions::Result::Ptr StaffHireNewAction::Execute() const +GameActions::Result StaffHireNewAction::Execute() const { return QueryExecute(true); } -GameActions::Result::Ptr StaffHireNewAction::QueryExecute(bool execute) const +GameActions::Result StaffHireNewAction::QueryExecute(bool execute) const { - auto res = MakeResult(); - res->Expenditure = ExpenditureType::Wages; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::Wages; if (_staffType >= static_cast(StaffType::Count)) { // Invalid staff type. log_error("Tried to use invalid staff type: %u", static_cast(_staffType)); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_HIRE_NEW_STAFF, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_HIRE_NEW_STAFF, STR_NONE); } if (GetNumFreeEntities() < 400) { - return MakeResult(GameActions::Status::NoFreeElements, STR_CANT_HIRE_NEW_STAFF, STR_TOO_MANY_PEOPLE_IN_GAME); + return GameActions::Result(GameActions::Status::NoFreeElements, STR_CANT_HIRE_NEW_STAFF, STR_TOO_MANY_PEOPLE_IN_GAME); } if (_staffType == static_cast(StaffType::Entertainer)) @@ -98,7 +98,7 @@ GameActions::Result::Ptr StaffHireNewAction::QueryExecute(bool execute) const // Invalid entertainer costume log_error("Tried to use invalid entertainer type: %u", static_cast(_entertainerType)); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_HIRE_NEW_STAFF, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_HIRE_NEW_STAFF, STR_NONE); } uint32_t availableCostumes = staff_get_available_entertainer_costumes(); @@ -107,7 +107,7 @@ GameActions::Result::Ptr StaffHireNewAction::QueryExecute(bool execute) const // Entertainer costume unavailable log_error("Tried to use unavailable entertainer type: %u", static_cast(_entertainerType)); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_HIRE_NEW_STAFF, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_HIRE_NEW_STAFF, STR_NONE); } } @@ -115,7 +115,7 @@ GameActions::Result::Ptr StaffHireNewAction::QueryExecute(bool execute) const if (newPeep == nullptr) { // Too many peeps exist already. - return MakeResult(GameActions::Status::NoFreeElements, STR_CANT_HIRE_NEW_STAFF, STR_TOO_MANY_PEOPLE_IN_GAME); + return GameActions::Result(GameActions::Status::NoFreeElements, STR_CANT_HIRE_NEW_STAFF, STR_TOO_MANY_PEOPLE_IN_GAME); } if (execute == false) @@ -123,7 +123,7 @@ GameActions::Result::Ptr StaffHireNewAction::QueryExecute(bool execute) const // In query we just want to see if we can obtain a sprite slot. sprite_remove(newPeep); - res->SetData(StaffHireNewActionResult{ SPRITE_INDEX_NULL }); + res.SetData(StaffHireNewActionResult{ SPRITE_INDEX_NULL }); } else { @@ -210,7 +210,7 @@ GameActions::Result::Ptr StaffHireNewAction::QueryExecute(bool execute) const newPeep->PatrolInfo = nullptr; - res->SetData(StaffHireNewActionResult{ newPeep->sprite_index }); + res.SetData(StaffHireNewActionResult{ newPeep->sprite_index }); } return res; diff --git a/src/openrct2/actions/StaffHireNewAction.h b/src/openrct2/actions/StaffHireNewAction.h index 3351cc13e9..8fadf47f8f 100644 --- a/src/openrct2/actions/StaffHireNewAction.h +++ b/src/openrct2/actions/StaffHireNewAction.h @@ -34,10 +34,10 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr QueryExecute(bool execute) const; + GameActions::Result QueryExecute(bool execute) const; void AutoPositionNewStaff(Peep* newPeep) const; }; diff --git a/src/openrct2/actions/StaffSetColourAction.cpp b/src/openrct2/actions/StaffSetColourAction.cpp index e4ef8ad7c6..6e85c50953 100644 --- a/src/openrct2/actions/StaffSetColourAction.cpp +++ b/src/openrct2/actions/StaffSetColourAction.cpp @@ -36,22 +36,22 @@ void StaffSetColourAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_staffType) << DS_TAG(_colour); } -GameActions::Result::Ptr StaffSetColourAction::Query() const +GameActions::Result StaffSetColourAction::Query() const { auto staffType = static_cast(_staffType); if (staffType != StaffType::Handyman && staffType != StaffType::Mechanic && staffType != StaffType::Security) { - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - return MakeResult(); + return GameActions::Result(); } -GameActions::Result::Ptr StaffSetColourAction::Execute() const +GameActions::Result StaffSetColourAction::Execute() const { // Update global uniform colour property if (!staff_set_colour(static_cast(_staffType), _colour)) { - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } // Update each staff member's uniform @@ -65,5 +65,5 @@ GameActions::Result::Ptr StaffSetColourAction::Execute() const } gfx_invalidate_screen(); - return MakeResult(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/StaffSetColourAction.h b/src/openrct2/actions/StaffSetColourAction.h index 80020c8e6a..a8542d4f1c 100644 --- a/src/openrct2/actions/StaffSetColourAction.h +++ b/src/openrct2/actions/StaffSetColourAction.h @@ -24,6 +24,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/StaffSetCostumeAction.cpp b/src/openrct2/actions/StaffSetCostumeAction.cpp index eb3a09ac7e..4b04ee99e6 100644 --- a/src/openrct2/actions/StaffSetCostumeAction.cpp +++ b/src/openrct2/actions/StaffSetCostumeAction.cpp @@ -54,36 +54,36 @@ void StaffSetCostumeAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_spriteIndex) << DS_TAG(_costume); } -GameActions::Result::Ptr StaffSetCostumeAction::Query() const +GameActions::Result StaffSetCostumeAction::Query() const { if (_spriteIndex >= MAX_ENTITIES) { - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } auto* staff = TryGetEntity(_spriteIndex); if (staff == nullptr) { log_warning("Invalid game command for sprite %u", _spriteIndex); - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } auto spriteType = EntertainerCostumeToSprite(_costume); if (EnumValue(spriteType) > std::size(peep_slow_walking_types)) { log_warning("Invalid game command for sprite %u", _spriteIndex); - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr StaffSetCostumeAction::Execute() const +GameActions::Result StaffSetCostumeAction::Execute() const { auto* staff = TryGetEntity(_spriteIndex); if (staff == nullptr) { log_warning("Invalid game command for sprite %u", _spriteIndex); - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } auto spriteType = EntertainerCostumeToSprite(_costume); @@ -101,8 +101,8 @@ GameActions::Result::Ptr StaffSetCostumeAction::Execute() const auto intent = Intent(INTENT_ACTION_REFRESH_STAFF_LIST); context_broadcast_intent(&intent); - auto res = std::make_unique(); - res->Position = staff->GetLocation(); + auto res = GameActions::Result(); + res.Position = staff->GetLocation(); return res; } diff --git a/src/openrct2/actions/StaffSetCostumeAction.h b/src/openrct2/actions/StaffSetCostumeAction.h index 1e1ecd4b3a..061f6457dd 100644 --- a/src/openrct2/actions/StaffSetCostumeAction.h +++ b/src/openrct2/actions/StaffSetCostumeAction.h @@ -25,6 +25,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/StaffSetNameAction.cpp b/src/openrct2/actions/StaffSetNameAction.cpp index 2adf8554ca..5888381583 100644 --- a/src/openrct2/actions/StaffSetNameAction.cpp +++ b/src/openrct2/actions/StaffSetNameAction.cpp @@ -39,44 +39,41 @@ void StaffSetNameAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_spriteIndex) << DS_TAG(_name); } -GameActions::Result::Ptr StaffSetNameAction::Query() const +GameActions::Result StaffSetNameAction::Query() const { if (_spriteIndex >= MAX_ENTITIES) { - return std::make_unique( - GameActions::Status::InvalidParameters, STR_STAFF_ERROR_CANT_NAME_STAFF_MEMBER, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_STAFF_ERROR_CANT_NAME_STAFF_MEMBER, STR_NONE); } auto staff = TryGetEntity(_spriteIndex); if (staff == nullptr) { log_warning("Invalid game command for sprite %u", _spriteIndex); - return std::make_unique( - GameActions::Status::InvalidParameters, STR_STAFF_ERROR_CANT_NAME_STAFF_MEMBER, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_STAFF_ERROR_CANT_NAME_STAFF_MEMBER, STR_NONE); } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr StaffSetNameAction::Execute() const +GameActions::Result StaffSetNameAction::Execute() const { auto staff = TryGetEntity(_spriteIndex); if (staff == nullptr) { log_warning("Invalid game command for sprite %u", _spriteIndex); - return std::make_unique( - GameActions::Status::InvalidParameters, STR_STAFF_ERROR_CANT_NAME_STAFF_MEMBER, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_STAFF_ERROR_CANT_NAME_STAFF_MEMBER, STR_NONE); } auto curName = staff->GetName(); if (curName == _name) { - return std::make_unique(); + return GameActions::Result(); } if (!staff->SetName(_name)) { - return std::make_unique(GameActions::Status::Unknown, STR_CANT_NAME_GUEST, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_NAME_GUEST, STR_NONE); } gfx_invalidate_screen(); @@ -84,8 +81,8 @@ GameActions::Result::Ptr StaffSetNameAction::Execute() const auto intent = Intent(INTENT_ACTION_REFRESH_STAFF_LIST); context_broadcast_intent(&intent); - auto res = std::make_unique(); - res->Position = staff->GetLocation(); + auto res = GameActions::Result(); + res.Position = staff->GetLocation(); return res; } diff --git a/src/openrct2/actions/StaffSetNameAction.h b/src/openrct2/actions/StaffSetNameAction.h index bafe84d0dc..7cf8804fa6 100644 --- a/src/openrct2/actions/StaffSetNameAction.h +++ b/src/openrct2/actions/StaffSetNameAction.h @@ -23,6 +23,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/StaffSetOrdersAction.cpp b/src/openrct2/actions/StaffSetOrdersAction.cpp index deb3013ba1..4e6984910e 100644 --- a/src/openrct2/actions/StaffSetOrdersAction.cpp +++ b/src/openrct2/actions/StaffSetOrdersAction.cpp @@ -35,11 +35,11 @@ void StaffSetOrdersAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_spriteIndex) << DS_TAG(_ordersId); } -GameActions::Result::Ptr StaffSetOrdersAction::Query() const +GameActions::Result StaffSetOrdersAction::Query() const { if (_spriteIndex >= MAX_ENTITIES) { - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } auto* staff = TryGetEntity(_spriteIndex); @@ -47,19 +47,19 @@ GameActions::Result::Ptr StaffSetOrdersAction::Query() const || (staff->AssignedStaffType != StaffType::Handyman && staff->AssignedStaffType != StaffType::Mechanic)) { log_warning("Invalid game command for sprite %u", _spriteIndex); - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr StaffSetOrdersAction::Execute() const +GameActions::Result StaffSetOrdersAction::Execute() const { auto* staff = TryGetEntity(_spriteIndex); if (staff == nullptr) { log_warning("Invalid game command for sprite %u", _spriteIndex); - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } staff->StaffOrders = _ordersId; @@ -67,8 +67,8 @@ GameActions::Result::Ptr StaffSetOrdersAction::Execute() const auto intent = Intent(INTENT_ACTION_REFRESH_STAFF_LIST); context_broadcast_intent(&intent); - auto res = std::make_unique(); - res->Position = staff->GetLocation(); + auto res = GameActions::Result(); + res.Position = staff->GetLocation(); return res; } diff --git a/src/openrct2/actions/StaffSetOrdersAction.h b/src/openrct2/actions/StaffSetOrdersAction.h index 66042d30b7..078d1eb82a 100644 --- a/src/openrct2/actions/StaffSetOrdersAction.h +++ b/src/openrct2/actions/StaffSetOrdersAction.h @@ -24,6 +24,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/StaffSetPatrolAreaAction.cpp b/src/openrct2/actions/StaffSetPatrolAreaAction.cpp index 49231c99f0..fc1ab115a1 100644 --- a/src/openrct2/actions/StaffSetPatrolAreaAction.cpp +++ b/src/openrct2/actions/StaffSetPatrolAreaAction.cpp @@ -32,27 +32,27 @@ void StaffSetPatrolAreaAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_spriteId) << DS_TAG(_loc) << DS_TAG(_mode); } -GameActions::Result::Ptr StaffSetPatrolAreaAction::Query() const +GameActions::Result StaffSetPatrolAreaAction::Query() const { if (_spriteId >= MAX_ENTITIES) { log_error("Invalid spriteId. spriteId = %u", _spriteId); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } auto staff = TryGetEntity(_spriteId); if (staff == nullptr) { log_error("Invalid spriteId. spriteId = %u", _spriteId); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - return MakeResult(); + return GameActions::Result(); } static void InvalidatePatrolTile(const CoordsXY& loc) @@ -68,13 +68,13 @@ static void InvalidatePatrolTile(const CoordsXY& loc) } } -GameActions::Result::Ptr StaffSetPatrolAreaAction::Execute() const +GameActions::Result StaffSetPatrolAreaAction::Execute() const { auto staff = TryGetEntity(_spriteId); if (staff == nullptr) { log_error("Invalid spriteId. spriteId = %u", _spriteId); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } switch (_mode) @@ -99,5 +99,5 @@ GameActions::Result::Ptr StaffSetPatrolAreaAction::Execute() const staff_update_greyed_patrol_areas(); - return MakeResult(); + return GameActions::Result(); } diff --git a/src/openrct2/actions/StaffSetPatrolAreaAction.h b/src/openrct2/actions/StaffSetPatrolAreaAction.h index 654265f9b7..e18a851977 100644 --- a/src/openrct2/actions/StaffSetPatrolAreaAction.h +++ b/src/openrct2/actions/StaffSetPatrolAreaAction.h @@ -32,6 +32,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/SurfaceSetStyleAction.cpp b/src/openrct2/actions/SurfaceSetStyleAction.cpp index ed902ba9ab..0a15ea895f 100644 --- a/src/openrct2/actions/SurfaceSetStyleAction.cpp +++ b/src/openrct2/actions/SurfaceSetStyleAction.cpp @@ -33,11 +33,11 @@ void SurfaceSetStyleAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_range) << DS_TAG(_surfaceStyle) << DS_TAG(_edgeStyle); } -GameActions::Result::Ptr SurfaceSetStyleAction::Query() const +GameActions::Result SurfaceSetStyleAction::Query() const { - auto res = MakeResult(); - res->ErrorTitle = STR_CANT_CHANGE_LAND_TYPE; - res->Expenditure = ExpenditureType::Landscaping; + auto res = GameActions::Result(); + res.ErrorTitle = STR_CANT_CHANGE_LAND_TYPE; + res.Expenditure = ExpenditureType::Landscaping; auto normRange = _range.Normalise(); auto x0 = std::max(normRange.GetLeft(), 32); @@ -53,7 +53,7 @@ GameActions::Result::Ptr SurfaceSetStyleAction::Query() const if (_surfaceStyle > 0x1F) { log_error("Invalid surface style."); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_LAND_TYPE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_LAND_TYPE, STR_NONE); } const auto surfaceObj = static_cast( @@ -62,7 +62,7 @@ GameActions::Result::Ptr SurfaceSetStyleAction::Query() const if (surfaceObj == nullptr) { log_error("Invalid surface style."); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_LAND_TYPE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_LAND_TYPE, STR_NONE); } } @@ -71,7 +71,7 @@ GameActions::Result::Ptr SurfaceSetStyleAction::Query() const if (_edgeStyle > 0xF) { log_error("Invalid edge style."); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_LAND_TYPE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_LAND_TYPE, STR_NONE); } const auto edgeObj = static_cast(objManager.GetLoadedObject(ObjectType::TerrainEdge, _edgeStyle)); @@ -79,7 +79,7 @@ GameActions::Result::Ptr SurfaceSetStyleAction::Query() const if (edgeObj == nullptr) { log_error("Invalid edge style."); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_LAND_TYPE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_CHANGE_LAND_TYPE, STR_NONE); } } @@ -87,15 +87,16 @@ GameActions::Result::Ptr SurfaceSetStyleAction::Query() const auto yMid = (validRange.GetTop() + validRange.GetBottom()) / 2 + 16; auto heightMid = tile_element_height({ xMid, yMid }); - res->Position.x = xMid; - res->Position.y = yMid; - res->Position.z = heightMid; + res.Position.x = xMid; + res.Position.y = yMid; + res.Position.z = heightMid; // Do nothing if not in editor, sandbox mode or landscaping is forbidden if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && !gCheatsSandboxMode && (gParkFlags & PARK_FLAGS_FORBID_LANDSCAPE_CHANGES)) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_CHANGE_LAND_TYPE, STR_FORBIDDEN_BY_THE_LOCAL_AUTHORITY); + return GameActions::Result( + GameActions::Status::Disallowed, STR_CANT_CHANGE_LAND_TYPE, STR_FORBIDDEN_BY_THE_LOCAL_AUTHORITY); } money32 surfaceCost = 0; @@ -146,16 +147,16 @@ GameActions::Result::Ptr SurfaceSetStyleAction::Query() const } } } - res->Cost = surfaceCost + edgeCost; + res.Cost = surfaceCost + edgeCost; return res; } -GameActions::Result::Ptr SurfaceSetStyleAction::Execute() const +GameActions::Result SurfaceSetStyleAction::Execute() const { - auto res = MakeResult(); - res->ErrorTitle = STR_CANT_CHANGE_LAND_TYPE; - res->Expenditure = ExpenditureType::Landscaping; + auto res = GameActions::Result(); + res.ErrorTitle = STR_CANT_CHANGE_LAND_TYPE; + res.Expenditure = ExpenditureType::Landscaping; auto normRange = _range.Normalise(); auto x0 = std::max(normRange.GetLeft(), 32); @@ -169,9 +170,9 @@ GameActions::Result::Ptr SurfaceSetStyleAction::Execute() const auto yMid = (validRange.GetTop() + validRange.GetBottom()) / 2 + 16; auto heightMid = tile_element_height({ xMid, yMid }); - res->Position.x = xMid; - res->Position.y = yMid; - res->Position.z = heightMid; + res.Position.x = xMid; + res.Position.y = yMid; + res.Position.z = heightMid; money32 surfaceCost = 0; money32 edgeCost = 0; @@ -236,7 +237,7 @@ GameActions::Result::Ptr SurfaceSetStyleAction::Execute() const } } } - res->Cost = surfaceCost + edgeCost; + res.Cost = surfaceCost + edgeCost; return res; } diff --git a/src/openrct2/actions/SurfaceSetStyleAction.h b/src/openrct2/actions/SurfaceSetStyleAction.h index 7ce929e47f..8deabb395c 100644 --- a/src/openrct2/actions/SurfaceSetStyleAction.h +++ b/src/openrct2/actions/SurfaceSetStyleAction.h @@ -23,6 +23,6 @@ public: SurfaceSetStyleAction(MapRange range, ObjectEntryIndex surfaceStyle, ObjectEntryIndex edgeStyle); void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/TileModifyAction.cpp b/src/openrct2/actions/TileModifyAction.cpp index 636c6aa10b..655ea3e730 100644 --- a/src/openrct2/actions/TileModifyAction.cpp +++ b/src/openrct2/actions/TileModifyAction.cpp @@ -35,23 +35,23 @@ void TileModifyAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_setting) << DS_TAG(_value1) << DS_TAG(_value2) << DS_TAG(_pasteElement); } -GameActions::Result::Ptr TileModifyAction::Query() const +GameActions::Result TileModifyAction::Query() const { return QueryExecute(false); } -GameActions::Result::Ptr TileModifyAction::Execute() const +GameActions::Result TileModifyAction::Execute() const { return QueryExecute(true); } -GameActions::Result::Ptr TileModifyAction::QueryExecute(bool isExecuting) const +GameActions::Result TileModifyAction::QueryExecute(bool isExecuting) const { if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::InvalidParameters, STR_LAND_NOT_OWNED_BY_PARK, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_LAND_NOT_OWNED_BY_PARK, STR_NONE); } - auto res = MakeResult(); + auto res = GameActions::Result(); switch (_setting) { case TileModifyType::AnyRemove: @@ -212,12 +212,12 @@ GameActions::Result::Ptr TileModifyAction::QueryExecute(bool isExecuting) const } default: log_error("invalid instruction"); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - res->Position.x = _loc.x; - res->Position.y = _loc.y; - res->Position.z = tile_element_height(_loc); + res.Position.x = _loc.x; + res.Position.y = _loc.y; + res.Position.z = tile_element_height(_loc); return res; } diff --git a/src/openrct2/actions/TileModifyAction.h b/src/openrct2/actions/TileModifyAction.h index 73d81e78b0..9d8fc8b055 100644 --- a/src/openrct2/actions/TileModifyAction.h +++ b/src/openrct2/actions/TileModifyAction.h @@ -57,9 +57,9 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr QueryExecute(bool isExecuting) const; + GameActions::Result QueryExecute(bool isExecuting) const; }; diff --git a/src/openrct2/actions/TrackDesignAction.cpp b/src/openrct2/actions/TrackDesignAction.cpp index bd28442648..3d831ee101 100644 --- a/src/openrct2/actions/TrackDesignAction.cpp +++ b/src/openrct2/actions/TrackDesignAction.cpp @@ -47,18 +47,19 @@ void TrackDesignAction::Serialise(DataSerialiser& stream) _td.Serialise(stream); } -GameActions::Result::Ptr TrackDesignAction::Query() const +GameActions::Result TrackDesignAction::Query() const { - auto res = MakeResult(); - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = _loc.z; - res->Expenditure = ExpenditureType::RideConstruction; + auto res = GameActions::Result(); + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = _loc.z; + res.Expenditure = ExpenditureType::RideConstruction; _currentTrackPieceDirection = _loc.direction; if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } auto& objManager = OpenRCT2::GetContext()->GetObjectManager(); @@ -77,17 +78,17 @@ GameActions::Result::Ptr TrackDesignAction::Query() const auto rideCreateAction = RideCreateAction(_td.type, entryIndex, 0, 0); rideCreateAction.SetFlags(GetFlags()); auto r = GameActions::ExecuteNested(&rideCreateAction); - if (r->Error != GameActions::Status::Ok) + if (r.Error != GameActions::Status::Ok) { - return MakeResult(GameActions::Status::NoFreeElements, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_NONE); + return GameActions::Result(GameActions::Status::NoFreeElements, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_NONE); } - const auto rideIndex = r->GetData(); + const auto rideIndex = r.GetData(); auto ride = get_ride(rideIndex); if (ride == nullptr) { log_warning("Invalid game command for track placement, ride id = %d", rideIndex); - return MakeResult(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } bool placeScenery = true; @@ -110,28 +111,28 @@ GameActions::Result::Ptr TrackDesignAction::Query() const GameActions::ExecuteNested(&gameAction); - if (queryRes->Error != GameActions::Status::Ok) + if (queryRes.Error != GameActions::Status::Ok) { - res->Error = queryRes->Error; - res->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; - res->ErrorMessage = queryRes->ErrorMessage; - res->ErrorMessageArgs = queryRes->ErrorMessageArgs; + res.Error = queryRes.Error; + res.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + res.ErrorMessage = queryRes.ErrorMessage; + res.ErrorMessageArgs = queryRes.ErrorMessageArgs; return res; } - res->Cost = queryRes->Cost; - res->SetData(ride_id_t{ RIDE_ID_NULL }); + res.Cost = queryRes.Cost; + res.SetData(ride_id_t{ RIDE_ID_NULL }); return res; } -GameActions::Result::Ptr TrackDesignAction::Execute() const +GameActions::Result TrackDesignAction::Execute() const { - auto res = MakeResult(); - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = _loc.z; - res->Expenditure = ExpenditureType::RideConstruction; + auto res = GameActions::Result(); + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = _loc.z; + res.Expenditure = ExpenditureType::RideConstruction; auto& objManager = OpenRCT2::GetContext()->GetObjectManager(); auto entryIndex = objManager.GetLoadedObjectEntryIndex(_td.vehicle_object); @@ -149,17 +150,17 @@ GameActions::Result::Ptr TrackDesignAction::Execute() const auto rideCreateAction = RideCreateAction(_td.type, entryIndex, 0, 0); rideCreateAction.SetFlags(GetFlags()); auto r = GameActions::ExecuteNested(&rideCreateAction); - if (r->Error != GameActions::Status::Ok) + if (r.Error != GameActions::Status::Ok) { - return MakeResult(GameActions::Status::NoFreeElements, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_NONE); + return GameActions::Result(GameActions::Status::NoFreeElements, STR_CANT_CREATE_NEW_RIDE_ATTRACTION, STR_NONE); } - const auto rideIndex = r->GetData(); + const auto rideIndex = r.GetData(); auto ride = get_ride(rideIndex); if (ride == nullptr) { log_warning("Invalid game command for track placement, ride id = %d", rideIndex); - return MakeResult(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } // Query first, this is required again to determine if scenery is available. @@ -178,16 +179,16 @@ GameActions::Result::Ptr TrackDesignAction::Execute() const queryRes = TrackDesignPlace(const_cast(&_td), flags, placeScenery, ride, _loc); } - if (queryRes->Error != GameActions::Status::Ok) + if (queryRes.Error != GameActions::Status::Ok) { auto gameAction = RideDemolishAction(ride->id, RIDE_MODIFY_DEMOLISH); gameAction.SetFlags(GetFlags()); GameActions::ExecuteNested(&gameAction); - res->Error = queryRes->Error; - res->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; - res->ErrorMessage = queryRes->ErrorMessage; - res->ErrorMessageArgs = queryRes->ErrorMessageArgs; + res.Error = queryRes.Error; + res.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + res.ErrorMessage = queryRes.ErrorMessage; + res.ErrorMessageArgs = queryRes.ErrorMessageArgs; return res; } @@ -196,16 +197,16 @@ GameActions::Result::Ptr TrackDesignAction::Execute() const flags |= GAME_COMMAND_FLAG_APPLY; auto execRes = TrackDesignPlace(const_cast(&_td), flags, placeScenery, ride, _loc); - if (execRes->Error != GameActions::Status::Ok) + if (execRes.Error != GameActions::Status::Ok) { auto gameAction = RideDemolishAction(ride->id, RIDE_MODIFY_DEMOLISH); gameAction.SetFlags(GetFlags()); GameActions::ExecuteNested(&gameAction); - res->Error = execRes->Error; - res->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; - res->ErrorMessage = execRes->ErrorMessage; - res->ErrorMessageArgs = execRes->ErrorMessageArgs; + res.Error = execRes.Error; + res.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + res.ErrorMessage = execRes.ErrorMessage; + res.ErrorMessageArgs = execRes.ErrorMessageArgs; return res; } @@ -263,15 +264,15 @@ GameActions::Result::Ptr TrackDesignAction::Execute() const ride->vehicle_colours[i].Ternary = _td.vehicle_additional_colour[tdIndex]; } - for (int32_t count = 1; count == 1 || r->Error != GameActions::Status::Ok; ++count) + for (int32_t count = 1; count == 1 || r.Error != GameActions::Status::Ok; ++count) { auto name = count == 1 ? _td.name : (_td.name + " " + std::to_string(count)); auto gameAction = RideSetNameAction(ride->id, name); gameAction.SetFlags(GetFlags()); r = GameActions::ExecuteNested(&gameAction); } - res->Cost = execRes->Cost; - res->SetData(ride_id_t{ ride->id }); + res.Cost = execRes.Cost; + res.SetData(ride_id_t{ ride->id }); return res; } diff --git a/src/openrct2/actions/TrackDesignAction.h b/src/openrct2/actions/TrackDesignAction.h index f9e76cf988..2471d4617b 100644 --- a/src/openrct2/actions/TrackDesignAction.h +++ b/src/openrct2/actions/TrackDesignAction.h @@ -28,6 +28,6 @@ public: void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/TrackPlaceAction.cpp b/src/openrct2/actions/TrackPlaceAction.cpp index 8f5a6eb1cd..953932f61d 100644 --- a/src/openrct2/actions/TrackPlaceAction.cpp +++ b/src/openrct2/actions/TrackPlaceAction.cpp @@ -63,32 +63,35 @@ void TrackPlaceAction::Serialise(DataSerialiser& stream) << DS_TAG(_seatRotation) << DS_TAG(_trackPlaceFlags); } -GameActions::Result::Ptr TrackPlaceAction::Query() const +GameActions::Result TrackPlaceAction::Query() const { auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid ride for track placement, rideIndex = %d", EnumValue(_rideIndex)); - return MakeResult(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } rct_ride_entry* rideEntry = get_ride_entry(ride->subtype); if (rideEntry == nullptr) { log_warning("Invalid ride subtype for track placement, rideIndex = %d", EnumValue(_rideIndex)); - return MakeResult(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } if (!direction_valid(_origin.direction)) { log_warning("Invalid direction for track placement, direction = %d", _origin.direction); - return MakeResult(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } - auto res = MakeResult(); - res->Expenditure = ExpenditureType::RideConstruction; - res->Position.x = _origin.x + 16; - res->Position.y = _origin.y + 16; - res->Position.z = _origin.z; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::RideConstruction; + res.Position.x = _origin.x + 16; + res.Position.y = _origin.y + 16; + res.Position.z = _origin.z; auto resultData = TrackPlaceActionResult{}; @@ -96,7 +99,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const if ((ride->lifecycle_flags & RIDE_LIFECYCLE_INDESTRUCTIBLE_TRACK) && _trackType == TrackElemType::EndStation) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NOT_ALLOWED_TO_MODIFY_STATION); } @@ -104,7 +107,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const { if (game_is_paused() && !gCheatsBuildInPauseMode) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_CONSTRUCTION_NOT_POSSIBLE_WHILE_GAME_IS_PAUSED); } @@ -116,7 +119,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const { if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_ONLY_ONE_ON_RIDE_PHOTO_PER_RIDE); } @@ -125,7 +128,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const { if (ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_ONLY_ONE_CABLE_LIFT_HILL_PER_RIDE); } @@ -137,7 +140,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const const auto& ted = GetTrackElementDescriptor(_trackType); if (ted.Flags & TRACK_ELEM_FLAG_IS_STEEP_UP) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_TOO_STEEP_FOR_LIFT_HILL); } @@ -156,7 +159,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const if (!LocationValid(tileCoords) || (!map_is_location_owned(tileCoords) && !gCheatsSandboxMode)) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_LAND_NOT_OWNED_BY_PARK); } numElements++; @@ -165,7 +168,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const if (!CheckMapCapacity(numElements)) { log_warning("Not enough free map elements to place track."); - return MakeResult( + return GameActions::Result( GameActions::Status::NoFreeElements, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); } @@ -176,7 +179,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const { if ((_origin.z & 0x0F) != 8) { - return MakeResult( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_CONSTRUCTION_ERR_UNKNOWN); } @@ -185,7 +188,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const { if ((_origin.z & 0x0F) != 0) { - return MakeResult( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_CONSTRUCTION_ERR_UNKNOWN); } @@ -203,7 +206,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const if (mapLoc.z < 16) { - return MakeResult( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_TOO_LOW); } @@ -224,7 +227,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const if (clearanceZ > MAX_TRACK_HEIGHT) { - return MakeResult( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_TOO_HIGH); } @@ -234,12 +237,12 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const : CREATE_CROSSING_MODE_NONE; auto canBuild = MapCanConstructWithClearAt( { mapLoc, baseZ, clearanceZ }, &map_place_non_scenery_clear_func, quarterTile, GetFlags(), crossingMode); - if (canBuild->Error != GameActions::Status::Ok) + if (canBuild.Error != GameActions::Status::Ok) { - canBuild->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + canBuild.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; return canBuild; } - cost += canBuild->Cost; + cost += canBuild.Cost; // When building a level crossing, remove any pre-existing path furniture. if (crossingMode == CREATE_CROSSING_MODE_TRACK_OVER_PATH) @@ -251,11 +254,11 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const } } - const auto clearanceData = canBuild->GetData(); + const auto clearanceData = canBuild.GetData(); uint8_t mapGroundFlags = clearanceData.GroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND); if (resultData.GroundFlags != 0 && (resultData.GroundFlags & mapGroundFlags) == 0) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_CANT_BUILD_PARTLY_ABOVE_AND_PARTLY_BELOW_GROUND); } @@ -265,7 +268,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const { if (resultData.GroundFlags & ELEMENT_IS_UNDERGROUND) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ABOVE_GROUND); } @@ -275,7 +278,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const { // No element has this flag if (clearanceData.GroundFlags & ELEMENT_IS_UNDERWATER) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_UNDERWATER); } @@ -283,7 +286,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const if (clearanceData.GroundFlags & ELEMENT_IS_UNDERWATER && !gCheatsDisableClearanceChecks) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_RIDE_CANT_BUILD_THIS_UNDERWATER); } @@ -293,20 +296,21 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const auto surfaceElement = map_get_surface_element_at(mapLoc); if (surfaceElement == nullptr) { - return MakeResult(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); + return GameActions::Result( + GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } auto waterHeight = surfaceElement->GetWaterHeight(); if (waterHeight == 0) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ON_WATER); } if (waterHeight != baseZ) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ON_WATER); } @@ -317,7 +321,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const if (slope == TILE_ELEMENT_SLOPE_W_CORNER_DN || slope == TILE_ELEMENT_SLOPE_S_CORNER_DN || slope == TILE_ELEMENT_SLOPE_E_CORNER_DN || slope == TILE_ELEMENT_SLOPE_N_CORNER_DN) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ON_WATER); } @@ -329,7 +333,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const { if (!track_add_station_element({ mapLoc, baseZ, _origin.direction }, _rideIndex, 0, _fromTrackDesign)) { - return MakeResult( + return GameActions::Result( GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, gGameCommandErrorText); } } @@ -338,7 +342,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const auto surfaceElement = map_get_surface_element_at(mapLoc); if (surfaceElement == nullptr) { - return MakeResult(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } if (!gCheatsDisableSupportLimits) @@ -361,7 +365,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const ride_height /= COORDS_Z_PER_TINY_Z; if (ride_height > maxHeight && !_trackDesignDrawingPreview) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_TOO_HIGH_FOR_SUPPORTS); } @@ -381,33 +385,35 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const price *= ted.Price; price >>= 16; - res->Cost = cost + ((price / 2) * 10); - res->SetData(std::move(resultData)); + res.Cost = cost + ((price / 2) * 10); + res.SetData(std::move(resultData)); return res; } -GameActions::Result::Ptr TrackPlaceAction::Execute() const +GameActions::Result TrackPlaceAction::Execute() const { auto ride = get_ride(_rideIndex); if (ride == nullptr) { log_warning("Invalid ride for track placement, rideIndex = %d", EnumValue(_rideIndex)); - return MakeResult(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } rct_ride_entry* rideEntry = get_ride_entry(ride->subtype); if (rideEntry == nullptr) { log_warning("Invalid ride subtype for track placement, rideIndex = %d", EnumValue(_rideIndex)); - return MakeResult(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } - auto res = MakeResult(); - res->Expenditure = ExpenditureType::RideConstruction; - res->Position.x = _origin.x + 16; - res->Position.y = _origin.y + 16; - res->Position.z = _origin.z; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::RideConstruction; + res.Position.x = _origin.x + 16; + res.Position.y = _origin.y + 16; + res.Position.z = _origin.z; auto resultData = TrackPlaceActionResult{}; @@ -447,12 +453,12 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const auto canBuild = MapCanConstructWithClearAt( mapLocWithClearance, &map_place_non_scenery_clear_func, quarterTile, GetFlags() | GAME_COMMAND_FLAG_APPLY, crossingMode); - if (canBuild->Error != GameActions::Status::Ok) + if (canBuild.Error != GameActions::Status::Ok) { - canBuild->ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + canBuild.ErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; return canBuild; } - cost += canBuild->Cost; + cost += canBuild.Cost; if (!(GetFlags() & GAME_COMMAND_FLAG_GHOST) && !gCheatsDisableClearanceChecks) { @@ -477,11 +483,11 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const } } - const auto clearanceData = canBuild->GetData(); + const auto clearanceData = canBuild.GetData(); uint8_t mapGroundFlags = clearanceData.GroundFlags & (ELEMENT_IS_ABOVE_GROUND | ELEMENT_IS_UNDERGROUND); if (resultData.GroundFlags != 0 && (resultData.GroundFlags & mapGroundFlags) == 0) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_CANT_BUILD_PARTLY_ABOVE_AND_PARTLY_BELOW_GROUND); } @@ -492,7 +498,7 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const auto surfaceElement = map_get_surface_element_at(mapLoc); if (surfaceElement == nullptr) { - return MakeResult(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_NONE); } int32_t supportHeight = baseZ - surfaceElement->GetBaseZ(); @@ -568,7 +574,7 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const if (trackElement == nullptr) { log_warning("Cannot create track element for ride = %d", EnumValue(_rideIndex)); - return MakeResult( + return GameActions::Result( GameActions::Status::NoFreeElements, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); } @@ -676,8 +682,8 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const price *= ted.Price; price >>= 16; - res->Cost = cost + ((price / 2) * 10); - res->SetData(std::move(resultData)); + res.Cost = cost + ((price / 2) * 10); + res.SetData(std::move(resultData)); return res; } diff --git a/src/openrct2/actions/TrackPlaceAction.h b/src/openrct2/actions/TrackPlaceAction.h index ce33834e5d..533f5e6790 100644 --- a/src/openrct2/actions/TrackPlaceAction.h +++ b/src/openrct2/actions/TrackPlaceAction.h @@ -39,8 +39,8 @@ public: uint16_t GetActionFlags() const override final; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: bool CheckMapCapacity(int16_t numTiles) const; diff --git a/src/openrct2/actions/TrackRemoveAction.cpp b/src/openrct2/actions/TrackRemoveAction.cpp index d155087b76..04ac366d67 100644 --- a/src/openrct2/actions/TrackRemoveAction.cpp +++ b/src/openrct2/actions/TrackRemoveAction.cpp @@ -48,13 +48,13 @@ void TrackRemoveAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_trackType) << DS_TAG(_sequence) << DS_TAG(_origin); } -GameActions::Result::Ptr TrackRemoveAction::Query() const +GameActions::Result TrackRemoveAction::Query() const { - auto res = MakeResult(); - res->Position.x = _origin.x + 16; - res->Position.y = _origin.y + 16; - res->Position.z = _origin.z; - res->Expenditure = ExpenditureType::RideConstruction; + auto res = GameActions::Result(); + res.Position.x = _origin.x + 16; + res.Position.y = _origin.y + 16; + res.Position.z = _origin.z; + res.Expenditure = ExpenditureType::RideConstruction; // Stations require some massaging of the track type for comparing auto comparableTrackType = _trackType; @@ -111,12 +111,12 @@ GameActions::Result::Ptr TrackRemoveAction::Query() const log_warning( "Track Element not found. x = %d, y = %d, z = %d, d = %d, seq = %d.", _origin.x, _origin.y, _origin.z, _origin.direction, _sequence); - return MakeResult(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); } if (tileElement->AsTrack()->IsIndestructible()) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_YOU_ARE_NOT_ALLOWED_TO_REMOVE_THIS_SECTION); } @@ -128,13 +128,13 @@ GameActions::Result::Ptr TrackRemoveAction::Query() const if (ride == nullptr) { log_warning("Ride not found. ride index = %d.", rideIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); } if (ride->type >= RIDE_TYPE_COUNT) { log_warning("Ride type not found. ride type = %d.", ride->type); - return MakeResult(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); } const auto& ted = GetTrackElementDescriptor(trackType); const rct_preview_track* trackBlock = ted.Block; @@ -147,9 +147,9 @@ GameActions::Result::Ptr TrackRemoveAction::Query() const startLoc.x -= rotatedTrack.x; startLoc.y -= rotatedTrack.y; startLoc.z -= rotatedTrack.z; - res->Position.x = startLoc.x; - res->Position.y = startLoc.y; - res->Position.z = startLoc.z; + res.Position.x = startLoc.x; + res.Position.y = startLoc.y; + res.Position.z = startLoc.z; money32 cost = 0; @@ -161,7 +161,7 @@ GameActions::Result::Ptr TrackRemoveAction::Query() const if (!LocationValid(mapLoc)) { - return MakeResult( + return GameActions::Result( GameActions::Status::NotOwned, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); } map_invalidate_tile_full(mapLoc); @@ -200,7 +200,7 @@ GameActions::Result::Ptr TrackRemoveAction::Query() const log_warning( "Track Element not found. x = %d, y = %d, z = %d, d = %d, seq = %d.", mapLoc.x, mapLoc.y, mapLoc.z, _origin.direction, trackBlock->index); - return MakeResult(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); } int32_t entranceDirections = ted.SequenceProperties[0]; @@ -208,7 +208,8 @@ GameActions::Result::Ptr TrackRemoveAction::Query() const { if (!track_remove_station_element({ mapLoc, _origin.direction }, rideIndex, 0)) { - return MakeResult(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, gGameCommandErrorText); + return GameActions::Result( + GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, gGameCommandErrorText); } } @@ -216,7 +217,7 @@ GameActions::Result::Ptr TrackRemoveAction::Query() const if (surfaceElement == nullptr) { log_warning("Surface Element not found. x = %d, y = %d", mapLoc.x, mapLoc.y); - return MakeResult(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); } int8_t _support_height = tileElement->base_height - surfaceElement->base_height; @@ -237,17 +238,17 @@ GameActions::Result::Ptr TrackRemoveAction::Query() const else price *= -10; - res->Cost = price; + res.Cost = price; return res; } -GameActions::Result::Ptr TrackRemoveAction::Execute() const +GameActions::Result TrackRemoveAction::Execute() const { - auto res = MakeResult(); - res->Position.x = _origin.x + 16; - res->Position.y = _origin.y + 16; - res->Position.z = _origin.z; - res->Expenditure = ExpenditureType::RideConstruction; + auto res = GameActions::Result(); + res.Position.x = _origin.x + 16; + res.Position.y = _origin.y + 16; + res.Position.z = _origin.z; + res.Expenditure = ExpenditureType::RideConstruction; // Stations require some massaging of the track type for comparing auto comparableTrackType = _trackType; @@ -304,7 +305,7 @@ GameActions::Result::Ptr TrackRemoveAction::Execute() const log_warning( "Track Element not found. x = %d, y = %d, z = %d, d = %d, seq = %d.", _origin.x, _origin.y, _origin.z, _origin.direction, _sequence); - return MakeResult(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); } ride_id_t rideIndex = tileElement->AsTrack()->GetRideIndex(); @@ -315,7 +316,7 @@ GameActions::Result::Ptr TrackRemoveAction::Execute() const if (ride == nullptr) { log_warning("Ride not found. ride index = %d.", rideIndex); - return MakeResult(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); } const auto& ted = GetTrackElementDescriptor(trackType); const rct_preview_track* trackBlock = ted.Block; @@ -328,9 +329,9 @@ GameActions::Result::Ptr TrackRemoveAction::Execute() const startLoc.x -= rotatedTrackLoc.x; startLoc.y -= rotatedTrackLoc.y; startLoc.z -= rotatedTrackLoc.z; - res->Position.x = startLoc.x; - res->Position.y = startLoc.y; - res->Position.z = startLoc.z; + res.Position.x = startLoc.x; + res.Position.y = startLoc.y; + res.Position.z = startLoc.z; money32 cost = 0; trackBlock = ted.Block; @@ -375,7 +376,7 @@ GameActions::Result::Ptr TrackRemoveAction::Execute() const log_warning( "Track Element not found. x = %d, y = %d, z = %d, d = %d, seq = %d.", mapLoc.x, mapLoc.y, mapLoc.z, _origin.direction, trackBlock->index); - return MakeResult(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); } int32_t entranceDirections = ted.SequenceProperties[0]; @@ -383,7 +384,8 @@ GameActions::Result::Ptr TrackRemoveAction::Execute() const { if (!track_remove_station_element({ mapLoc, _origin.direction }, rideIndex, 0)) { - return MakeResult(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, gGameCommandErrorText); + return GameActions::Result( + GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, gGameCommandErrorText); } } @@ -391,7 +393,7 @@ GameActions::Result::Ptr TrackRemoveAction::Execute() const if (surfaceElement == nullptr) { log_warning("Surface Element not found. x = %d, y = %d", mapLoc.x, mapLoc.y); - return MakeResult(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, STR_NONE); } int8_t _support_height = tileElement->base_height - surfaceElement->base_height; @@ -410,7 +412,8 @@ GameActions::Result::Ptr TrackRemoveAction::Execute() const { if (!track_remove_station_element({ mapLoc, _origin.direction }, rideIndex, GAME_COMMAND_FLAG_APPLY)) { - return MakeResult(GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, gGameCommandErrorText); + return GameActions::Result( + GameActions::Status::Unknown, STR_RIDE_CONSTRUCTION_CANT_REMOVE_THIS, gGameCommandErrorText); } } @@ -485,6 +488,6 @@ GameActions::Result::Ptr TrackRemoveAction::Execute() const else price *= -10; - res->Cost = price; + res.Cost = price; return res; } diff --git a/src/openrct2/actions/TrackRemoveAction.h b/src/openrct2/actions/TrackRemoveAction.h index 78bdc9e3df..6303953690 100644 --- a/src/openrct2/actions/TrackRemoveAction.h +++ b/src/openrct2/actions/TrackRemoveAction.h @@ -27,6 +27,6 @@ public: uint16_t GetActionFlags() const override final; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/TrackSetBrakeSpeedAction.cpp b/src/openrct2/actions/TrackSetBrakeSpeedAction.cpp index e9dc5ca73b..9d01faa83d 100644 --- a/src/openrct2/actions/TrackSetBrakeSpeedAction.cpp +++ b/src/openrct2/actions/TrackSetBrakeSpeedAction.cpp @@ -36,35 +36,35 @@ void TrackSetBrakeSpeedAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_trackType) << DS_TAG(_brakeSpeed); } -GameActions::Result::Ptr TrackSetBrakeSpeedAction::Query() const +GameActions::Result TrackSetBrakeSpeedAction::Query() const { return QueryExecute(false); } -GameActions::Result::Ptr TrackSetBrakeSpeedAction::Execute() const +GameActions::Result TrackSetBrakeSpeedAction::Execute() const { return QueryExecute(true); } -GameActions::Result::Ptr TrackSetBrakeSpeedAction::QueryExecute(bool isExecuting) const +GameActions::Result TrackSetBrakeSpeedAction::QueryExecute(bool isExecuting) const { - auto res = MakeResult(); + auto res = GameActions::Result(); - res->Position = _loc; - res->Position.x += 16; - res->Position.y += 16; - res->Expenditure = ExpenditureType::RideConstruction; + res.Position = _loc; + res.Position.x += 16; + res.Position.y += 16; + res.Expenditure = ExpenditureType::RideConstruction; if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::NotOwned, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::NotOwned, STR_NONE, STR_NONE); } TileElement* tileElement = map_get_track_element_at_of_type(_loc, _trackType); if (tileElement == nullptr) { log_warning("Invalid game command for setting brakes speed. x = %d, y = %d", _loc.x, _loc.y); - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } if (isExecuting) diff --git a/src/openrct2/actions/TrackSetBrakeSpeedAction.h b/src/openrct2/actions/TrackSetBrakeSpeedAction.h index 92967288c2..cb7f7f6db8 100644 --- a/src/openrct2/actions/TrackSetBrakeSpeedAction.h +++ b/src/openrct2/actions/TrackSetBrakeSpeedAction.h @@ -27,9 +27,9 @@ public: uint16_t GetActionFlags() const override final; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr QueryExecute(bool isExecuting) const; + GameActions::Result QueryExecute(bool isExecuting) const; }; diff --git a/src/openrct2/actions/WallPlaceAction.cpp b/src/openrct2/actions/WallPlaceAction.cpp index 61587af65b..063f645b3f 100644 --- a/src/openrct2/actions/WallPlaceAction.cpp +++ b/src/openrct2/actions/WallPlaceAction.cpp @@ -58,24 +58,24 @@ void WallPlaceAction::Serialise(DataSerialiser& stream) << DS_TAG(_tertiaryColour); } -GameActions::Result::Ptr WallPlaceAction::Query() const +GameActions::Result WallPlaceAction::Query() const { - auto res = MakeResult(); - res->ErrorTitle = STR_CANT_BUILD_THIS_HERE; - res->Position = _loc; + auto res = GameActions::Result(); + res.ErrorTitle = STR_CANT_BUILD_THIS_HERE; + res.Position = _loc; - res->Expenditure = ExpenditureType::Landscaping; - res->Position.x += 16; - res->Position.y += 16; + res.Expenditure = ExpenditureType::Landscaping; + res.Position.x += 16; + res.Position.y += 16; if (_loc.z == 0) { - res->Position.z = tile_element_height(res->Position); + res.Position.z = tile_element_height(res.Position); } if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_BUILD_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::NotOwned, STR_CANT_BUILD_THIS_HERE, STR_NONE); } if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && !(GetFlags() & GAME_COMMAND_FLAG_PATH_SCENERY) && !gCheatsSandboxMode) @@ -84,23 +84,23 @@ GameActions::Result::Ptr WallPlaceAction::Query() const { if (!map_is_location_in_park(_loc)) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_BUILD_THIS_HERE, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_CANT_BUILD_THIS_HERE, STR_LAND_NOT_OWNED_BY_PARK); } } else if (!map_is_location_owned(_loc)) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_BUILD_THIS_HERE, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_CANT_BUILD_THIS_HERE, STR_LAND_NOT_OWNED_BY_PARK); } } else if (!_trackDesignDrawingPreview && (_loc.x > GetMapSizeMaxXY() || _loc.y > GetMapSizeMaxXY())) { log_error("Invalid x/y coordinates. x = %d y = %d", _loc.x, _loc.y); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_NONE); } if (_edge > 3) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_NONE); } uint8_t edgeSlope = 0; @@ -111,7 +111,7 @@ GameActions::Result::Ptr WallPlaceAction::Query() const if (surfaceElement == nullptr) { log_error("Surface element not found at %d, %d.", _loc.x, _loc.y); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_NONE); } targetHeight = surfaceElement->GetBaseZ(); @@ -128,7 +128,7 @@ GameActions::Result::Ptr WallPlaceAction::Query() const if (surfaceElement == nullptr) { log_error("Surface element not found at %d, %d.", _loc.x, _loc.y); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_NONE); } if (surfaceElement->GetWaterHeight() > 0) @@ -137,13 +137,15 @@ GameActions::Result::Ptr WallPlaceAction::Query() const if (targetHeight < waterHeight && !gCheatsDisableClearanceChecks) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_BUILD_THIS_HERE, STR_CANT_BUILD_THIS_UNDERWATER); + return GameActions::Result( + GameActions::Status::Disallowed, STR_CANT_BUILD_THIS_HERE, STR_CANT_BUILD_THIS_UNDERWATER); } } if (targetHeight < surfaceElement->GetBaseZ() && !gCheatsDisableClearanceChecks) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_BUILD_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ABOVE_GROUND); + return GameActions::Result( + GameActions::Status::Disallowed, STR_CANT_BUILD_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ABOVE_GROUND); } if (!(edgeSlope & (EDGE_SLOPE_UPWARDS | EDGE_SLOPE_DOWNWARDS))) @@ -155,7 +157,7 @@ GameActions::Result::Ptr WallPlaceAction::Query() const { if (targetHeight / 8 < newBaseHeight) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_CANT_BUILD_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ABOVE_GROUND); } @@ -171,7 +173,7 @@ GameActions::Result::Ptr WallPlaceAction::Query() const newBaseHeight += 2; if (targetHeight / 8 < newBaseHeight) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_CANT_BUILD_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ABOVE_GROUND); } @@ -186,7 +188,7 @@ GameActions::Result::Ptr WallPlaceAction::Query() const { if (targetHeight / 8 < newBaseHeight) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_CANT_BUILD_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ABOVE_GROUND); } @@ -202,7 +204,7 @@ GameActions::Result::Ptr WallPlaceAction::Query() const newBaseHeight += 2; if (targetHeight / 8 < newBaseHeight) { - return MakeResult( + return GameActions::Result( GameActions::Status::Disallowed, STR_CANT_BUILD_THIS_HERE, STR_CAN_ONLY_BUILD_THIS_ABOVE_GROUND); } @@ -217,7 +219,7 @@ GameActions::Result::Ptr WallPlaceAction::Query() const if (wallEntry == nullptr) { log_error("Wall Type not found %d", _wallType); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_NONE); } if (wallEntry->scrolling_mode != SCROLLING_MODE_NONE) @@ -225,7 +227,8 @@ GameActions::Result::Ptr WallPlaceAction::Query() const if (HasReachedBannerLimit()) { log_error("No free banners available"); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_TOO_MANY_BANNERS_IN_GAME); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_TOO_MANY_BANNERS_IN_GAME); } } @@ -234,7 +237,8 @@ GameActions::Result::Ptr WallPlaceAction::Query() const { if (wallEntry->flags & WALL_SCENERY_CANT_BUILD_ON_SLOPE) { - return MakeResult(GameActions::Status::Disallowed, STR_CANT_BUILD_THIS_HERE, STR_ERR_UNABLE_TO_BUILD_THIS_ON_SLOPE); + return GameActions::Result( + GameActions::Status::Disallowed, STR_CANT_BUILD_THIS_HERE, STR_ERR_UNABLE_TO_BUILD_THIS_ON_SLOPE); } clearanceHeight += 2; } @@ -244,7 +248,7 @@ GameActions::Result::Ptr WallPlaceAction::Query() const if (!(GetFlags() & GAME_COMMAND_FLAG_PATH_SCENERY) && !gCheatsDisableClearanceChecks) { auto result = WallCheckObstruction(wallEntry, targetHeight / 8, clearanceHeight, &wallAcrossTrack); - if (result->Error != GameActions::Status::Ok) + if (result.Error != GameActions::Status::Ok) { return result; } @@ -252,29 +256,30 @@ GameActions::Result::Ptr WallPlaceAction::Query() const if (!MapCheckCapacityAndReorganise(_loc)) { - return MakeResult(GameActions::Status::NoFreeElements, STR_CANT_BUILD_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); + return GameActions::Result( + GameActions::Status::NoFreeElements, STR_CANT_BUILD_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); } - res->Cost = wallEntry->price; + res.Cost = wallEntry->price; - res->SetData(WallPlaceActionResult{}); + res.SetData(WallPlaceActionResult{}); return res; } -GameActions::Result::Ptr WallPlaceAction::Execute() const +GameActions::Result WallPlaceAction::Execute() const { - auto res = MakeResult(); - res->ErrorTitle = STR_CANT_BUILD_THIS_HERE; - res->Position = _loc; + auto res = GameActions::Result(); + res.ErrorTitle = STR_CANT_BUILD_THIS_HERE; + res.Position = _loc; - res->Expenditure = ExpenditureType::Landscaping; - res->Position.x += 16; - res->Position.y += 16; + res.Expenditure = ExpenditureType::Landscaping; + res.Position.x += 16; + res.Position.y += 16; - if (res->Position.z == 0) + if (res.Position.z == 0) { - res->Position.z = tile_element_height(res->Position); + res.Position.z = tile_element_height(res.Position); } uint8_t edgeSlope = 0; @@ -285,7 +290,7 @@ GameActions::Result::Ptr WallPlaceAction::Execute() const if (surfaceElement == nullptr) { log_error("Surface element not found at %d, %d.", _loc.x, _loc.y); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_NONE); } targetHeight = surfaceElement->GetBaseZ(); @@ -304,7 +309,7 @@ GameActions::Result::Ptr WallPlaceAction::Execute() const if (wallEntry == nullptr) { log_error("Wall Type not found %d", _wallType); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_NONE); } uint8_t clearanceHeight = targetHeight / COORDS_Z_STEP; @@ -318,7 +323,7 @@ GameActions::Result::Ptr WallPlaceAction::Execute() const if (!(GetFlags() & GAME_COMMAND_FLAG_PATH_SCENERY) && !gCheatsDisableClearanceChecks) { auto result = WallCheckObstruction(wallEntry, targetHeight / COORDS_Z_STEP, clearanceHeight, &wallAcrossTrack); - if (result->Error != GameActions::Status::Ok) + if (result.Error != GameActions::Status::Ok) { return result; } @@ -331,7 +336,8 @@ GameActions::Result::Ptr WallPlaceAction::Execute() const if (banner == nullptr) { log_error("No free banners available"); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_TOO_MANY_BANNERS_IN_GAME); + return GameActions::Result( + GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_TOO_MANY_BANNERS_IN_GAME); } banner->text = {}; @@ -352,7 +358,8 @@ GameActions::Result::Ptr WallPlaceAction::Execute() const auto* wallElement = TileElementInsert(targetLoc, 0b0000); if (wallElement == nullptr) { - return MakeResult(GameActions::Status::NoFreeElements, STR_CANT_POSITION_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); + return GameActions::Result( + GameActions::Status::NoFreeElements, STR_CANT_POSITION_THIS_HERE, STR_TILE_ELEMENT_LIMIT_REACHED); } wallElement->clearance_height = clearanceHeight; @@ -376,10 +383,10 @@ GameActions::Result::Ptr WallPlaceAction::Execute() const map_animation_create(MAP_ANIMATION_TYPE_WALL, targetLoc); map_invalidate_tile_zoom1({ _loc, wallElement->GetBaseZ(), wallElement->GetBaseZ() + 72 }); - res->Cost = wallEntry->price; + res.Cost = wallEntry->price; const auto bannerId = banner != nullptr ? banner->id : BANNER_INDEX_NULL; - res->SetData(WallPlaceActionResult{ wallElement->GetBaseZ(), bannerId }); + res.SetData(WallPlaceActionResult{ wallElement->GetBaseZ(), bannerId }); return res; } @@ -484,13 +491,13 @@ bool WallPlaceAction::WallCheckObstructionWithTrack( * * rct2: 0x006E5C1A */ -GameActions::Result::Ptr WallPlaceAction::WallCheckObstruction( +GameActions::Result WallPlaceAction::WallCheckObstruction( WallSceneryEntry* wall, int32_t z0, int32_t z1, bool* wallAcrossTrack) const { *wallAcrossTrack = false; if (map_is_location_at_edge(_loc)) { - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_OFF_EDGE_OF_MAP); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_BUILD_THIS_HERE, STR_OFF_EDGE_OF_MAP); } TileElement* tileElement = map_get_first_element_at(_loc); @@ -512,24 +519,24 @@ GameActions::Result::Ptr WallPlaceAction::WallCheckObstruction( int32_t direction = tileElement->GetDirection(); if (_edge == direction) { - auto res = MakeResult(GameActions::Status::NoClearance, STR_CANT_BUILD_THIS_HERE, STR_NONE); - map_obstruction_set_error_text(tileElement, *res); + auto res = GameActions::Result(GameActions::Status::NoClearance, STR_CANT_BUILD_THIS_HERE, STR_NONE); + map_obstruction_set_error_text(tileElement, res); return res; } continue; } if (tileElement->GetOccupiedQuadrants() == 0) continue; - auto res = MakeResult(GameActions::Status::NoClearance, STR_CANT_BUILD_THIS_HERE, STR_NONE); + auto res = GameActions::Result(GameActions::Status::NoClearance, STR_CANT_BUILD_THIS_HERE, STR_NONE); switch (elementType) { case TILE_ELEMENT_TYPE_ENTRANCE: - map_obstruction_set_error_text(tileElement, *res); + map_obstruction_set_error_text(tileElement, res); return res; case TILE_ELEMENT_TYPE_PATH: if (tileElement->AsPath()->GetEdges() & (1 << _edge)) { - map_obstruction_set_error_text(tileElement, *res); + map_obstruction_set_error_text(tileElement, res); return res; } break; @@ -548,7 +555,7 @@ GameActions::Result::Ptr WallPlaceAction::WallCheckObstruction( int32_t direction = ((_edge - tileElement->GetDirection()) & TILE_ELEMENT_DIRECTION_MASK) + 8; if (!(tile.flags & (1 << direction))) { - map_obstruction_set_error_text(tileElement, *res); + map_obstruction_set_error_text(tileElement, res); return res; } break; @@ -558,7 +565,7 @@ GameActions::Result::Ptr WallPlaceAction::WallCheckObstruction( auto sceneryEntry = tileElement->AsSmallScenery()->GetEntry(); if (sceneryEntry != nullptr && sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_NO_WALLS)) { - map_obstruction_set_error_text(tileElement, *res); + map_obstruction_set_error_text(tileElement, res); return res; } break; @@ -572,7 +579,7 @@ GameActions::Result::Ptr WallPlaceAction::WallCheckObstruction( } } while (!(tileElement++)->IsLastForTile()); - return MakeResult(); + return GameActions::Result(); } bool WallPlaceAction::TrackIsAllowedWallEdges( diff --git a/src/openrct2/actions/WallPlaceAction.h b/src/openrct2/actions/WallPlaceAction.h index 5dd1bcf856..094d813b5a 100644 --- a/src/openrct2/actions/WallPlaceAction.h +++ b/src/openrct2/actions/WallPlaceAction.h @@ -42,8 +42,8 @@ public: uint16_t GetActionFlags() const override final; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: /** @@ -56,7 +56,7 @@ private: * * rct2: 0x006E5C1A */ - GameActions::Result::Ptr WallCheckObstruction(WallSceneryEntry* wall, int32_t z0, int32_t z1, bool* wallAcrossTrack) const; + GameActions::Result WallCheckObstruction(WallSceneryEntry* wall, int32_t z0, int32_t z1, bool* wallAcrossTrack) const; /** * Gets whether the given track type can have a wall placed on the edge of the given direction. diff --git a/src/openrct2/actions/WallRemoveAction.cpp b/src/openrct2/actions/WallRemoveAction.cpp index d3872d05a5..b7507a689b 100644 --- a/src/openrct2/actions/WallRemoveAction.cpp +++ b/src/openrct2/actions/WallRemoveAction.cpp @@ -38,54 +38,53 @@ void WallRemoveAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc); } -GameActions::Result::Ptr WallRemoveAction::Query() const +GameActions::Result WallRemoveAction::Query() const { - GameActions::Result::Ptr res = std::make_unique(); - res->Cost = 0; - res->Expenditure = ExpenditureType::Landscaping; + GameActions::Result res = GameActions::Result(); + res.Cost = 0; + res.Expenditure = ExpenditureType::Landscaping; if (!LocationValid(_loc)) { - return std::make_unique( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); } const bool isGhost = GetFlags() & GAME_COMMAND_FLAG_GHOST; if (!isGhost && !(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && !gCheatsSandboxMode && !map_is_location_owned(_loc)) { - return std::make_unique( - GameActions::Status::NotOwned, STR_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_CANT_REMOVE_THIS, STR_LAND_NOT_OWNED_BY_PARK); } TileElement* wallElement = GetFirstWallElementAt(_loc, isGhost); if (wallElement == nullptr) { - return std::make_unique( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); } - res->Cost = 0; + res.Cost = 0; return res; } -GameActions::Result::Ptr WallRemoveAction::Execute() const +GameActions::Result WallRemoveAction::Execute() const { - GameActions::Result::Ptr res = std::make_unique(); - res->Cost = 0; - res->Expenditure = ExpenditureType::Landscaping; + GameActions::Result res = GameActions::Result(); + res.Cost = 0; + res.Expenditure = ExpenditureType::Landscaping; const bool isGhost = GetFlags() & GAME_COMMAND_FLAG_GHOST; TileElement* wallElement = GetFirstWallElementAt(_loc, isGhost); if (wallElement == nullptr) { - return std::make_unique( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_REMOVE_THIS, STR_INVALID_SELECTION_OF_OBJECTS); } - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = tile_element_height(res->Position); + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = tile_element_height(res.Position); wallElement->RemoveBannerEntry(); map_invalidate_tile_zoom1({ _loc, wallElement->GetBaseZ(), (wallElement->GetBaseZ()) + 72 }); diff --git a/src/openrct2/actions/WallRemoveAction.h b/src/openrct2/actions/WallRemoveAction.h index 08e4076b70..98be700c42 100644 --- a/src/openrct2/actions/WallRemoveAction.h +++ b/src/openrct2/actions/WallRemoveAction.h @@ -22,8 +22,8 @@ public: void AcceptParameters(GameActionParameterVisitor& visitor) override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: TileElement* GetFirstWallElementAt(const CoordsXYZD& location, bool isGhost) const; diff --git a/src/openrct2/actions/WallSetColourAction.cpp b/src/openrct2/actions/WallSetColourAction.cpp index 6983e798ca..78462b3e3b 100644 --- a/src/openrct2/actions/WallSetColourAction.cpp +++ b/src/openrct2/actions/WallSetColourAction.cpp @@ -41,24 +41,24 @@ void WallSetColourAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_loc) << DS_TAG(_primaryColour) << DS_TAG(_secondaryColour) << DS_TAG(_tertiaryColour); } -GameActions::Result::Ptr WallSetColourAction::Query() const +GameActions::Result WallSetColourAction::Query() const { - auto res = MakeResult(); - res->ErrorTitle = STR_CANT_REPAINT_THIS; - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = _loc.z; + auto res = GameActions::Result(); + res.ErrorTitle = STR_CANT_REPAINT_THIS; + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = _loc.z; - res->Expenditure = ExpenditureType::Landscaping; + res.Expenditure = ExpenditureType::Landscaping; if (!LocationValid(_loc)) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_REPAINT_THIS, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_CANT_REPAINT_THIS, STR_LAND_NOT_OWNED_BY_PARK); } if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && !map_is_location_in_park(_loc) && !gCheatsSandboxMode) { - return MakeResult(GameActions::Status::NotOwned, STR_CANT_REPAINT_THIS, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_CANT_REPAINT_THIS, STR_LAND_NOT_OWNED_BY_PARK); } auto wallElement = map_get_wall_element_at(_loc); @@ -66,7 +66,7 @@ GameActions::Result::Ptr WallSetColourAction::Query() const { log_error( "Could not find wall element at: x = %d, y = %d, z = %d, direction = %u", _loc.x, _loc.y, _loc.z, _loc.direction); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } if ((GetFlags() & GAME_COMMAND_FLAG_GHOST) && !(wallElement->IsGhost())) @@ -78,19 +78,19 @@ GameActions::Result::Ptr WallSetColourAction::Query() const if (wallEntry == nullptr) { log_error("Could not find wall object"); - return MakeResult(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); } if (_primaryColour > 31) { log_error("Primary colour invalid: colour = %d", _primaryColour); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } if (_secondaryColour > 31) { log_error("Secondary colour invalid: colour = %d", _secondaryColour); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } if (wallEntry->flags & WALL_SCENERY_HAS_TERNARY_COLOUR) @@ -98,27 +98,27 @@ GameActions::Result::Ptr WallSetColourAction::Query() const if (_tertiaryColour > 31) { log_error("Tertiary colour invalid: colour = %d", _tertiaryColour); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } } return res; } -GameActions::Result::Ptr WallSetColourAction::Execute() const +GameActions::Result WallSetColourAction::Execute() const { - auto res = MakeResult(); - res->ErrorTitle = STR_CANT_REPAINT_THIS; - res->Position.x = _loc.x + 16; - res->Position.y = _loc.y + 16; - res->Position.z = _loc.z; - res->Expenditure = ExpenditureType::Landscaping; + auto res = GameActions::Result(); + res.ErrorTitle = STR_CANT_REPAINT_THIS; + res.Position.x = _loc.x + 16; + res.Position.y = _loc.y + 16; + res.Position.z = _loc.z; + res.Expenditure = ExpenditureType::Landscaping; auto wallElement = map_get_wall_element_at(_loc); if (wallElement == nullptr) { log_error( "Could not find wall element at: x = %d, y = %d, z = %d, direction = %u", _loc.x, _loc.y, _loc.z, _loc.direction); - return MakeResult(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } if ((GetFlags() & GAME_COMMAND_FLAG_GHOST) && !(wallElement->IsGhost())) @@ -130,7 +130,7 @@ GameActions::Result::Ptr WallSetColourAction::Execute() const if (wallEntry == nullptr) { log_error("Could not find wall object"); - return MakeResult(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); } wallElement->SetPrimaryColour(_primaryColour); diff --git a/src/openrct2/actions/WallSetColourAction.h b/src/openrct2/actions/WallSetColourAction.h index 7e21c6c08b..aa6b9bd979 100644 --- a/src/openrct2/actions/WallSetColourAction.h +++ b/src/openrct2/actions/WallSetColourAction.h @@ -26,6 +26,6 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; }; diff --git a/src/openrct2/actions/WaterLowerAction.cpp b/src/openrct2/actions/WaterLowerAction.cpp index 8946bdec0f..38ab72f4d6 100644 --- a/src/openrct2/actions/WaterLowerAction.cpp +++ b/src/openrct2/actions/WaterLowerAction.cpp @@ -30,19 +30,19 @@ void WaterLowerAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_range); } -GameActions::Result::Ptr WaterLowerAction::Query() const +GameActions::Result WaterLowerAction::Query() const { return QueryExecute(false); } -GameActions::Result::Ptr WaterLowerAction::Execute() const +GameActions::Result WaterLowerAction::Execute() const { return QueryExecute(true); } -GameActions::Result::Ptr WaterLowerAction::QueryExecute(bool isExecuting) const +GameActions::Result WaterLowerAction::QueryExecute(bool isExecuting) const { - auto res = MakeResult(); + auto res = GameActions::Result(); // Keep big coordinates within map boundaries auto aX = std::max(32, _range.GetLeft()); @@ -52,16 +52,16 @@ GameActions::Result::Ptr WaterLowerAction::QueryExecute(bool isExecuting) const MapRange validRange = MapRange{ aX, aY, bX, bY }; - res->Position.x = ((validRange.GetLeft() + validRange.GetRight()) / 2) + 16; - res->Position.y = ((validRange.GetTop() + validRange.GetBottom()) / 2) + 16; - int16_t z = tile_element_height(res->Position); - int16_t waterHeight = tile_element_water_height(res->Position); + res.Position.x = ((validRange.GetLeft() + validRange.GetRight()) / 2) + 16; + res.Position.y = ((validRange.GetTop() + validRange.GetBottom()) / 2) + 16; + int16_t z = tile_element_height(res.Position); + int16_t waterHeight = tile_element_water_height(res.Position); if (waterHeight != 0) { z = waterHeight; } - res->Position.z = z; - res->Expenditure = ExpenditureType::Landscaping; + res.Position.z = z; + res.Expenditure = ExpenditureType::Landscaping; uint8_t minHeight = GetLowestHeight(validRange); bool hasChanged = false; @@ -98,14 +98,14 @@ GameActions::Result::Ptr WaterLowerAction::QueryExecute(bool isExecuting) const waterSetHeightAction.SetFlags(GetFlags()); auto result = isExecuting ? GameActions::ExecuteNested(&waterSetHeightAction) : GameActions::QueryNested(&waterSetHeightAction); - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { - res->Cost += result->Cost; + res.Cost += result.Cost; hasChanged = true; } else { - result->ErrorTitle = STR_CANT_LOWER_WATER_LEVEL_HERE; + result.ErrorTitle = STR_CANT_LOWER_WATER_LEVEL_HERE; return result; } } @@ -113,14 +113,14 @@ GameActions::Result::Ptr WaterLowerAction::QueryExecute(bool isExecuting) const if (!withinOwnership) { - return std::make_unique( + return GameActions::Result( GameActions::Status::Disallowed, STR_CANT_LOWER_WATER_LEVEL_HERE, STR_LAND_NOT_OWNED_BY_PARK); ; } if (isExecuting && hasChanged) { - OpenRCT2::Audio::Play3D(OpenRCT2::Audio::SoundId::LayingOutWater, res->Position); + OpenRCT2::Audio::Play3D(OpenRCT2::Audio::SoundId::LayingOutWater, res.Position); } // Force ride construction to recheck area _currentTrackSelectionFlags |= TRACK_SELECTION_FLAG_RECHECK; diff --git a/src/openrct2/actions/WaterLowerAction.h b/src/openrct2/actions/WaterLowerAction.h index a7d5dc00df..ac5058b1db 100644 --- a/src/openrct2/actions/WaterLowerAction.h +++ b/src/openrct2/actions/WaterLowerAction.h @@ -23,10 +23,10 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr QueryExecute(bool isExecuting) const; + GameActions::Result QueryExecute(bool isExecuting) const; uint8_t GetLowestHeight(MapRange validRange) const; }; diff --git a/src/openrct2/actions/WaterRaiseAction.cpp b/src/openrct2/actions/WaterRaiseAction.cpp index 69ec4ae329..d42749b088 100644 --- a/src/openrct2/actions/WaterRaiseAction.cpp +++ b/src/openrct2/actions/WaterRaiseAction.cpp @@ -30,19 +30,19 @@ void WaterRaiseAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_range); } -GameActions::Result::Ptr WaterRaiseAction::Query() const +GameActions::Result WaterRaiseAction::Query() const { return QueryExecute(false); } -GameActions::Result::Ptr WaterRaiseAction::Execute() const +GameActions::Result WaterRaiseAction::Execute() const { return QueryExecute(true); } -GameActions::Result::Ptr WaterRaiseAction::QueryExecute(bool isExecuting) const +GameActions::Result WaterRaiseAction::QueryExecute(bool isExecuting) const { - auto res = MakeResult(); + auto res = GameActions::Result(); // Keep big coordinates within map boundaries auto aX = std::max(32, _range.GetLeft()); @@ -52,16 +52,16 @@ GameActions::Result::Ptr WaterRaiseAction::QueryExecute(bool isExecuting) const MapRange validRange = MapRange{ aX, aY, bX, bY }; - res->Position.x = ((validRange.GetLeft() + validRange.GetRight()) / 2) + 16; - res->Position.y = ((validRange.GetTop() + validRange.GetBottom()) / 2) + 16; - int32_t z = tile_element_height(res->Position); - int16_t waterHeight = tile_element_water_height(res->Position); + res.Position.x = ((validRange.GetLeft() + validRange.GetRight()) / 2) + 16; + res.Position.y = ((validRange.GetTop() + validRange.GetBottom()) / 2) + 16; + int32_t z = tile_element_height(res.Position); + int16_t waterHeight = tile_element_water_height(res.Position); if (waterHeight != 0) { z = waterHeight; } - res->Position.z = z; - res->Expenditure = ExpenditureType::Landscaping; + res.Position.z = z; + res.Expenditure = ExpenditureType::Landscaping; auto maxHeight = GetHighestHeight(validRange) / COORDS_Z_STEP; bool hasChanged = false; @@ -105,14 +105,14 @@ GameActions::Result::Ptr WaterRaiseAction::QueryExecute(bool isExecuting) const waterSetHeightAction.SetFlags(GetFlags()); auto result = isExecuting ? GameActions::ExecuteNested(&waterSetHeightAction) : GameActions::QueryNested(&waterSetHeightAction); - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { - res->Cost += result->Cost; + res.Cost += result.Cost; hasChanged = true; } else { - result->ErrorTitle = STR_CANT_RAISE_WATER_LEVEL_HERE; + result.ErrorTitle = STR_CANT_RAISE_WATER_LEVEL_HERE; return result; } } @@ -120,13 +120,13 @@ GameActions::Result::Ptr WaterRaiseAction::QueryExecute(bool isExecuting) const if (!withinOwnership) { - return std::make_unique( + return GameActions::Result( GameActions::Status::Disallowed, STR_CANT_RAISE_WATER_LEVEL_HERE, STR_LAND_NOT_OWNED_BY_PARK); } if (isExecuting && hasChanged) { - OpenRCT2::Audio::Play3D(OpenRCT2::Audio::SoundId::LayingOutWater, res->Position); + OpenRCT2::Audio::Play3D(OpenRCT2::Audio::SoundId::LayingOutWater, res.Position); } // Force ride construction to recheck area _currentTrackSelectionFlags |= TRACK_SELECTION_FLAG_RECHECK; diff --git a/src/openrct2/actions/WaterRaiseAction.h b/src/openrct2/actions/WaterRaiseAction.h index 9271fd527f..6c5fbc899a 100644 --- a/src/openrct2/actions/WaterRaiseAction.h +++ b/src/openrct2/actions/WaterRaiseAction.h @@ -23,10 +23,10 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: - GameActions::Result::Ptr QueryExecute(bool isExecuting) const; + GameActions::Result QueryExecute(bool isExecuting) const; uint16_t GetHighestHeight(MapRange validRange) const; }; diff --git a/src/openrct2/actions/WaterSetHeightAction.cpp b/src/openrct2/actions/WaterSetHeightAction.cpp index 844ed6dae5..3e458a6776 100644 --- a/src/openrct2/actions/WaterSetHeightAction.cpp +++ b/src/openrct2/actions/WaterSetHeightAction.cpp @@ -33,34 +33,34 @@ void WaterSetHeightAction::Serialise(DataSerialiser& stream) stream << DS_TAG(_coords) << DS_TAG(_height); } -GameActions::Result::Ptr WaterSetHeightAction::Query() const +GameActions::Result WaterSetHeightAction::Query() const { - auto res = MakeResult(); - res->Expenditure = ExpenditureType::Landscaping; - res->Position = { _coords, _height * COORDS_Z_STEP }; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::Landscaping; + res.Position = { _coords, _height * COORDS_Z_STEP }; if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && !gCheatsSandboxMode && gParkFlags & PARK_FLAGS_FORBID_LANDSCAPE_CHANGES) { - return MakeResult(GameActions::Status::Disallowed, STR_NONE, STR_FORBIDDEN_BY_THE_LOCAL_AUTHORITY); + return GameActions::Result(GameActions::Status::Disallowed, STR_NONE, STR_FORBIDDEN_BY_THE_LOCAL_AUTHORITY); } rct_string_id errorMsg = CheckParameters(); if (errorMsg != STR_NONE) { - return MakeResult(GameActions::Status::InvalidParameters, STR_NONE, errorMsg); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, errorMsg); } if (!LocationValid(_coords)) { - return MakeResult(GameActions::Status::NotOwned, STR_NONE, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_NONE, STR_LAND_NOT_OWNED_BY_PARK); } if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && !gCheatsSandboxMode) { if (!map_is_location_in_park(_coords)) { - return MakeResult(GameActions::Status::Disallowed, STR_NONE, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::Disallowed, STR_NONE, STR_LAND_NOT_OWNED_BY_PARK); } } @@ -68,7 +68,7 @@ GameActions::Result::Ptr WaterSetHeightAction::Query() const if (surfaceElement == nullptr) { log_error("Could not find surface element at: x %u, y %u", _coords.x, _coords.y); - return MakeResult(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); } int32_t zHigh = surfaceElement->GetBaseZ(); @@ -84,25 +84,25 @@ GameActions::Result::Ptr WaterSetHeightAction::Query() const zLow = temp; } - if (auto res2 = MapCanConstructAt({ _coords, zLow, zHigh }, { 0b1111, 0b1111 }); res2->Error != GameActions::Status::Ok) + if (auto res2 = MapCanConstructAt({ _coords, zLow, zHigh }, { 0b1111, 0b1111 }); res2.Error != GameActions::Status::Ok) { return res2; } if (surfaceElement->HasTrackThatNeedsWater()) { - return MakeResult(GameActions::Status::Disallowed, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Disallowed, STR_NONE, STR_NONE); } - res->Cost = 250; + res.Cost = 250; return res; } -GameActions::Result::Ptr WaterSetHeightAction::Execute() const +GameActions::Result WaterSetHeightAction::Execute() const { - auto res = MakeResult(); - res->Expenditure = ExpenditureType::Landscaping; - res->Position = { _coords, _height * COORDS_Z_STEP }; + auto res = GameActions::Result(); + res.Expenditure = ExpenditureType::Landscaping; + res.Position = { _coords, _height * COORDS_Z_STEP }; int32_t surfaceHeight = tile_element_height(_coords); footpath_remove_litter({ _coords, surfaceHeight }); @@ -113,7 +113,7 @@ GameActions::Result::Ptr WaterSetHeightAction::Execute() const if (surfaceElement == nullptr) { log_error("Could not find surface element at: x %u, y %u", _coords.x, _coords.y); - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); } if (_height > surfaceElement->base_height) @@ -126,7 +126,7 @@ GameActions::Result::Ptr WaterSetHeightAction::Execute() const } map_invalidate_tile_full(_coords); - res->Cost = 250; + res.Cost = 250; return res; } diff --git a/src/openrct2/actions/WaterSetHeightAction.h b/src/openrct2/actions/WaterSetHeightAction.h index 1289095cf3..dae310ee31 100644 --- a/src/openrct2/actions/WaterSetHeightAction.h +++ b/src/openrct2/actions/WaterSetHeightAction.h @@ -24,8 +24,8 @@ public: uint16_t GetActionFlags() const override; void Serialise(DataSerialiser& stream) override; - GameActions::Result::Ptr Query() const override; - GameActions::Result::Ptr Execute() const override; + GameActions::Result Query() const override; + GameActions::Result Execute() const override; private: rct_string_id CheckParameters() const; diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index bc5a9f72c5..bd5c83422d 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -3450,7 +3450,7 @@ void network_chat_show_server_greeting() } } -GameActions::Result::Ptr network_set_player_group( +GameActions::Result network_set_player_group( NetworkPlayerId_t actionPlayerId, NetworkPlayerId_t playerId, uint8_t groupId, bool isExecuting) { auto& network = OpenRCT2::GetContext()->GetNetwork(); @@ -3459,24 +3459,23 @@ GameActions::Result::Ptr network_set_player_group( NetworkGroup* fromgroup = network.GetGroupByID(actionPlayerId); if (player == nullptr) { - return std::make_unique(GameActions::Status::InvalidParameters, STR_CANT_DO_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_DO_THIS, STR_NONE); } if (network.GetGroupByID(groupId) == nullptr) { - return std::make_unique(GameActions::Status::InvalidParameters, STR_CANT_DO_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_DO_THIS, STR_NONE); } if (player->Flags & NETWORK_PLAYER_FLAG_ISSERVER) { - return std::make_unique( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_CHANGE_GROUP_THAT_THE_HOST_BELONGS_TO, STR_NONE); } if (groupId == 0 && fromgroup != nullptr && fromgroup->Id != 0) { - return std::make_unique( - GameActions::Status::InvalidParameters, STR_CANT_SET_TO_THIS_GROUP, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_SET_TO_THIS_GROUP, STR_NONE); } if (isExecuting) @@ -3507,10 +3506,10 @@ GameActions::Result::Ptr network_set_player_group( format_string(log_msg, 256, STR_LOG_SET_PLAYER_GROUP, args); network_append_server_log(log_msg); } - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr network_modify_groups( +GameActions::Result network_modify_groups( NetworkPlayerId_t actionPlayerId, ModifyGroupType type, uint8_t groupId, const std::string& name, uint32_t permissionIndex, PermissionState permissionState, bool isExecuting) { @@ -3524,7 +3523,7 @@ GameActions::Result::Ptr network_modify_groups( NetworkGroup* newgroup = network.AddGroup(); if (newgroup == nullptr) { - return std::make_unique(GameActions::Status::Unknown, STR_CANT_DO_THIS, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_CANT_DO_THIS, STR_NONE); } } } @@ -3533,14 +3532,13 @@ GameActions::Result::Ptr network_modify_groups( { if (groupId == 0) { - return std::make_unique( - GameActions::Status::Disallowed, STR_THIS_GROUP_CANNOT_BE_MODIFIED, STR_NONE); + return GameActions::Result(GameActions::Status::Disallowed, STR_THIS_GROUP_CANNOT_BE_MODIFIED, STR_NONE); } for (const auto& it : network.player_list) { if ((it.get())->Group == groupId) { - return std::make_unique( + return GameActions::Result( GameActions::Status::Disallowed, STR_CANT_REMOVE_GROUP_THAT_PLAYERS_BELONG_TO, STR_NONE); } } @@ -3554,8 +3552,7 @@ GameActions::Result::Ptr network_modify_groups( { if (groupId == 0) { // can't change admin group permissions - return std::make_unique( - GameActions::Status::Disallowed, STR_THIS_GROUP_CANNOT_BE_MODIFIED, STR_NONE); + return GameActions::Result(GameActions::Status::Disallowed, STR_THIS_GROUP_CANNOT_BE_MODIFIED, STR_NONE); } NetworkGroup* mygroup = nullptr; NetworkPlayer* player = network.GetPlayerByID(actionPlayerId); @@ -3565,7 +3562,7 @@ GameActions::Result::Ptr network_modify_groups( mygroup = network.GetGroupByID(player->Group); if (mygroup == nullptr || !mygroup->CanPerformAction(networkPermission)) { - return std::make_unique( + return GameActions::Result( GameActions::Status::Disallowed, STR_CANT_MODIFY_PERMISSION_THAT_YOU_DO_NOT_HAVE_YOURSELF, STR_NONE); } } @@ -3603,12 +3600,12 @@ GameActions::Result::Ptr network_modify_groups( if (strcmp(oldName, name.c_str()) == 0) { - return std::make_unique(); + return GameActions::Result(); } if (name.empty()) { - return std::make_unique( + return GameActions::Result( GameActions::Status::InvalidParameters, STR_CANT_RENAME_GROUP, STR_INVALID_GROUP_NAME); } @@ -3625,8 +3622,7 @@ GameActions::Result::Ptr network_modify_groups( { if (groupId == 0) { - return std::make_unique( - GameActions::Status::Disallowed, STR_CANT_SET_TO_THIS_GROUP, STR_NONE); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_SET_TO_THIS_GROUP, STR_NONE); } if (isExecuting) { @@ -3636,15 +3632,15 @@ GameActions::Result::Ptr network_modify_groups( break; default: log_error("Invalid Modify Group Type: %u", static_cast(type)); - return std::make_unique(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } network.SaveGroups(); - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr network_kick_player(NetworkPlayerId_t playerId, bool isExecuting) +GameActions::Result network_kick_player(NetworkPlayerId_t playerId, bool isExecuting) { auto& network = OpenRCT2::GetContext()->GetNetwork(); NetworkPlayer* player = network.GetPlayerByID(playerId); @@ -3652,12 +3648,12 @@ GameActions::Result::Ptr network_kick_player(NetworkPlayerId_t playerId, bool is { // Player might be already removed by the PLAYERLIST command, need to refactor non-game commands executing too // early. - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); } if (player->Flags & NETWORK_PLAYER_FLAG_ISSERVER) { - return std::make_unique(GameActions::Status::Disallowed, STR_CANT_KICK_THE_HOST, STR_NONE); + return GameActions::Result(GameActions::Status::Disallowed, STR_CANT_KICK_THE_HOST, STR_NONE); } if (isExecuting) @@ -3672,7 +3668,7 @@ GameActions::Result::Ptr network_kick_player(NetworkPlayerId_t playerId, bool is networkUserManager.Save(); } } - return std::make_unique(); + return GameActions::Result(); } uint8_t network_get_default_group() @@ -4094,20 +4090,20 @@ const char* network_get_group_name(uint32_t index) return ""; }; -GameActions::Result::Ptr network_set_player_group( +GameActions::Result network_set_player_group( NetworkPlayerId_t actionPlayerId, NetworkPlayerId_t playerId, uint8_t groupId, bool isExecuting) { - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr network_modify_groups( +GameActions::Result network_modify_groups( NetworkPlayerId_t actionPlayerId, ModifyGroupType type, uint8_t groupId, const std::string& name, uint32_t permissionIndex, PermissionState permissionState, bool isExecuting) { - return std::make_unique(); + return GameActions::Result(); } -GameActions::Result::Ptr network_kick_player(NetworkPlayerId_t playerId, bool isExecuting) +GameActions::Result network_kick_player(NetworkPlayerId_t playerId, bool isExecuting) { - return std::make_unique(); + return GameActions::Result(); } uint8_t network_get_default_group() { diff --git a/src/openrct2/network/network.h b/src/openrct2/network/network.h index 0c4b19e050..46960cc449 100644 --- a/src/openrct2/network/network.h +++ b/src/openrct2/network/network.h @@ -77,12 +77,12 @@ void network_set_player_group(uint32_t index, uint32_t groupindex); [[nodiscard]] uint8_t network_get_group_id(uint32_t index); [[nodiscard]] int32_t network_get_num_groups(); [[nodiscard]] const char* network_get_group_name(uint32_t index); -[[nodiscard]] std::unique_ptr network_set_player_group( +[[nodiscard]] GameActions::Result network_set_player_group( NetworkPlayerId_t actionPlayerId, NetworkPlayerId_t playerId, uint8_t groupId, bool isExecuting); -[[nodiscard]] std::unique_ptr network_modify_groups( +[[nodiscard]] GameActions::Result network_modify_groups( NetworkPlayerId_t actionPlayerId, ModifyGroupType type, uint8_t groupId, const std::string& name, uint32_t permissionIndex, PermissionState permissionState, bool isExecuting); -[[nodiscard]] std::unique_ptr network_kick_player(NetworkPlayerId_t playerId, bool isExecuting); +[[nodiscard]] GameActions::Result network_kick_player(NetworkPlayerId_t playerId, bool isExecuting); [[nodiscard]] uint8_t network_get_default_group(); [[nodiscard]] int32_t network_get_num_actions(); [[nodiscard]] rct_string_id network_get_action_name_string_id(uint32_t index); diff --git a/src/openrct2/peep/Peep.cpp b/src/openrct2/peep/Peep.cpp index 4666fb0db8..5a781108f9 100644 --- a/src/openrct2/peep/Peep.cpp +++ b/src/openrct2/peep/Peep.cpp @@ -572,7 +572,7 @@ void Peep::PickupAbort(int32_t old_x) // Returns GameActions::Status::OK when a peep can be dropped at the given location. When apply is set to true the peep gets // dropped. -std::unique_ptr Peep::Place(const TileCoordsXYZ& location, bool apply) +GameActions::Result Peep::Place(const TileCoordsXYZ& location, bool apply) { auto* pathElement = map_get_path_element_at(location); TileElement* tileElement = reinterpret_cast(pathElement); @@ -582,8 +582,7 @@ std::unique_ptr Peep::Place(const TileCoordsXYZ& location, } if (tileElement == nullptr) { - return std::make_unique( - GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_ERR_CANT_PLACE_PERSON_HERE, STR_NONE); } // Set the coordinate of destination to be exactly @@ -592,18 +591,17 @@ std::unique_ptr Peep::Place(const TileCoordsXYZ& location, if (!map_is_location_owned(destination)) { - return std::make_unique( - GameActions::Status::NotOwned, STR_ERR_CANT_PLACE_PERSON_HERE, STR_LAND_NOT_OWNED_BY_PARK); + return GameActions::Result(GameActions::Status::NotOwned, STR_ERR_CANT_PLACE_PERSON_HERE, STR_LAND_NOT_OWNED_BY_PARK); } if (auto res = MapCanConstructAt({ destination, destination.z, destination.z + (1 * 8) }, { 0b1111, 0 }); - res->Error != GameActions::Status::Ok) + res.Error != GameActions::Status::Ok) { - const auto stringId = std::get(res->ErrorMessage); + const auto stringId = std::get(res.ErrorMessage); if (stringId != STR_RAISE_OR_LOWER_LAND_FIRST && stringId != STR_FOOTPATH_IN_THE_WAY) { - return std::make_unique( - GameActions::Status::NoClearance, STR_ERR_CANT_PLACE_PERSON_HERE, stringId, res->ErrorMessageArgs.data()); + return GameActions::Result( + GameActions::Status::NoClearance, STR_ERR_CANT_PLACE_PERSON_HERE, stringId, res.ErrorMessageArgs.data()); } } @@ -626,7 +624,7 @@ std::unique_ptr Peep::Place(const TileCoordsXYZ& location, } } - return std::make_unique(); + return GameActions::Result(); } /** diff --git a/src/openrct2/peep/Peep.h b/src/openrct2/peep/Peep.h index f9b4402b59..ea7585db94 100644 --- a/src/openrct2/peep/Peep.h +++ b/src/openrct2/peep/Peep.h @@ -390,7 +390,7 @@ public: // Peep bool CanBePickedUp() const; void Pickup(); void PickupAbort(int32_t old_x); - [[nodiscard]] std::unique_ptr Place(const TileCoordsXYZ& location, bool apply); + [[nodiscard]] GameActions::Result Place(const TileCoordsXYZ& location, bool apply); void RemoveFromRide(); void FormatActionTo(Formatter&) const; void FormatNameTo(Formatter&) const; diff --git a/src/openrct2/peep/Staff.cpp b/src/openrct2/peep/Staff.cpp index 399ec278b6..1f42bb4027 100644 --- a/src/openrct2/peep/Staff.cpp +++ b/src/openrct2/peep/Staff.cpp @@ -130,7 +130,7 @@ bool staff_hire_new_member(StaffType staffType, EntertainerCostume entertainerTy }); auto res = GameActions::Execute(&hireStaffAction); - return res->Error == GameActions::Status::Ok; + return res.Error == GameActions::Status::Ok; } /** diff --git a/src/openrct2/ride/RideConstruction.cpp b/src/openrct2/ride/RideConstruction.cpp index 54fa013b39..8cc0a2d940 100644 --- a/src/openrct2/ride/RideConstruction.cpp +++ b/src/openrct2/ride/RideConstruction.cpp @@ -1164,7 +1164,7 @@ int32_t ride_get_refund_price(const Ride* ride) auto res = GameActions::Query(&trackRemoveAction); - cost += res->Cost; + cost += res.Cost; if (!track_block_get_next(&trackElement, &trackElement, nullptr, nullptr)) { @@ -1191,7 +1191,7 @@ money32 set_operating_setting(ride_id_t rideId, RideSetSetting setting, uint8_t { auto rideSetSetting = RideSetSettingAction(rideId, setting, value); auto res = GameActions::Execute(&rideSetSetting); - return res->Error == GameActions::Status::Ok ? 0 : MONEY32_UNDEFINED; + return res.Error == GameActions::Status::Ok ? 0 : MONEY32_UNDEFINED; } money32 set_operating_setting_nested(ride_id_t rideId, RideSetSetting setting, uint8_t value, uint8_t flags) @@ -1200,7 +1200,7 @@ money32 set_operating_setting_nested(ride_id_t rideId, RideSetSetting setting, u rideSetSetting.SetFlags(flags); auto res = flags & GAME_COMMAND_FLAG_APPLY ? GameActions::ExecuteNested(&rideSetSetting) : GameActions::QueryNested(&rideSetSetting); - return res->Error == GameActions::Status::Ok ? 0 : MONEY32_UNDEFINED; + return res.Error == GameActions::Status::Ok ? 0 : MONEY32_UNDEFINED; } /** diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 155bd70950..218dac7c67 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -951,18 +951,18 @@ static void TrackDesignUpdatePreviewBounds(TrackDesignState& tds, const CoordsXY std::max(tds.PreviewMax.z, coords.z) }; } -static GameActions::Result::Ptr TrackDesignPlaceSceneryElementRemoveGhost( +static GameActions::Result TrackDesignPlaceSceneryElementRemoveGhost( CoordsXY mapCoord, const TrackDesignSceneryElement& scenery, uint8_t rotation, int32_t originZ) { auto entryInfo = TrackDesignPlaceSceneryElementGetEntry(scenery); if (!entryInfo) { - return std::make_unique(); + return GameActions::Result(); } if (_trackDesignPlaceStateSceneryUnavailable) { - return std::make_unique(); + return GameActions::Result(); } int32_t z = (scenery.z * COORDS_Z_STEP) + originZ; @@ -999,7 +999,7 @@ static GameActions::Result::Ptr TrackDesignPlaceSceneryElementRemoveGhost( ga = std::make_unique(CoordsXYZ{ mapCoord.x, mapCoord.y, z }); break; default: - return std::make_unique(); + return GameActions::Result(); } ga->SetFlags(flags); @@ -1018,14 +1018,14 @@ static bool TrackDesignPlaceSceneryElementGetPlaceZ(TrackDesignState& tds, const return true; } -static GameActions::Result::Ptr TrackDesignPlaceSceneryElement( +static GameActions::Result TrackDesignPlaceSceneryElement( TrackDesignState& tds, CoordsXY mapCoord, uint8_t mode, const TrackDesignSceneryElement& scenery, uint8_t rotation, int32_t originZ) { if (tds.PlaceOperation == PTD_OPERATION_DRAW_OUTLINES && mode == 0) { TrackDesignAddSelectedTile(mapCoord); - return std::make_unique(); + return GameActions::Result(); } if (tds.PlaceOperation == PTD_OPERATION_REMOVE_GHOST && mode == 0) @@ -1036,7 +1036,7 @@ static GameActions::Result::Ptr TrackDesignPlaceSceneryElement( if (tds.PlaceOperation == PTD_OPERATION_GET_PLACE_Z) { TrackDesignPlaceSceneryElementGetPlaceZ(tds, scenery); - return std::make_unique(); + return GameActions::Result(); } money32 cost = 0; @@ -1044,13 +1044,13 @@ static GameActions::Result::Ptr TrackDesignPlaceSceneryElement( if (tds.PlaceOperation != PTD_OPERATION_PLACE_QUERY && tds.PlaceOperation != PTD_OPERATION_PLACE && tds.PlaceOperation != PTD_OPERATION_PLACE_GHOST && tds.PlaceOperation != PTD_OPERATION_PLACE_TRACK_PREVIEW) { - return std::make_unique(); + return GameActions::Result(); } auto entryInfo = TrackDesignPlaceSceneryElementGetEntry(scenery); if (!entryInfo) { - return std::make_unique(); + return GameActions::Result(); } int16_t z; @@ -1063,7 +1063,7 @@ static GameActions::Result::Ptr TrackDesignPlaceSceneryElement( { if (mode != 0) { - return std::make_unique(); + return GameActions::Result(); } rotation += scenery.flags; @@ -1099,14 +1099,14 @@ static GameActions::Result::Ptr TrackDesignPlaceSceneryElement( auto res = flags & GAME_COMMAND_FLAG_APPLY ? GameActions::ExecuteNested(&smallSceneryPlace) : GameActions::QueryNested(&smallSceneryPlace); - cost = res->Error == GameActions::Status::Ok ? res->Cost : 0; + cost = res.Error == GameActions::Status::Ok ? res.Cost : 0; break; } case ObjectType::LargeScenery: { if (mode != 0) { - return std::make_unique(); + return GameActions::Result(); } rotation += scenery.flags; @@ -1139,14 +1139,14 @@ static GameActions::Result::Ptr TrackDesignPlaceSceneryElement( auto res = flags & GAME_COMMAND_FLAG_APPLY ? GameActions::ExecuteNested(&sceneryPlaceAction) : GameActions::QueryNested(&sceneryPlaceAction); - cost = res->Cost; + cost = res.Cost; break; } case ObjectType::Walls: { if (mode != 0) { - return std::make_unique(); + return GameActions::Result(); } z = scenery.z * COORDS_Z_STEP + originZ; @@ -1179,7 +1179,7 @@ static GameActions::Result::Ptr TrackDesignPlaceSceneryElement( auto res = flags & GAME_COMMAND_FLAG_APPLY ? GameActions::ExecuteNested(&wallPlaceAction) : GameActions::QueryNested(&wallPlaceAction); - cost = res->Cost; + cost = res.Cost; break; } case ObjectType::Paths: @@ -1229,19 +1229,19 @@ static GameActions::Result::Ptr TrackDesignPlaceSceneryElement( auto res = flags & GAME_COMMAND_FLAG_APPLY ? GameActions::ExecuteNested(&footpathPlaceAction) : GameActions::QueryNested(&footpathPlaceAction); // Ignore failures - cost = res->Error == GameActions::Status::Ok ? res->Cost : 0; + cost = res.Error == GameActions::Status::Ok ? res.Cost : 0; } else { if (tds.PlaceOperation == PTD_OPERATION_PLACE_QUERY) { - return std::make_unique(); + return GameActions::Result(); } auto* pathElement = map_get_path_element_at({ mapCoord.x / 32, mapCoord.y / 32, z }); if (pathElement == nullptr) { - return std::make_unique(); + return GameActions::Result(); } footpath_queue_chain_reset(); @@ -1263,16 +1263,16 @@ static GameActions::Result::Ptr TrackDesignPlaceSceneryElement( } footpath_connect_edges(mapCoord, reinterpret_cast(pathElement), flags); footpath_update_queue_chains(); - return std::make_unique(); + return GameActions::Result(); } break; default: _trackDesignPlaceStateSceneryUnavailable = true; - return std::make_unique(); + return GameActions::Result(); } - auto res = std::make_unique(); - res->Cost = cost; + auto res = GameActions::Result(); + res.Cost = cost; return res; } @@ -1281,7 +1281,7 @@ static GameActions::Result::Ptr TrackDesignPlaceSceneryElement( * * rct2: 0x006D0964 */ -static GameActions::Result::Ptr TrackDesignPlaceAllScenery( +static GameActions::Result TrackDesignPlaceAllScenery( TrackDesignState& tds, const std::vector& sceneryList) { const auto& origin = tds.Origin; @@ -1311,7 +1311,7 @@ static GameActions::Result::Ptr TrackDesignPlaceAllScenery( TrackDesignUpdatePreviewBounds(tds, mapCoord); auto placementRes = TrackDesignPlaceSceneryElement(tds, mapCoord, mode, scenery, rotation, origin.z); - if (placementRes->Error != GameActions::Status::Ok) + if (placementRes.Error != GameActions::Status::Ok) { // Allow operation to fail when its removing ghosts. if (tds.PlaceOperation != PTD_OPERATION_REMOVE_GHOST) @@ -1319,18 +1319,17 @@ static GameActions::Result::Ptr TrackDesignPlaceAllScenery( return placementRes; } } - cost += placementRes->Cost; + cost += placementRes.Cost; } } - auto res = std::make_unique(); - res->Cost = cost; + auto res = GameActions::Result(); + res.Cost = cost; return res; } -static GameActions::Result::Ptr TrackDesignPlaceMaze( - TrackDesignState& tds, TrackDesign* td6, const CoordsXYZ& coords, Ride* ride) +static GameActions::Result TrackDesignPlaceMaze(TrackDesignState& tds, TrackDesign* td6, const CoordsXYZ& coords, Ride* ride) { if (tds.PlaceOperation == PTD_OPERATION_DRAW_OUTLINES) { @@ -1374,11 +1373,11 @@ static GameActions::Result::Ptr TrackDesignPlaceMaze( if (tds.PlaceOperation == PTD_OPERATION_PLACE_QUERY) { auto res = RideEntranceExitPlaceAction::TrackPlaceQuery({ mapCoord, coords.z }, false); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) { return res; } - cost = res->Cost; + cost = res.Cost; } else { @@ -1399,11 +1398,11 @@ static GameActions::Result::Ptr TrackDesignPlaceMaze( auto rideEntranceExitPlaceAction = RideEntranceExitPlaceAction(mapCoord, rotation, ride->id, 0, false); rideEntranceExitPlaceAction.SetFlags(flags); auto res = GameActions::ExecuteNested(&rideEntranceExitPlaceAction); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) { return res; } - cost = res->Cost; + cost = res.Cost; } tds.EntranceExitPlaced = true; _trackDesignPlaceStateEntranceExitPlaced = true; @@ -1418,11 +1417,11 @@ static GameActions::Result::Ptr TrackDesignPlaceMaze( if (tds.PlaceOperation == PTD_OPERATION_PLACE_QUERY) { auto res = RideEntranceExitPlaceAction::TrackPlaceQuery({ mapCoord, coords.z }, true); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) { return res; } - cost = res->Cost; + cost = res.Cost; } else { @@ -1443,11 +1442,11 @@ static GameActions::Result::Ptr TrackDesignPlaceMaze( auto rideEntranceExitPlaceAction = RideEntranceExitPlaceAction(mapCoord, rotation, ride->id, 0, true); rideEntranceExitPlaceAction.SetFlags(flags); auto res = GameActions::ExecuteNested(&rideEntranceExitPlaceAction); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) { return res; } - cost = res->Cost; + cost = res.Cost; } tds.EntranceExitPlaced = true; _trackDesignPlaceStateEntranceExitPlaced = true; @@ -1481,11 +1480,11 @@ static GameActions::Result::Ptr TrackDesignPlaceMaze( mazePlace.SetFlags(flags); auto res = flags & GAME_COMMAND_FLAG_APPLY ? GameActions::ExecuteNested(&mazePlace) : GameActions::QueryNested(&mazePlace); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) { return res; } - cost = res->Cost; + cost = res.Cost; break; } @@ -1536,14 +1535,13 @@ static GameActions::Result::Ptr TrackDesignPlaceMaze( tds.Origin = coords; - auto res = std::make_unique(); - res->Cost = totalCost; + auto res = GameActions::Result(); + res.Cost = totalCost; return res; } -static GameActions::Result::Ptr TrackDesignPlaceRide( - TrackDesignState& tds, TrackDesign* td6, const CoordsXYZ& origin, Ride* ride) +static GameActions::Result TrackDesignPlaceRide(TrackDesignState& tds, TrackDesign* td6, const CoordsXYZ& origin, Ride* ride) { tds.Origin = origin; if (tds.PlaceOperation == PTD_OPERATION_DRAW_OUTLINES) @@ -1639,12 +1637,12 @@ static GameActions::Result::Ptr TrackDesignPlaceRide( auto res = flags & GAME_COMMAND_FLAG_APPLY ? GameActions::ExecuteNested(&trackPlaceAction) : GameActions::QueryNested(&trackPlaceAction); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) { return res; } - totalCost += res->Cost; + totalCost += res.Cost; break; } case PTD_OPERATION_GET_PLACE_Z: @@ -1661,8 +1659,7 @@ static GameActions::Result::Ptr TrackDesignPlaceRide( auto surfaceElement = map_get_surface_element_at(tile); if (surfaceElement == nullptr) { - return std::make_unique( - GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } int32_t surfaceZ = surfaceElement->GetBaseZ(); @@ -1735,8 +1732,7 @@ static GameActions::Result::Ptr TrackDesignPlaceRide( newCoords.z += entrance.z; if (tile_element == nullptr) { - return std::make_unique( - GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } do @@ -1777,11 +1773,11 @@ static GameActions::Result::Ptr TrackDesignPlaceRide( auto res = flags & GAME_COMMAND_FLAG_APPLY ? GameActions::ExecuteNested(&rideEntranceExitPlaceAction) : GameActions::QueryNested(&rideEntranceExitPlaceAction); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) { return res; } - totalCost += res->Cost; + totalCost += res.Cost; tds.EntranceExitPlaced = true; _trackDesignPlaceStateEntranceExitPlaced = true; break; @@ -1793,13 +1789,12 @@ static GameActions::Result::Ptr TrackDesignPlaceRide( newCoords.z += tds.Origin.z; auto res = RideEntranceExitPlaceAction::TrackPlaceQuery(newCoords, false); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) { - return std::make_unique( - GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE); } - totalCost += res->Cost; + totalCost += res.Cost; tds.EntranceExitPlaced = true; _trackDesignPlaceStateEntranceExitPlaced = true; } @@ -1814,8 +1809,8 @@ static GameActions::Result::Ptr TrackDesignPlaceRide( ride->Delete(); } - auto res = std::make_unique(GameActions::Status::Ok, STR_NONE, STR_NONE); - res->Cost = totalCost; + auto res = GameActions::Result(GameActions::Status::Ok, STR_NONE, STR_NONE); + res.Cost = totalCost; return res; } @@ -1833,7 +1828,7 @@ static GameActions::Result::Ptr TrackDesignPlaceRide( * bl == 6, Clear white outlined track. * rct2: 0x006D01B3 */ -static GameActions::Result::Ptr TrackDesignPlaceVirtual( +static GameActions::Result TrackDesignPlaceVirtual( TrackDesignState& tds, TrackDesign* td6, uint8_t ptdOperation, bool placeScenery, Ride* ride, const CoordsXYZ& coords) { _trackDesignPlaceStateSceneryUnavailable = false; @@ -1858,7 +1853,7 @@ static GameActions::Result::Ptr TrackDesignPlaceVirtual( _currentRideIndex = ride->id; - GameActions::Result::Ptr trackPlaceRes; + GameActions::Result trackPlaceRes; if (td6->type == RIDE_TYPE_MAZE) { trackPlaceRes = TrackDesignPlaceMaze(tds, td6, coords, ride); @@ -1868,14 +1863,14 @@ static GameActions::Result::Ptr TrackDesignPlaceVirtual( trackPlaceRes = TrackDesignPlaceRide(tds, td6, coords, ride); } - if (trackPlaceRes->Error != GameActions::Status::Ok) + if (trackPlaceRes.Error != GameActions::Status::Ok) { return trackPlaceRes; } // Scenery elements auto sceneryPlaceRes = TrackDesignPlaceAllScenery(tds, td6->scenery_elements); - if (sceneryPlaceRes->Error != GameActions::Status::Ok) + if (sceneryPlaceRes.Error != GameActions::Status::Ok) { return sceneryPlaceRes; } @@ -1889,14 +1884,13 @@ static GameActions::Result::Ptr TrackDesignPlaceVirtual( map_invalidate_map_selection_tiles(); } - auto res = std::make_unique(); - res->Cost = trackPlaceRes->Cost + sceneryPlaceRes->Cost; + auto res = GameActions::Result(); + res.Cost = trackPlaceRes.Cost + sceneryPlaceRes.Cost; return res; } -GameActions::Result::Ptr TrackDesignPlace( - TrackDesign* td6, uint32_t flags, bool placeScenery, Ride* ride, const CoordsXYZ& coords) +GameActions::Result TrackDesignPlace(TrackDesign* td6, uint32_t flags, bool placeScenery, Ride* ride, const CoordsXYZ& coords) { uint32_t ptdOperation = (flags & GAME_COMMAND_FLAG_APPLY) != 0 ? PTD_OPERATION_PLACE : PTD_OPERATION_PLACE_QUERY; if ((flags & GAME_COMMAND_FLAG_APPLY) != 0 && (flags & GAME_COMMAND_FLAG_GHOST) != 0) @@ -1946,14 +1940,14 @@ static money32 TrackDesignCreateRide(int32_t type, int32_t subType, int32_t flag auto res = GameActions::ExecuteNested(&gameAction); // Callee's of this function expect MONEY32_UNDEFINED in case of failure. - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) { return MONEY32_UNDEFINED; } - *outRideIndex = res->GetData(); + *outRideIndex = res.GetData(); - return res->Cost; + return res.Cost; } /** @@ -2036,7 +2030,7 @@ static bool TrackDesignPlacePreview(TrackDesignState& tds, TrackDesign* td6, mon tds, td6, PTD_OPERATION_PLACE_TRACK_PREVIEW, placeScenery, ride, { mapSize, mapSize, z }); gParkFlags = backup_park_flags; - if (res->Error == GameActions::Status::Ok) + if (res.Error == GameActions::Status::Ok) { if (entry_index == OBJECT_ENTRY_INDEX_NULL) { @@ -2049,7 +2043,7 @@ static bool TrackDesignPlacePreview(TrackDesignState& tds, TrackDesign* td6, mon _currentTrackPieceDirection = backup_rotation; _trackDesignDrawingPreview = false; - *cost = res->Cost; + *cost = res.Cost; *outRide = ride; return true; } diff --git a/src/openrct2/ride/TrackDesign.h b/src/openrct2/ride/TrackDesign.h index d63dcb8c7e..962bc1b7aa 100644 --- a/src/openrct2/ride/TrackDesign.h +++ b/src/openrct2/ride/TrackDesign.h @@ -224,8 +224,7 @@ extern ride_id_t gTrackDesignSaveRideIndex; void TrackDesignMirror(TrackDesign* td6); -GameActions::Result::Ptr TrackDesignPlace( - TrackDesign* td6, uint32_t flags, bool placeScenery, Ride* ride, const CoordsXYZ& coords); +GameActions::Result TrackDesignPlace(TrackDesign* td6, uint32_t flags, bool placeScenery, Ride* ride, const CoordsXYZ& coords); void TrackDesignPreviewRemoveGhosts(TrackDesign* td6, Ride* ride, const CoordsXYZ& coords); void TrackDesignPreviewDrawOutlines(TrackDesign* td6, Ride* ride, const CoordsXYZ& coords); int32_t TrackDesignGetZPlacement(TrackDesign* td6, Ride* ride, const CoordsXYZ& coords); diff --git a/src/openrct2/scripting/ScriptEngine.cpp b/src/openrct2/scripting/ScriptEngine.cpp index 1e20e96a58..5536686607 100644 --- a/src/openrct2/scripting/ScriptEngine.cpp +++ b/src/openrct2/scripting/ScriptEngine.cpp @@ -762,8 +762,7 @@ void ScriptEngine::AddNetworkPlugin(std::string_view code) LoadPlugin(plugin); } -std::unique_ptr ScriptEngine::QueryOrExecuteCustomGameAction( - std::string_view id, std::string_view args, bool isExecute) +GameActions::Result ScriptEngine::QueryOrExecuteCustomGameAction(std::string_view id, std::string_view args, bool isExecute) { std::string actionz = std::string(id); auto kvp = _customActions.find(actionz); @@ -777,9 +776,9 @@ std::unique_ptr ScriptEngine::QueryOrExecuteCustomGameActio auto dukArgs = DuktapeTryParseJson(_context, argsz); if (!dukArgs) { - auto action = std::make_unique(); - action->Error = GameActions::Status::InvalidParameters; - action->ErrorTitle = "Invalid JSON"; + auto action = GameActions::Result(); + action.Error = GameActions::Status::InvalidParameters; + action.ErrorTitle = "Invalid JSON"; return action; } @@ -796,19 +795,19 @@ std::unique_ptr ScriptEngine::QueryOrExecuteCustomGameActio return DukToGameActionResult(dukResult); } - auto action = std::make_unique(); - action->Error = GameActions::Status::Unknown; - action->ErrorTitle = "Unknown custom action"; + auto action = GameActions::Result(); + action.Error = GameActions::Status::Unknown; + action.ErrorTitle = "Unknown custom action"; return action; } -std::unique_ptr ScriptEngine::DukToGameActionResult(const DukValue& d) +GameActions::Result ScriptEngine::DukToGameActionResult(const DukValue& d) { - auto result = std::make_unique(); - result->Error = static_cast(AsOrDefault(d["error"])); - result->ErrorTitle = AsOrDefault(d["errorTitle"]); - result->ErrorMessage = AsOrDefault(d["errorMessage"]); - result->Cost = AsOrDefault(d["cost"]); + auto result = GameActions::Result(); + result.Error = static_cast(AsOrDefault(d["error"])); + result.ErrorTitle = AsOrDefault(d["errorTitle"]); + result.ErrorMessage = AsOrDefault(d["errorMessage"]); + result.Cost = AsOrDefault(d["cost"]); auto expenditureType = AsOrDefault(d["expenditureType"]); if (!expenditureType.empty()) @@ -816,7 +815,7 @@ std::unique_ptr ScriptEngine::DukToGameActionResult(const D auto expenditure = StringToExpenditureType(expenditureType); if (expenditure != ExpenditureType::Count) { - result->Expenditure = expenditure; + result.Expenditure = expenditure; } } return result; @@ -859,7 +858,7 @@ ExpenditureType ScriptEngine::StringToExpenditureType(std::string_view expenditu return ExpenditureType::Count; } -DukValue ScriptEngine::GameActionResultToDuk(const GameAction& action, const std::unique_ptr& result) +DukValue ScriptEngine::GameActionResultToDuk(const GameAction& action, const GameActions::Result& result) { DukStackFrame frame(_context); DukObject obj(_context); @@ -869,33 +868,33 @@ DukValue ScriptEngine::GameActionResultToDuk(const GameAction& action, const std { obj.Set("player", action.GetPlayer()); } - if (result->Cost != MONEY32_UNDEFINED) + if (result.Cost != MONEY32_UNDEFINED) { - obj.Set("cost", result->Cost); + obj.Set("cost", result.Cost); } - if (!result->Position.IsNull()) + if (!result.Position.IsNull()) { - obj.Set("position", ToDuk(_context, result->Position)); + obj.Set("position", ToDuk(_context, result.Position)); } - if (result->Expenditure != ExpenditureType::Count) + if (result.Expenditure != ExpenditureType::Count) { - obj.Set("expenditureType", ExpenditureTypeToString(result->Expenditure)); + obj.Set("expenditureType", ExpenditureTypeToString(result.Expenditure)); } if (action.GetType() == GameCommand::CreateRide) { - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { - const auto rideIndex = result->GetData(); + const auto rideIndex = result.GetData(); obj.Set("ride", EnumValue(rideIndex)); } } else if (action.GetType() == GameCommand::HireNewStaffMember) { - if (result->Error == GameActions::Status::Ok) + if (result.Error == GameActions::Status::Ok) { - const auto actionResult = result->GetData(); + const auto actionResult = result.GetData(); if (actionResult.StaffEntityId != SPRITE_INDEX_NULL) { obj.Set("peep", actionResult.StaffEntityId); @@ -1099,7 +1098,7 @@ static std::unique_ptr CreateGameActionFromActionId(const std::strin return nullptr; } -void ScriptEngine::RunGameActionHooks(const GameAction& action, std::unique_ptr& result, bool isExecute) +void ScriptEngine::RunGameActionHooks(const GameAction& action, GameActions::Result& result, bool isExecute) { DukStackFrame frame(_context); @@ -1159,9 +1158,9 @@ void ScriptEngine::RunGameActionHooks(const GameAction& action, std::unique_ptr< auto error = AsOrDefault(dukResult["error"]); if (error != 0) { - result->Error = static_cast(error); - result->ErrorTitle = AsOrDefault(dukResult["errorTitle"]); - result->ErrorMessage = AsOrDefault(dukResult["errorMessage"]); + result.Error = static_cast(error); + result.ErrorTitle = AsOrDefault(dukResult["errorTitle"]); + result.ErrorMessage = AsOrDefault(dukResult["errorMessage"]); } } } diff --git a/src/openrct2/scripting/ScriptEngine.h b/src/openrct2/scripting/ScriptEngine.h index d3b153e0d2..b243a738db 100644 --- a/src/openrct2/scripting/ScriptEngine.h +++ b/src/openrct2/scripting/ScriptEngine.h @@ -220,11 +220,11 @@ namespace OpenRCT2::Scripting void AddNetworkPlugin(std::string_view code); - [[nodiscard]] std::unique_ptr QueryOrExecuteCustomGameAction( + [[nodiscard]] GameActions::Result QueryOrExecuteCustomGameAction( std::string_view id, std::string_view args, bool isExecute); bool RegisterCustomAction( const std::shared_ptr& plugin, std::string_view action, const DukValue& query, const DukValue& execute); - void RunGameActionHooks(const GameAction& action, std::unique_ptr& result, bool isExecute); + void RunGameActionHooks(const GameAction& action, GameActions::Result& result, bool isExecute); [[nodiscard]] std::unique_ptr CreateGameAction(const std::string& actionid, const DukValue& args); void SaveSharedStorage(); @@ -249,9 +249,8 @@ namespace OpenRCT2::Scripting void AutoReloadPlugins(); void ProcessREPL(); void RemoveCustomGameActions(const std::shared_ptr& plugin); - [[nodiscard]] std::unique_ptr DukToGameActionResult(const DukValue& d); - [[nodiscard]] DukValue GameActionResultToDuk( - const GameAction& action, const std::unique_ptr& result); + [[nodiscard]] GameActions::Result DukToGameActionResult(const DukValue& d); + [[nodiscard]] DukValue GameActionResultToDuk(const GameAction& action, const GameActions::Result& result); static std::string_view ExpenditureTypeToString(ExpenditureType expenditureType); static ExpenditureType StringToExpenditureType(std::string_view expenditureType); diff --git a/src/openrct2/scripting/bindings/game/ScContext.hpp b/src/openrct2/scripting/bindings/game/ScContext.hpp index 1005d9299b..acf1ab7a4a 100644 --- a/src/openrct2/scripting/bindings/game/ScContext.hpp +++ b/src/openrct2/scripting/bindings/game/ScContext.hpp @@ -261,7 +261,7 @@ namespace OpenRCT2::Scripting else { auto res = GameActions::Query(action.get()); - HandleGameActionResult(plugin, *res, callback); + HandleGameActionResult(plugin, res, callback); } } else diff --git a/src/openrct2/windows/_legacy.cpp b/src/openrct2/windows/_legacy.cpp index df54293b1b..e36165132b 100644 --- a/src/openrct2/windows/_legacy.cpp +++ b/src/openrct2/windows/_legacy.cpp @@ -83,7 +83,7 @@ money32 place_provisional_track_piece( trackPlaceAction.SetFlags(GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_NO_SPEND | GAME_COMMAND_FLAG_GHOST); // This command must not be sent over the network auto res = GameActions::Execute(&trackPlaceAction); - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) return MONEY32_UNDEFINED; int16_t z_begin, z_end; @@ -102,7 +102,7 @@ money32 place_provisional_track_piece( _unkF440C5 = { trackPos.x, trackPos.y, trackPos.z + z_begin, static_cast(trackDirection) }; _currentTrackSelectionFlags |= TRACK_SELECTION_FLAG_TRACK; - const auto resultData = res->GetData(); + const auto resultData = res.GetData(); viewport_set_visibility((resultData.GroundFlags & ELEMENT_IS_UNDERGROUND) ? 1 : 3); if (_currentTrackSlopeEnd != 0) viewport_set_visibility(2); @@ -116,7 +116,7 @@ money32 place_provisional_track_piece( virtual_floor_set_height(trackPos.z - z_begin + z_end); } - return res->Cost; + return res.Cost; } static std::tuple window_ride_construction_update_state_get_track_element() diff --git a/src/openrct2/world/ConstructionClearance.cpp b/src/openrct2/world/ConstructionClearance.cpp index 59b68498e0..170a859899 100644 --- a/src/openrct2/world/ConstructionClearance.cpp +++ b/src/openrct2/world/ConstructionClearance.cpp @@ -114,33 +114,33 @@ static bool MapLoc68BABCShouldContinue( * ebp = clearFunc * bl = bl */ -GameActions::Result::Ptr MapCanConstructWithClearAt( +GameActions::Result MapCanConstructWithClearAt( const CoordsXYRangedZ& pos, CLEAR_FUNC clearFunc, QuarterTile quarterTile, uint8_t flags, uint8_t crossingMode, bool isTree) { - auto res = std::make_unique(); + auto res = GameActions::Result(); uint8_t groundFlags = ELEMENT_IS_ABOVE_GROUND; - res->SetData(ConstructClearResult{ groundFlags }); + res.SetData(ConstructClearResult{ groundFlags }); bool canBuildCrossing = false; if (map_is_edge(pos)) { - res->Error = GameActions::Status::InvalidParameters; - res->ErrorMessage = STR_OFF_EDGE_OF_MAP; + res.Error = GameActions::Status::InvalidParameters; + res.ErrorMessage = STR_OFF_EDGE_OF_MAP; return res; } if (gCheatsDisableClearanceChecks) { - res->SetData(ConstructClearResult{ groundFlags }); + res.SetData(ConstructClearResult{ groundFlags }); return res; } TileElement* tileElement = map_get_first_element_at(pos); if (tileElement == nullptr) { - res->Error = GameActions::Status::Unknown; - res->ErrorMessage = STR_NONE; + res.Error = GameActions::Status::Unknown; + res.ErrorMessage = STR_NONE; return res; } @@ -154,13 +154,13 @@ GameActions::Result::Ptr MapCanConstructWithClearAt( if (tileElement->GetOccupiedQuadrants() & (quarterTile.GetBaseQuarterOccupied())) { if (MapLoc68BABCShouldContinue( - &tileElement, pos, clearFunc, flags, res->Cost, crossingMode, canBuildCrossing)) + &tileElement, pos, clearFunc, flags, res.Cost, crossingMode, canBuildCrossing)) { continue; } - map_obstruction_set_error_text(tileElement, *res); - res->Error = GameActions::Status::NoClearance; + map_obstruction_set_error_text(tileElement, res); + res.Error = GameActions::Status::NoClearance; return res; } } @@ -173,10 +173,10 @@ GameActions::Result::Ptr MapCanConstructWithClearAt( groundFlags |= ELEMENT_IS_UNDERWATER; if (waterHeight < pos.clearanceZ) { - if (clearFunc != nullptr && clearFunc(&tileElement, pos, flags, &res->Cost)) + if (clearFunc != nullptr && clearFunc(&tileElement, pos, flags, &res.Cost)) { - res->Error = GameActions::Status::NoClearance; - res->ErrorMessage = STR_CANNOT_BUILD_PARTLY_ABOVE_AND_PARTLY_BELOW_WATER; + res.Error = GameActions::Status::NoClearance; + res.ErrorMessage = STR_CANNOT_BUILD_PARTLY_ABOVE_AND_PARTLY_BELOW_WATER; return res; } } @@ -188,8 +188,8 @@ GameActions::Result::Ptr MapCanConstructWithClearAt( if (heightFromGround > (18 * COORDS_Z_STEP)) { - res->Error = GameActions::Status::Disallowed; - res->ErrorMessage = STR_LOCAL_AUTHORITY_WONT_ALLOW_CONSTRUCTION_ABOVE_TREE_HEIGHT; + res.Error = GameActions::Status::Disallowed; + res.ErrorMessage = STR_LOCAL_AUTHORITY_WONT_ALLOW_CONSTRUCTION_ABOVE_TREE_HEIGHT; return res; } } @@ -251,24 +251,24 @@ GameActions::Result::Ptr MapCanConstructWithClearAt( continue; } - if (MapLoc68BABCShouldContinue(&tileElement, pos, clearFunc, flags, res->Cost, crossingMode, canBuildCrossing)) + if (MapLoc68BABCShouldContinue(&tileElement, pos, clearFunc, flags, res.Cost, crossingMode, canBuildCrossing)) { continue; } - map_obstruction_set_error_text(tileElement, *res); - res->Error = GameActions::Status::NoClearance; + map_obstruction_set_error_text(tileElement, res); + res.Error = GameActions::Status::NoClearance; return res; } } } while (!(tileElement++)->IsLastForTile()); - res->SetData(ConstructClearResult{ groundFlags }); + res.SetData(ConstructClearResult{ groundFlags }); return res; } -GameActions::Result::Ptr MapCanConstructAt(const CoordsXYRangedZ& pos, QuarterTile bl) +GameActions::Result MapCanConstructAt(const CoordsXYRangedZ& pos, QuarterTile bl) { return MapCanConstructWithClearAt(pos, nullptr, bl, 0); } diff --git a/src/openrct2/world/ConstructionClearance.h b/src/openrct2/world/ConstructionClearance.h index 557bada5b5..a8f3aa34b6 100644 --- a/src/openrct2/world/ConstructionClearance.h +++ b/src/openrct2/world/ConstructionClearance.h @@ -30,10 +30,10 @@ struct ConstructClearResult uint8_t GroundFlags{ 0 }; }; -[[nodiscard]] GameActions::Result::Ptr MapCanConstructWithClearAt( +[[nodiscard]] GameActions::Result MapCanConstructWithClearAt( const CoordsXYRangedZ& pos, CLEAR_FUNC clearFunc, QuarterTile quarterTile, uint8_t flags, uint8_t crossingMode = CREATE_CROSSING_MODE_NONE, bool isTree = false); -[[nodiscard]] GameActions::Result::Ptr MapCanConstructAt(const CoordsXYRangedZ& pos, QuarterTile bl); +[[nodiscard]] GameActions::Result MapCanConstructAt(const CoordsXYRangedZ& pos, QuarterTile bl); void map_obstruction_set_error_text(TileElement* tileElement, GameActions::Result& res); diff --git a/src/openrct2/world/Entrance.cpp b/src/openrct2/world/Entrance.cpp index 03fa13ae2e..dc8e794780 100644 --- a/src/openrct2/world/Entrance.cpp +++ b/src/openrct2/world/Entrance.cpp @@ -46,7 +46,7 @@ static money32 RideEntranceExitPlaceGhost( rideEntranceExitPlaceAction.SetFlags(GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_GHOST); auto res = GameActions::Execute(&rideEntranceExitPlaceAction); - return res->Error == GameActions::Status::Ok ? res->Cost : MONEY32_UNDEFINED; + return res.Error == GameActions::Status::Ok ? res.Cost : MONEY32_UNDEFINED; } /** diff --git a/src/openrct2/world/Footpath.cpp b/src/openrct2/world/Footpath.cpp index b514ec864d..ae311220e0 100644 --- a/src/openrct2/world/Footpath.cpp +++ b/src/openrct2/world/Footpath.cpp @@ -135,10 +135,10 @@ money32 footpath_remove(const CoordsXYZ& footpathLoc, int32_t flags) if (flags & GAME_COMMAND_FLAG_APPLY) { auto res = GameActions::Execute(&action); - return res->Cost; + return res.Cost; } auto res = GameActions::Query(&action); - return res->Cost; + return res.Cost; } /** @@ -156,8 +156,8 @@ money32 footpath_provisional_set( auto footpathPlaceAction = FootpathPlaceAction(footpathLoc, slope, type, railingsType, INVALID_DIRECTION, constructFlags); footpathPlaceAction.SetFlags(GAME_COMMAND_FLAG_GHOST | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED); auto res = GameActions::Execute(&footpathPlaceAction); - cost = res->Error == GameActions::Status::Ok ? res->Cost : MONEY32_UNDEFINED; - if (res->Error == GameActions::Status::Ok) + cost = res.Error == GameActions::Status::Ok ? res.Cost : MONEY32_UNDEFINED; + if (res.Error == GameActions::Status::Ok) { gProvisionalFootpath.SurfaceIndex = type; gProvisionalFootpath.RailingsIndex = railingsType; @@ -181,7 +181,7 @@ money32 footpath_provisional_set( if (!scenery_tool_is_active()) { - if (res->Error != GameActions::Status::Ok) + if (res.Error != GameActions::Status::Ok) { // If we can't build this, don't show a virtual floor. virtual_floor_set_height(0); diff --git a/src/openrct2/world/Map.cpp b/src/openrct2/world/Map.cpp index 35dbf7ad7c..bc3dd3f8c4 100644 --- a/src/openrct2/world/Map.cpp +++ b/src/openrct2/world/Map.cpp @@ -1548,7 +1548,7 @@ static void clear_element_at(const CoordsXY& loc, TileElement** elementPtr) auto parkEntranceRemoveAction = ParkEntranceRemoveAction(CoordsXYZ{ seqLoc, element->GetBaseZ() }); auto result = GameActions::ExecuteNested(&parkEntranceRemoveAction); // If asking nicely did not work, forcibly remove this to avoid an infinite loop. - if (result->Error != GameActions::Status::Ok) + if (result.Error != GameActions::Status::Ok) { tile_element_remove(element); } @@ -1560,7 +1560,7 @@ static void clear_element_at(const CoordsXY& loc, TileElement** elementPtr) auto wallRemoveAction = WallRemoveAction(wallLocation); auto result = GameActions::ExecuteNested(&wallRemoveAction); // If asking nicely did not work, forcibly remove this to avoid an infinite loop. - if (result->Error != GameActions::Status::Ok) + if (result.Error != GameActions::Status::Ok) { tile_element_remove(element); } @@ -1572,7 +1572,7 @@ static void clear_element_at(const CoordsXY& loc, TileElement** elementPtr) { loc.x, loc.y, element->GetBaseZ(), element->GetDirection() }, element->AsLargeScenery()->GetSequenceIndex()); auto result = GameActions::ExecuteNested(&removeSceneryAction); // If asking nicely did not work, forcibly remove this to avoid an infinite loop. - if (result->Error != GameActions::Status::Ok) + if (result.Error != GameActions::Status::Ok) { tile_element_remove(element); } @@ -1584,7 +1584,7 @@ static void clear_element_at(const CoordsXY& loc, TileElement** elementPtr) { loc.x, loc.y, element->GetBaseZ(), element->AsBanner()->GetPosition() }); auto result = GameActions::ExecuteNested(&bannerRemoveAction); // If asking nicely did not work, forcibly remove this to avoid an infinite loop. - if (result->Error != GameActions::Status::Ok) + if (result.Error != GameActions::Status::Ok) { tile_element_remove(element); } diff --git a/src/openrct2/world/TileInspector.cpp b/src/openrct2/world/TileInspector.cpp index bdd2221a32..17baa1b128 100644 --- a/src/openrct2/world/TileInspector.cpp +++ b/src/openrct2/world/TileInspector.cpp @@ -137,7 +137,7 @@ namespace OpenRCT2::TileInspector * @param y The y coordinate of the tile * @param elementIndex The nth element on this tile */ - GameActionResultPtr RemoveElementAt(const CoordsXY& loc, int16_t elementIndex, bool isExecuting) + GameActions::Result RemoveElementAt(const CoordsXY& loc, int16_t elementIndex, bool isExecuting) { if (isExecuting) { @@ -145,7 +145,7 @@ namespace OpenRCT2::TileInspector TileElement* const tileElement = map_get_nth_element_at(loc, elementIndex); if (tileElement == nullptr) { - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); } auto largeScenery = tileElement->AsLargeScenery(); @@ -184,16 +184,16 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr SwapElementsAt(const CoordsXY& loc, int16_t first, int16_t second, bool isExecuting) + GameActions::Result SwapElementsAt(const CoordsXY& loc, int16_t first, int16_t second, bool isExecuting) { if (isExecuting) { if (!SwapTileElements(loc, first, second)) { - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); } map_invalidate_tile_full(loc); @@ -209,10 +209,10 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr RotateElementAt(const CoordsXY& loc, int32_t elementIndex, bool isExecuting) + GameActions::Result RotateElementAt(const CoordsXY& loc, int32_t elementIndex, bool isExecuting) { if (isExecuting) { @@ -221,7 +221,7 @@ namespace OpenRCT2::TileInspector TileElement* const tileElement = map_get_nth_element_at(loc, elementIndex); if (tileElement == nullptr) { - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); } switch (tileElement->GetType()) { @@ -291,14 +291,14 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr ToggleInvisibilityOfElementAt(const CoordsXY& loc, int32_t elementIndex, bool isExecuting) + GameActions::Result ToggleInvisibilityOfElementAt(const CoordsXY& loc, int32_t elementIndex, bool isExecuting) { if (!isExecuting) { - return std::make_unique(); + return GameActions::Result(); } TileElement* tileElement = map_get_nth_element_at(loc, elementIndex); @@ -311,15 +311,15 @@ namespace OpenRCT2::TileInspector window_invalidate_by_class(WC_TILE_INSPECTOR); } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr PasteElementAt(const CoordsXY& loc, TileElement element, bool isExecuting) + GameActions::Result PasteElementAt(const CoordsXY& loc, TileElement element, bool isExecuting) { // Make sure there is enough space for the new element if (!MapCheckCapacityAndReorganise(loc)) { - return std::make_unique(GameActions::Status::NoFreeElements, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::NoFreeElements, STR_NONE, STR_NONE); } auto tileLoc = TileCoordsXY(loc); @@ -335,8 +335,7 @@ namespace OpenRCT2::TileInspector if (newBanner == nullptr) { log_error("No free banners available"); - return std::make_unique( - GameActions::Status::Unknown, STR_TOO_MANY_BANNERS_IN_GAME, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_TOO_MANY_BANNERS_IN_GAME, STR_NONE); } newBanner->position = tileLoc; @@ -371,16 +370,16 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr SortElementsAt(const CoordsXY& loc, bool isExecuting) + GameActions::Result SortElementsAt(const CoordsXY& loc, bool isExecuting) { if (isExecuting) { const TileElement* const firstElement = map_get_first_element_at(loc); if (firstElement == nullptr) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); // Count elements on tile int32_t numElement = 0; @@ -429,43 +428,40 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - static GameActionResultPtr ValidateTileHeight(TileElement* const tileElement, int8_t heightOffset) + static GameActions::Result ValidateTileHeight(TileElement* const tileElement, int8_t heightOffset) { int16_t newBaseHeight = static_cast(tileElement->base_height + heightOffset); int16_t newClearanceHeight = static_cast(tileElement->clearance_height + heightOffset); if (newBaseHeight < 0) { - return std::make_unique(GameActions::Status::TooLow, STR_CANT_LOWER_ELEMENT_HERE, STR_TOO_LOW); + return GameActions::Result(GameActions::Status::TooLow, STR_CANT_LOWER_ELEMENT_HERE, STR_TOO_LOW); } if (newBaseHeight > MAX_ELEMENT_HEIGHT) { - return std::make_unique( - GameActions::Status::TooHigh, STR_CANT_RAISE_ELEMENT_HERE, STR_TOO_HIGH); + return GameActions::Result(GameActions::Status::TooHigh, STR_CANT_RAISE_ELEMENT_HERE, STR_TOO_HIGH); } if (newClearanceHeight < 0) { - return std::make_unique( - GameActions::Status::NoClearance, STR_CANT_LOWER_ELEMENT_HERE, STR_NO_CLEARANCE); + return GameActions::Result(GameActions::Status::NoClearance, STR_CANT_LOWER_ELEMENT_HERE, STR_NO_CLEARANCE); } if (newClearanceHeight > MAX_ELEMENT_HEIGHT) { - return std::make_unique( - GameActions::Status::NoClearance, STR_CANT_RAISE_ELEMENT_HERE, STR_NO_CLEARANCE); + return GameActions::Result(GameActions::Status::NoClearance, STR_CANT_RAISE_ELEMENT_HERE, STR_NO_CLEARANCE); } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr AnyBaseHeightOffset(const CoordsXY& loc, int16_t elementIndex, int8_t heightOffset, bool isExecuting) + GameActions::Result AnyBaseHeightOffset(const CoordsXY& loc, int16_t elementIndex, int8_t heightOffset, bool isExecuting) { TileElement* const tileElement = map_get_nth_element_at(loc, elementIndex); if (tileElement == nullptr) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); auto heightValidationResult = ValidateTileHeight(tileElement, heightOffset); - if (heightValidationResult->Error != GameActions::Status::Ok) + if (heightValidationResult.Error != GameActions::Status::Ok) return heightValidationResult; if (isExecuting) @@ -505,16 +501,16 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr SurfaceShowParkFences(const CoordsXY& loc, bool showFences, bool isExecuting) + GameActions::Result SurfaceShowParkFences(const CoordsXY& loc, bool showFences, bool isExecuting) { auto* const surfaceelement = map_get_surface_element_at(loc); // No surface element on tile if (surfaceelement == nullptr) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -531,16 +527,16 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr SurfaceToggleCorner(const CoordsXY& loc, int32_t cornerIndex, bool isExecuting) + GameActions::Result SurfaceToggleCorner(const CoordsXY& loc, int32_t cornerIndex, bool isExecuting) { auto* const surfaceElement = map_get_surface_element_at(loc); // No surface element on tile if (surfaceElement == nullptr) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -584,16 +580,16 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr SurfaceToggleDiagonal(const CoordsXY& loc, bool isExecuting) + GameActions::Result SurfaceToggleDiagonal(const CoordsXY& loc, bool isExecuting) { auto* const surfaceElement = map_get_surface_element_at(loc); // No surface element on tile if (surfaceElement == nullptr) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -608,15 +604,15 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr PathSetSloped(const CoordsXY& loc, int32_t elementIndex, bool sloped, bool isExecuting) + GameActions::Result PathSetSloped(const CoordsXY& loc, int32_t elementIndex, bool sloped, bool isExecuting) { TileElement* const pathElement = map_get_nth_element_at(loc, elementIndex); if (pathElement == nullptr || pathElement->GetType() != TILE_ELEMENT_TYPE_PATH) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -630,15 +626,15 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr PathSetBroken(const CoordsXY& loc, int32_t elementIndex, bool broken, bool isExecuting) + GameActions::Result PathSetBroken(const CoordsXY& loc, int32_t elementIndex, bool broken, bool isExecuting) { TileElement* const pathElement = map_get_nth_element_at(loc, elementIndex); if (pathElement == nullptr || pathElement->GetType() != TILE_ELEMENT_TYPE_PATH) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -652,15 +648,15 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr PathToggleEdge(const CoordsXY& loc, int32_t elementIndex, int32_t edgeIndex, bool isExecuting) + GameActions::Result PathToggleEdge(const CoordsXY& loc, int32_t elementIndex, int32_t edgeIndex, bool isExecuting) { TileElement* const pathElement = map_get_nth_element_at(loc, elementIndex); if (pathElement == nullptr || pathElement->GetType() != TILE_ELEMENT_TYPE_PATH) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -675,19 +671,19 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr EntranceMakeUsable(const CoordsXY& loc, int32_t elementIndex, bool isExecuting) + GameActions::Result EntranceMakeUsable(const CoordsXY& loc, int32_t elementIndex, bool isExecuting) { TileElement* const entranceElement = map_get_nth_element_at(loc, elementIndex); if (entranceElement == nullptr || entranceElement->GetType() != TILE_ELEMENT_TYPE_ENTRANCE) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); auto ride = get_ride(entranceElement->AsEntrance()->GetRideIndex()); if (ride == nullptr) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -715,15 +711,15 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr WallSetSlope(const CoordsXY& loc, int32_t elementIndex, int32_t slopeValue, bool isExecuting) + GameActions::Result WallSetSlope(const CoordsXY& loc, int32_t elementIndex, int32_t slopeValue, bool isExecuting) { TileElement* const wallElement = map_get_nth_element_at(loc, elementIndex); if (wallElement == nullptr || wallElement->GetType() != TILE_ELEMENT_TYPE_WALL) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -738,16 +734,16 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr WallAnimationFrameOffset( + GameActions::Result WallAnimationFrameOffset( const CoordsXY& loc, int16_t elementIndex, int8_t animationFrameOffset, bool isExecuting) { TileElement* const wallElement = map_get_nth_element_at(loc, elementIndex); if (wallElement == nullptr || wallElement->GetType() != TILE_ELEMENT_TYPE_WALL) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -762,20 +758,20 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } // Changes the height of all track elements that belong to the same track piece // Broxzier: Copied from track_remove and stripped of unneeded code, but I think this should be smaller - GameActionResultPtr TrackBaseHeightOffset(const CoordsXY& loc, int32_t elementIndex, int8_t offset, bool isExecuting) + GameActions::Result TrackBaseHeightOffset(const CoordsXY& loc, int32_t elementIndex, int8_t offset, bool isExecuting) { if (offset == 0) - return std::make_unique(); + return GameActions::Result(); TileElement* const trackElement = map_get_nth_element_at(loc, elementIndex); if (trackElement == nullptr || trackElement->GetType() != TILE_ELEMENT_TYPE_TRACK) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -787,7 +783,7 @@ namespace OpenRCT2::TileInspector auto rideIndex = trackElement->AsTrack()->GetRideIndex(); auto ride = get_ride(rideIndex); if (ride == nullptr) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); const auto& ted = GetTrackElementDescriptor(type); const auto* trackBlock = ted.Block; @@ -814,7 +810,7 @@ namespace OpenRCT2::TileInspector if (tileElement == nullptr) { log_error("Track map element part not found!"); - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); } // track_remove returns here on failure, not sure when this would ever be hit. Only thing I can think of is @@ -836,19 +832,19 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } // Sets chainlift, optionally for an entire track block // Broxzier: Basically a copy of the above function, with just two different lines... should probably be combined // somehow - GameActionResultPtr TrackSetChain( + GameActions::Result TrackSetChain( const CoordsXY& loc, int32_t elementIndex, bool entireTrackBlock, bool setChain, bool isExecuting) { TileElement* const trackElement = map_get_nth_element_at(loc, elementIndex); if (trackElement == nullptr || trackElement->GetType() != TILE_ELEMENT_TYPE_TRACK) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -860,7 +856,7 @@ namespace OpenRCT2::TileInspector trackElement->AsTrack()->SetHasChain(setChain); } - return std::make_unique(); + return GameActions::Result(); } auto type = trackElement->AsTrack()->GetTrackType(); @@ -871,7 +867,7 @@ namespace OpenRCT2::TileInspector auto rideIndex = trackElement->AsTrack()->GetRideIndex(); auto ride = get_ride(rideIndex); if (ride == nullptr) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); const auto& ted = GetTrackElementDescriptor(type); auto trackBlock = ted.Block; @@ -898,7 +894,7 @@ namespace OpenRCT2::TileInspector if (tileElement == nullptr) { log_error("Track map element part not found!"); - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); } // track_remove returns here on failure, not sure when this would ever be hit. Only thing I can think of is @@ -922,15 +918,15 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr TrackSetBlockBrake(const CoordsXY& loc, int32_t elementIndex, bool blockBrake, bool isExecuting) + GameActions::Result TrackSetBlockBrake(const CoordsXY& loc, int32_t elementIndex, bool blockBrake, bool isExecuting) { TileElement* const trackElement = map_get_nth_element_at(loc, elementIndex); if (trackElement == nullptr || trackElement->GetType() != TILE_ELEMENT_TYPE_TRACK) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -944,16 +940,16 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr TrackSetIndestructible( + GameActions::Result TrackSetIndestructible( const CoordsXY& loc, int32_t elementIndex, bool isIndestructible, bool isExecuting) { TileElement* const trackElement = map_get_nth_element_at(loc, elementIndex); if (trackElement == nullptr || trackElement->GetType() != TILE_ELEMENT_TYPE_TRACK) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -967,16 +963,16 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr ScenerySetQuarterLocation( + GameActions::Result ScenerySetQuarterLocation( const CoordsXY& loc, int32_t elementIndex, int32_t quarterIndex, bool isExecuting) { TileElement* const tileElement = map_get_nth_element_at(loc, elementIndex); if (tileElement == nullptr || tileElement->GetType() != TILE_ELEMENT_TYPE_SMALL_SCENERY) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -994,16 +990,16 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr ScenerySetQuarterCollision( + GameActions::Result ScenerySetQuarterCollision( const CoordsXY& loc, int32_t elementIndex, int32_t quarterIndex, bool isExecuting) { TileElement* const tileElement = map_get_nth_element_at(loc, elementIndex); if (tileElement == nullptr || tileElement->GetType() != TILE_ELEMENT_TYPE_SMALL_SCENERY) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -1019,15 +1015,15 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } - GameActionResultPtr BannerToggleBlockingEdge(const CoordsXY& loc, int32_t elementIndex, int32_t edgeIndex, bool isExecuting) + GameActions::Result BannerToggleBlockingEdge(const CoordsXY& loc, int32_t elementIndex, int32_t edgeIndex, bool isExecuting) { TileElement* const bannerElement = map_get_nth_element_at(loc, elementIndex); if (bannerElement == nullptr || bannerElement->GetType() != TILE_ELEMENT_TYPE_BANNER) - return std::make_unique(GameActions::Status::Unknown, STR_NONE, STR_NONE); + return GameActions::Result(GameActions::Status::Unknown, STR_NONE, STR_NONE); if (isExecuting) { @@ -1041,7 +1037,7 @@ namespace OpenRCT2::TileInspector } } - return std::make_unique(); + return GameActions::Result(); } // NOTE: The pointer is exclusively used to determine the current selection, diff --git a/src/openrct2/world/TileInspector.h b/src/openrct2/world/TileInspector.h index f8a03ac000..c7d89fad96 100644 --- a/src/openrct2/world/TileInspector.h +++ b/src/openrct2/world/TileInspector.h @@ -19,40 +19,38 @@ namespace GameActions namespace OpenRCT2::TileInspector { - using GameActionResultPtr = std::unique_ptr; - void SetSelectedElement(const TileElement* elem); bool IsElementSelected(const TileElement* elem); - GameActionResultPtr InsertCorruptElementAt(const CoordsXY& loc, int16_t elementIndex, bool isExecuting); - GameActionResultPtr RemoveElementAt(const CoordsXY& loc, int16_t elementIndex, bool isExecuting); - GameActionResultPtr SwapElementsAt(const CoordsXY& loc, int16_t first, int16_t second, bool isExecuting); - GameActionResultPtr RotateElementAt(const CoordsXY& loc, int32_t elementIndex, bool isExecuting); - GameActionResultPtr ToggleInvisibilityOfElementAt(const CoordsXY& loc, int32_t elementIndex, bool isExecuting); - GameActionResultPtr PasteElementAt(const CoordsXY& loc, TileElement element, bool isExecuting); - GameActionResultPtr SortElementsAt(const CoordsXY& loc, bool isExecuting); - GameActionResultPtr AnyBaseHeightOffset(const CoordsXY& loc, int16_t elementIndex, int8_t heightOffset, bool isExecuting); - GameActionResultPtr SurfaceShowParkFences(const CoordsXY& loc, bool showFences, bool isExecuting); - GameActionResultPtr SurfaceToggleCorner(const CoordsXY& loc, int32_t cornerIndex, bool isExecuting); - GameActionResultPtr SurfaceToggleDiagonal(const CoordsXY& loc, bool isExecuting); - GameActionResultPtr PathSetSloped(const CoordsXY& loc, int32_t elementIndex, bool sloped, bool isExecuting); - GameActionResultPtr PathSetBroken(const CoordsXY& loc, int32_t elementIndex, bool broken, bool isExecuting); - GameActionResultPtr PathToggleEdge(const CoordsXY& loc, int32_t elementIndex, int32_t cornerIndex, bool isExecuting); - GameActionResultPtr EntranceMakeUsable(const CoordsXY& loc, int32_t elementIndex, bool isExecuting); - GameActionResultPtr WallSetSlope(const CoordsXY& loc, int32_t elementIndex, int32_t slopeValue, bool isExecuting); - GameActionResultPtr WallAnimationFrameOffset( + GameActions::Result InsertCorruptElementAt(const CoordsXY& loc, int16_t elementIndex, bool isExecuting); + GameActions::Result RemoveElementAt(const CoordsXY& loc, int16_t elementIndex, bool isExecuting); + GameActions::Result SwapElementsAt(const CoordsXY& loc, int16_t first, int16_t second, bool isExecuting); + GameActions::Result RotateElementAt(const CoordsXY& loc, int32_t elementIndex, bool isExecuting); + GameActions::Result ToggleInvisibilityOfElementAt(const CoordsXY& loc, int32_t elementIndex, bool isExecuting); + GameActions::Result PasteElementAt(const CoordsXY& loc, TileElement element, bool isExecuting); + GameActions::Result SortElementsAt(const CoordsXY& loc, bool isExecuting); + GameActions::Result AnyBaseHeightOffset(const CoordsXY& loc, int16_t elementIndex, int8_t heightOffset, bool isExecuting); + GameActions::Result SurfaceShowParkFences(const CoordsXY& loc, bool showFences, bool isExecuting); + GameActions::Result SurfaceToggleCorner(const CoordsXY& loc, int32_t cornerIndex, bool isExecuting); + GameActions::Result SurfaceToggleDiagonal(const CoordsXY& loc, bool isExecuting); + GameActions::Result PathSetSloped(const CoordsXY& loc, int32_t elementIndex, bool sloped, bool isExecuting); + GameActions::Result PathSetBroken(const CoordsXY& loc, int32_t elementIndex, bool broken, bool isExecuting); + GameActions::Result PathToggleEdge(const CoordsXY& loc, int32_t elementIndex, int32_t cornerIndex, bool isExecuting); + GameActions::Result EntranceMakeUsable(const CoordsXY& loc, int32_t elementIndex, bool isExecuting); + GameActions::Result WallSetSlope(const CoordsXY& loc, int32_t elementIndex, int32_t slopeValue, bool isExecuting); + GameActions::Result WallAnimationFrameOffset( const CoordsXY& loc, int16_t elementIndex, int8_t animationFrameOffset, bool isExecuting); - GameActionResultPtr TrackBaseHeightOffset(const CoordsXY& loc, int32_t elementIndex, int8_t offset, bool isExecuting); - GameActionResultPtr TrackSetBlockBrake(const CoordsXY& loc, int32_t elementIndex, bool blockBrake, bool isExecuting); - GameActionResultPtr TrackSetIndestructible( + GameActions::Result TrackBaseHeightOffset(const CoordsXY& loc, int32_t elementIndex, int8_t offset, bool isExecuting); + GameActions::Result TrackSetBlockBrake(const CoordsXY& loc, int32_t elementIndex, bool blockBrake, bool isExecuting); + GameActions::Result TrackSetIndestructible( const CoordsXY& loc, int32_t elementIndex, bool isIndestructible, bool isExecuting); - GameActionResultPtr TrackSetChain( + GameActions::Result TrackSetChain( const CoordsXY& loc, int32_t elementIndex, bool entireTrackBlock, bool setChain, bool isExecuting); - GameActionResultPtr ScenerySetQuarterLocation( + GameActions::Result ScenerySetQuarterLocation( const CoordsXY& loc, int32_t elementIndex, int32_t quarterIndex, bool isExecuting); - GameActionResultPtr ScenerySetQuarterCollision( + GameActions::Result ScenerySetQuarterCollision( const CoordsXY& loc, int32_t elementIndex, int32_t quarterIndex, bool isExecuting); - GameActionResultPtr BannerToggleBlockingEdge( + GameActions::Result BannerToggleBlockingEdge( const CoordsXY& loc, int32_t elementIndex, int32_t edgeIndex, bool isExecuting); } // namespace OpenRCT2::TileInspector