From 96e2641d0d1e27318cb712ced4f1ed6909de7181 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Wed, 10 Nov 2021 15:57:44 +0200 Subject: [PATCH 1/5] Remove macro for registration and cleanup --- src/openrct2/ReplayManager.h | 2 +- src/openrct2/actions/BalloonPressAction.h | 6 +- src/openrct2/actions/BannerPlaceAction.h | 6 +- src/openrct2/actions/BannerRemoveAction.h | 6 +- src/openrct2/actions/BannerSetColourAction.h | 6 +- src/openrct2/actions/BannerSetNameAction.h | 6 +- src/openrct2/actions/BannerSetStyleAction.h | 6 +- src/openrct2/actions/ChangeMapSizeAction.h | 6 +- src/openrct2/actions/ClearAction.h | 4 +- src/openrct2/actions/ClimateSetAction.h | 6 +- src/openrct2/actions/CustomAction.h | 4 +- .../actions/FootpathAdditionPlaceAction.h | 6 +- .../actions/FootpathAdditionRemoveAction.h | 6 +- src/openrct2/actions/FootpathPlaceAction.h | 12 +- .../actions/FootpathPlaceFromTrackAction.h | 4 +- src/openrct2/actions/FootpathRemoveAction.h | 8 +- src/openrct2/actions/GameAction.cpp | 48 +-- src/openrct2/actions/GameAction.h | 32 +- .../actions/GameActionRegistration.cpp | 181 -------- src/openrct2/actions/GameActionRegistry.cpp | 399 ++++++++++++++++++ src/openrct2/actions/GuestSetFlagsAction.h | 6 +- src/openrct2/actions/GuestSetNameAction.h | 6 +- src/openrct2/actions/LandBuyRightsAction.h | 4 +- src/openrct2/actions/LandLowerAction.h | 4 +- src/openrct2/actions/LandRaiseAction.h | 4 +- src/openrct2/actions/LandSetHeightAction.h | 14 +- src/openrct2/actions/LandSetRightsAction.h | 4 +- src/openrct2/actions/LandSmoothAction.h | 4 +- .../actions/LargeSceneryPlaceAction.h | 14 +- .../actions/LargeSceneryRemoveAction.h | 6 +- .../actions/LargeScenerySetColourAction.h | 4 +- src/openrct2/actions/LoadOrQuitAction.h | 4 +- src/openrct2/actions/MazePlaceTrackAction.h | 6 +- src/openrct2/actions/MazeSetTrackAction.h | 6 +- .../actions/NetworkModifyGroupAction.h | 4 +- .../actions/ParkEntranceRemoveAction.h | 4 +- src/openrct2/actions/ParkMarketingAction.h | 6 +- src/openrct2/actions/ParkSetDateAction.h | 6 +- src/openrct2/actions/ParkSetLoanAction.h | 6 +- src/openrct2/actions/ParkSetNameAction.h | 6 +- src/openrct2/actions/ParkSetParameterAction.h | 4 +- .../actions/ParkSetResearchFundingAction.h | 4 +- src/openrct2/actions/PauseToggleAction.h | 2 +- src/openrct2/actions/PeepPickupAction.h | 6 +- .../actions/PlaceParkEntranceAction.h | 4 +- src/openrct2/actions/PlacePeepSpawnAction.h | 4 +- src/openrct2/actions/PlayerKickAction.h | 4 +- src/openrct2/actions/PlayerSetGroupAction.h | 4 +- src/openrct2/actions/RideCreateAction.h | 6 +- src/openrct2/actions/RideDemolishAction.h | 10 +- .../actions/RideEntranceExitPlaceAction.h | 6 +- .../actions/RideEntranceExitRemoveAction.h | 6 +- .../actions/RideSetAppearanceAction.h | 6 +- .../actions/RideSetColourSchemeAction.h | 6 +- src/openrct2/actions/RideSetNameAction.h | 6 +- src/openrct2/actions/RideSetPriceAction.h | 6 +- src/openrct2/actions/RideSetSettingAction.h | 14 +- src/openrct2/actions/RideSetStatusAction.h | 6 +- src/openrct2/actions/RideSetVehicleAction.h | 8 +- .../actions/ScenarioSetSettingAction.h | 4 +- src/openrct2/actions/SetCheatAction.h | 6 +- .../actions/SetParkEntranceFeeAction.h | 6 +- src/openrct2/actions/SignSetNameAction.h | 6 +- src/openrct2/actions/SignSetStyleAction.h | 4 +- .../actions/SmallSceneryPlaceAction.h | 6 +- .../actions/SmallSceneryRemoveAction.h | 6 +- .../actions/SmallScenerySetColourAction.h | 4 +- src/openrct2/actions/StaffFireAction.h | 4 +- src/openrct2/actions/StaffHireNewAction.h | 8 +- src/openrct2/actions/StaffSetColourAction.h | 4 +- src/openrct2/actions/StaffSetCostumeAction.h | 4 +- src/openrct2/actions/StaffSetNameAction.h | 4 +- src/openrct2/actions/StaffSetOrdersAction.h | 4 +- .../actions/StaffSetPatrolAreaAction.h | 4 +- src/openrct2/actions/SurfaceSetStyleAction.h | 4 +- src/openrct2/actions/TileModifyAction.h | 4 +- src/openrct2/actions/TrackDesignAction.h | 6 +- src/openrct2/actions/TrackPlaceAction.h | 6 +- src/openrct2/actions/TrackRemoveAction.h | 6 +- .../actions/TrackSetBrakeSpeedAction.h | 6 +- src/openrct2/actions/WallPlaceAction.h | 12 +- src/openrct2/actions/WallRemoveAction.h | 6 +- src/openrct2/actions/WallSetColourAction.h | 4 +- src/openrct2/actions/WaterLowerAction.h | 4 +- src/openrct2/actions/WaterRaiseAction.h | 4 +- src/openrct2/actions/WaterSetHeightAction.h | 4 +- src/openrct2/libopenrct2.vcxproj | 2 +- src/openrct2/network/network.h | 2 +- src/openrct2/scripting/ScriptEngine.h | 2 +- 89 files changed, 646 insertions(+), 484 deletions(-) delete mode 100644 src/openrct2/actions/GameActionRegistration.cpp create mode 100644 src/openrct2/actions/GameActionRegistry.cpp diff --git a/src/openrct2/ReplayManager.h b/src/openrct2/ReplayManager.h index 895a99fedd..82340d62de 100644 --- a/src/openrct2/ReplayManager.h +++ b/src/openrct2/ReplayManager.h @@ -15,7 +15,7 @@ #include #include -struct GameAction; +class GameAction; namespace OpenRCT2 { diff --git a/src/openrct2/actions/BalloonPressAction.h b/src/openrct2/actions/BalloonPressAction.h index 0bf2ece5f9..a7f83e6385 100644 --- a/src/openrct2/actions/BalloonPressAction.h +++ b/src/openrct2/actions/BalloonPressAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(BalloonPressAction, GameCommand::BalloonPress, GameActions::Result) +class BalloonPressAction final : public GameActionBase { uint16_t _spriteIndex{ SPRITE_INDEX_NULL }; @@ -19,11 +19,11 @@ public: BalloonPressAction() = default; BalloonPressAction(uint16_t spriteIndex); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/BannerPlaceAction.h b/src/openrct2/actions/BannerPlaceAction.h index 5de3d37e82..1aabed2077 100644 --- a/src/openrct2/actions/BannerPlaceAction.h +++ b/src/openrct2/actions/BannerPlaceAction.h @@ -16,7 +16,7 @@ struct BannerPlaceActionResult BannerIndex bannerId = BANNER_INDEX_NULL; }; -DEFINE_GAME_ACTION(BannerPlaceAction, GameCommand::PlaceBanner, GameActions::Result) +class BannerPlaceAction final : public GameActionBase { private: CoordsXYZD _loc; @@ -27,11 +27,11 @@ public: BannerPlaceAction() = default; BannerPlaceAction(const CoordsXYZD& loc, ObjectEntryIndex bannerType, colour_t primaryColour); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/BannerRemoveAction.h b/src/openrct2/actions/BannerRemoveAction.h index c12e2dcc23..f5acbc74b4 100644 --- a/src/openrct2/actions/BannerRemoveAction.h +++ b/src/openrct2/actions/BannerRemoveAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(BannerRemoveAction, GameCommand::RemoveBanner, GameActions::Result) +class BannerRemoveAction final : public GameActionBase { private: CoordsXYZD _loc; @@ -20,11 +20,11 @@ public: BannerRemoveAction() = default; BannerRemoveAction(const CoordsXYZD& loc); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/BannerSetColourAction.h b/src/openrct2/actions/BannerSetColourAction.h index 93cc2d2009..faffca5c96 100644 --- a/src/openrct2/actions/BannerSetColourAction.h +++ b/src/openrct2/actions/BannerSetColourAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(BannerSetColourAction, GameCommand::SetBannerColour, GameActions::Result) +class BannerSetColourAction final : public GameActionBase { private: CoordsXYZD _loc; @@ -21,11 +21,11 @@ public: BannerSetColourAction() = default; BannerSetColourAction(const CoordsXYZD& loc, uint8_t primaryColour); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/BannerSetNameAction.h b/src/openrct2/actions/BannerSetNameAction.h index 359a7aa424..6b6827183c 100644 --- a/src/openrct2/actions/BannerSetNameAction.h +++ b/src/openrct2/actions/BannerSetNameAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(BannerSetNameAction, GameCommand::SetBannerName, GameActions::Result) +class BannerSetNameAction final : public GameActionBase { private: BannerIndex _bannerIndex{ BANNER_INDEX_NULL }; @@ -21,11 +21,11 @@ public: BannerSetNameAction() = default; BannerSetNameAction(BannerIndex bannerIndex, const std::string& name); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/BannerSetStyleAction.h b/src/openrct2/actions/BannerSetStyleAction.h index 63bf027b98..df2f5d9e3a 100644 --- a/src/openrct2/actions/BannerSetStyleAction.h +++ b/src/openrct2/actions/BannerSetStyleAction.h @@ -21,7 +21,7 @@ enum class BannerSetStyleType : uint8_t Count }; -DEFINE_GAME_ACTION(BannerSetStyleAction, GameCommand::SetBannerStyle, GameActions::Result) +class BannerSetStyleAction final : public GameActionBase { private: BannerSetStyleType _type{ BannerSetStyleType::Count }; @@ -32,11 +32,11 @@ public: BannerSetStyleAction() = default; BannerSetStyleAction(BannerSetStyleType type, uint8_t bannerIndex, uint8_t parameter); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/ChangeMapSizeAction.h b/src/openrct2/actions/ChangeMapSizeAction.h index 93d3e021fc..a0bd4d1120 100644 --- a/src/openrct2/actions/ChangeMapSizeAction.h +++ b/src/openrct2/actions/ChangeMapSizeAction.h @@ -12,16 +12,16 @@ #include "../world/Map.h" #include "GameAction.h" -DEFINE_GAME_ACTION(ChangeMapSizeAction, GameCommand::ChangeMapSize, GameActions::Result) +class ChangeMapSizeAction final : public GameActionBase { public: ChangeMapSizeAction() = default; ChangeMapSizeAction(const int32_t targetSize); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/ClearAction.h b/src/openrct2/actions/ClearAction.h index 86c681ba2c..ff777923c8 100644 --- a/src/openrct2/actions/ClearAction.h +++ b/src/openrct2/actions/ClearAction.h @@ -24,7 +24,7 @@ namespace CLEARABLE_ITEMS constexpr ClearableItems SCENERY_FOOTPATH = 1 << 2; } // namespace CLEARABLE_ITEMS -DEFINE_GAME_ACTION(ClearAction, GameCommand::ClearScenery, GameActions::Result) +class ClearAction final : public GameActionBase { private: MapRange _range; @@ -34,7 +34,7 @@ public: ClearAction() = default; ClearAction(MapRange range, ClearableItems itemsToClear); - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/ClimateSetAction.h b/src/openrct2/actions/ClimateSetAction.h index 8e604f27f5..f9e59720c7 100644 --- a/src/openrct2/actions/ClimateSetAction.h +++ b/src/openrct2/actions/ClimateSetAction.h @@ -12,7 +12,7 @@ #include "../world/Climate.h" #include "GameAction.h" -DEFINE_GAME_ACTION(ClimateSetAction, GameCommand::SetClimate, GameActions::Result) +class ClimateSetAction final : public GameActionBase { private: ClimateType _climate{}; @@ -21,11 +21,11 @@ public: ClimateSetAction() = default; ClimateSetAction(ClimateType climate); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/CustomAction.h b/src/openrct2/actions/CustomAction.h index a0d5b63376..93e3c49d89 100644 --- a/src/openrct2/actions/CustomAction.h +++ b/src/openrct2/actions/CustomAction.h @@ -13,7 +13,7 @@ # include "GameAction.h" -DEFINE_GAME_ACTION(CustomAction, GameCommand::Custom, GameActions::Result) +class CustomAction final : public GameActionBase { private: std::string _id; @@ -28,7 +28,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/FootpathAdditionPlaceAction.h b/src/openrct2/actions/FootpathAdditionPlaceAction.h index 7b296363ae..71b4787a5c 100644 --- a/src/openrct2/actions/FootpathAdditionPlaceAction.h +++ b/src/openrct2/actions/FootpathAdditionPlaceAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(FootpathAdditionPlaceAction, GameCommand::PlaceFootpathAddition, GameActions::Result) +class FootpathAdditionPlaceAction final : public GameActionBase { private: CoordsXYZ _loc; @@ -21,11 +21,11 @@ public: FootpathAdditionPlaceAction() = default; FootpathAdditionPlaceAction(const CoordsXYZ& loc, ObjectEntryIndex pathItemType); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/FootpathAdditionRemoveAction.h b/src/openrct2/actions/FootpathAdditionRemoveAction.h index e53cdf59ca..3369e18a38 100644 --- a/src/openrct2/actions/FootpathAdditionRemoveAction.h +++ b/src/openrct2/actions/FootpathAdditionRemoveAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(FootpathAdditionRemoveAction, GameCommand::RemoveFootpathAddition, GameActions::Result) +class FootpathAdditionRemoveAction final : public GameActionBase { private: CoordsXYZ _loc; @@ -20,11 +20,11 @@ public: FootpathAdditionRemoveAction() = default; FootpathAdditionRemoveAction(const CoordsXYZ& loc); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/FootpathPlaceAction.h b/src/openrct2/actions/FootpathPlaceAction.h index 94df946e20..0ea7a63bd1 100644 --- a/src/openrct2/actions/FootpathPlaceAction.h +++ b/src/openrct2/actions/FootpathPlaceAction.h @@ -12,7 +12,7 @@ #include "../world/Footpath.h" #include "GameAction.h" -DEFINE_GAME_ACTION(FootpathPlaceAction, GameCommand::PlacePath, GameActions::Result) +class FootpathPlaceAction final : public GameActionBase { private: CoordsXYZ _loc; @@ -27,21 +27,21 @@ public: FootpathPlaceAction( const CoordsXYZ& loc, uint8_t slope, ObjectEntryIndex type, ObjectEntryIndex railingsType, Direction direction = INVALID_DIRECTION, PathConstructFlags constructFlags = 0); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr 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 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; void AutomaticallySetPeepSpawn() const; - void RemoveIntersectingWalls(PathElement * pathElement) const; + void RemoveIntersectingWalls(PathElement* pathElement) const; PathElement* map_get_footpath_element_slope(const CoordsXYZ& footpathPos, int32_t slope) const; bool IsSameAsPathElement(const PathElement* pathElement) const; bool IsSameAsEntranceElement(const EntranceElement& entranceElement) const; diff --git a/src/openrct2/actions/FootpathPlaceFromTrackAction.h b/src/openrct2/actions/FootpathPlaceFromTrackAction.h index 0eb0726dd7..adabeabd8e 100644 --- a/src/openrct2/actions/FootpathPlaceFromTrackAction.h +++ b/src/openrct2/actions/FootpathPlaceFromTrackAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(FootpathPlaceFromTrackAction, GameCommand::PlacePathFromTrack, GameActions::Result) +class FootpathPlaceFromTrackAction final : public GameActionBase { private: CoordsXYZ _loc; @@ -29,7 +29,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/FootpathRemoveAction.h b/src/openrct2/actions/FootpathRemoveAction.h index 0a7bc37f64..bc803f91df 100644 --- a/src/openrct2/actions/FootpathRemoveAction.h +++ b/src/openrct2/actions/FootpathRemoveAction.h @@ -12,7 +12,7 @@ #include "../management/Finance.h" #include "GameAction.h" -DEFINE_GAME_ACTION(FootpathRemoveAction, GameCommand::RemovePath, GameActions::Result) +class FootpathRemoveAction final : public GameActionBase { private: CoordsXYZ _loc; @@ -21,16 +21,16 @@ public: FootpathRemoveAction() = default; FootpathRemoveAction(const CoordsXYZ& location); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; private: TileElement* GetFootpathElement() const; - money32 GetRefundPrice(TileElement * footpathElement) const; + money32 GetRefundPrice(TileElement* footpathElement) const; GameActions::Result::Ptr RemoveBannersAtElement(const CoordsXY& loc, TileElement* tileElement) const; }; diff --git a/src/openrct2/actions/GameAction.cpp b/src/openrct2/actions/GameAction.cpp index ed31433c72..878f7e0c4b 100644 --- a/src/openrct2/actions/GameAction.cpp +++ b/src/openrct2/actions/GameAction.cpp @@ -60,31 +60,10 @@ namespace GameActions } }; - static GameActionFactory _actions[EnumValue(GameCommand::Count)]; static std::multiset _actionQueue; static uint32_t _nextUniqueId = 0; static bool _suspended = false; - GameActionFactory Register(GameCommand id, GameActionFactory factory) - { - const auto idx = static_cast(id); - - Guard::Assert(idx < std::size(_actions)); - Guard::ArgumentNotNull(factory); - - _actions[idx] = factory; - return factory; - } - - bool IsValidId(uint32_t id) - { - if (id < std::size(_actions)) - { - return _actions[id] != nullptr; - } - return false; - } - void SuspendQueue() { _suspended = true; @@ -186,31 +165,9 @@ namespace GameActions return; Register(); - initialized = true; } - std::unique_ptr Create(GameCommand id) - { - Initialize(); - - const auto idx = static_cast(id); - - GameAction* result = nullptr; - if (idx < std::size(_actions)) - { - GameActionFactory factory = _actions[idx]; - if (factory != nullptr) - { - result = factory(); - } - } -#ifdef _DEBUG - Guard::ArgumentNotNull(result, "Attempting to create unregistered gameaction: %u", id); -#endif - return std::unique_ptr(result); - } - GameAction::Ptr Clone(const GameAction* action) { std::unique_ptr ga = GameActions::Create(action->GetType()); @@ -516,6 +473,11 @@ namespace GameActions } } // namespace GameActions +const char* GameAction::GetName() const +{ + return GameActions::GetName(_type); +} + bool GameAction::LocationValid(const CoordsXY& coords) const { auto result = map_is_location_valid(coords); diff --git a/src/openrct2/actions/GameAction.h b/src/openrct2/actions/GameAction.h index c8429efb7d..6e80bb8bd6 100644 --- a/src/openrct2/actions/GameAction.h +++ b/src/openrct2/actions/GameAction.h @@ -92,11 +92,11 @@ public: } }; -struct GameAction +class GameAction { public: using Ptr = std::unique_ptr; - using Callback_t = std::function; + using Callback_t = std::function; private: GameCommand const _type; @@ -114,7 +114,7 @@ public: virtual ~GameAction() = default; - virtual const char* GetName() const = 0; + const char* GetName() const; virtual void AcceptParameters(GameActionParameterVisitor&) { @@ -235,11 +235,9 @@ template struct GameActionNameQuery { }; -template struct GameActionBase : GameAction +template struct GameActionBase : GameAction { public: - using Result = TResultType; - static constexpr GameCommand TYPE = TType; GameActionBase() @@ -247,15 +245,10 @@ public: { } - virtual const char* GetName() const override - { - return GameActionNameQuery::Name(); - } - protected: - template static constexpr std::unique_ptr MakeResult(TTypes&&... args) + template static std::unique_ptr MakeResult(TTypes&&... args) { - return std::make_unique(std::forward(args)...); + return std::make_unique(std::forward(args)...); } }; @@ -266,6 +259,7 @@ namespace GameActions void Initialize(); void Register(); bool IsValidId(uint32_t id); + const char* GetName(GameCommand id); // Halts the queue processing until ResumeQueue is called, any calls to ProcessQueue // will have no effect during suspension. It has no effect of actions that will not @@ -300,16 +294,4 @@ namespace GameActions return factory; } - // clang-format off -#define DEFINE_GAME_ACTION(cls, id, res) \ - template<> struct GameActionNameQuery \ - { \ - static const char* Name() \ - { \ - return #cls; \ - } \ - }; \ - struct cls final : public GameActionBase - // clang-format on - } // namespace GameActions diff --git a/src/openrct2/actions/GameActionRegistration.cpp b/src/openrct2/actions/GameActionRegistration.cpp deleted file mode 100644 index e48bfa8d73..0000000000 --- a/src/openrct2/actions/GameActionRegistration.cpp +++ /dev/null @@ -1,181 +0,0 @@ -/***************************************************************************** - * Copyright (c) 2014-2020 OpenRCT2 developers - * - * For a complete list of all authors, please refer to contributors.md - * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 - * - * OpenRCT2 is licensed under the GNU General Public License version 3. - *****************************************************************************/ - -#include "BalloonPressAction.h" -#include "BannerPlaceAction.h" -#include "BannerRemoveAction.h" -#include "BannerSetColourAction.h" -#include "BannerSetNameAction.h" -#include "BannerSetStyleAction.h" -#include "ChangeMapSizeAction.h" -#include "ClearAction.h" -#include "ClimateSetAction.h" -#include "CustomAction.h" -#include "FootpathAdditionPlaceAction.h" -#include "FootpathAdditionRemoveAction.h" -#include "FootpathPlaceAction.h" -#include "FootpathPlaceFromTrackAction.h" -#include "FootpathRemoveAction.h" -#include "GameAction.h" -#include "GuestSetFlagsAction.h" -#include "GuestSetNameAction.h" -#include "LandBuyRightsAction.h" -#include "LandLowerAction.h" -#include "LandRaiseAction.h" -#include "LandSetHeightAction.h" -#include "LandSetRightsAction.h" -#include "LandSmoothAction.h" -#include "LargeSceneryPlaceAction.h" -#include "LargeSceneryRemoveAction.h" -#include "LargeScenerySetColourAction.h" -#include "LoadOrQuitAction.h" -#include "MazePlaceTrackAction.h" -#include "MazeSetTrackAction.h" -#include "NetworkModifyGroupAction.h" -#include "ParkEntranceRemoveAction.h" -#include "ParkMarketingAction.h" -#include "ParkSetDateAction.h" -#include "ParkSetLoanAction.h" -#include "ParkSetNameAction.h" -#include "ParkSetParameterAction.h" -#include "ParkSetResearchFundingAction.h" -#include "PauseToggleAction.h" -#include "PeepPickupAction.h" -#include "PlaceParkEntranceAction.h" -#include "PlacePeepSpawnAction.h" -#include "PlayerKickAction.h" -#include "PlayerSetGroupAction.h" -#include "RideCreateAction.h" -#include "RideDemolishAction.h" -#include "RideEntranceExitPlaceAction.h" -#include "RideEntranceExitRemoveAction.h" -#include "RideSetAppearanceAction.h" -#include "RideSetColourSchemeAction.h" -#include "RideSetNameAction.h" -#include "RideSetPriceAction.h" -#include "RideSetSettingAction.h" -#include "RideSetStatusAction.h" -#include "RideSetVehicleAction.h" -#include "ScenarioSetSettingAction.h" -#include "SetCheatAction.h" -#include "SetParkEntranceFeeAction.h" -#include "SignSetNameAction.h" -#include "SignSetStyleAction.h" -#include "SmallSceneryPlaceAction.h" -#include "SmallSceneryRemoveAction.h" -#include "SmallScenerySetColourAction.h" -#include "StaffFireAction.h" -#include "StaffHireNewAction.h" -#include "StaffSetColourAction.h" -#include "StaffSetCostumeAction.h" -#include "StaffSetNameAction.h" -#include "StaffSetOrdersAction.h" -#include "StaffSetPatrolAreaAction.h" -#include "SurfaceSetStyleAction.h" -#include "TileModifyAction.h" -#include "TrackDesignAction.h" -#include "TrackPlaceAction.h" -#include "TrackRemoveAction.h" -#include "TrackSetBrakeSpeedAction.h" -#include "WallPlaceAction.h" -#include "WallRemoveAction.h" -#include "WallSetColourAction.h" -#include "WaterLowerAction.h" -#include "WaterRaiseAction.h" -#include "WaterSetHeightAction.h" - -namespace GameActions -{ - void Register() - { - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); -#ifdef ENABLE_SCRIPTING - Register(); -#endif - } -} // namespace GameActions diff --git a/src/openrct2/actions/GameActionRegistry.cpp b/src/openrct2/actions/GameActionRegistry.cpp new file mode 100644 index 0000000000..7e233600f7 --- /dev/null +++ b/src/openrct2/actions/GameActionRegistry.cpp @@ -0,0 +1,399 @@ +/***************************************************************************** + * Copyright (c) 2014-2020 OpenRCT2 developers + * + * For a complete list of all authors, please refer to contributors.md + * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is licensed under the GNU General Public License version 3. + *****************************************************************************/ + +#include "BalloonPressAction.h" +#include "BannerPlaceAction.h" +#include "BannerRemoveAction.h" +#include "BannerSetColourAction.h" +#include "BannerSetNameAction.h" +#include "BannerSetStyleAction.h" +#include "ChangeMapSizeAction.h" +#include "ClearAction.h" +#include "ClimateSetAction.h" +#include "CustomAction.h" +#include "FootpathAdditionPlaceAction.h" +#include "FootpathAdditionRemoveAction.h" +#include "FootpathPlaceAction.h" +#include "FootpathPlaceFromTrackAction.h" +#include "FootpathRemoveAction.h" +#include "GameAction.h" +#include "GuestSetFlagsAction.h" +#include "GuestSetNameAction.h" +#include "LandBuyRightsAction.h" +#include "LandLowerAction.h" +#include "LandRaiseAction.h" +#include "LandSetHeightAction.h" +#include "LandSetRightsAction.h" +#include "LandSmoothAction.h" +#include "LargeSceneryPlaceAction.h" +#include "LargeSceneryRemoveAction.h" +#include "LargeScenerySetColourAction.h" +#include "LoadOrQuitAction.h" +#include "MazePlaceTrackAction.h" +#include "MazeSetTrackAction.h" +#include "NetworkModifyGroupAction.h" +#include "ParkEntranceRemoveAction.h" +#include "ParkMarketingAction.h" +#include "ParkSetDateAction.h" +#include "ParkSetLoanAction.h" +#include "ParkSetNameAction.h" +#include "ParkSetParameterAction.h" +#include "ParkSetResearchFundingAction.h" +#include "PauseToggleAction.h" +#include "PeepPickupAction.h" +#include "PlaceParkEntranceAction.h" +#include "PlacePeepSpawnAction.h" +#include "PlayerKickAction.h" +#include "PlayerSetGroupAction.h" +#include "RideCreateAction.h" +#include "RideDemolishAction.h" +#include "RideEntranceExitPlaceAction.h" +#include "RideEntranceExitRemoveAction.h" +#include "RideSetAppearanceAction.h" +#include "RideSetColourSchemeAction.h" +#include "RideSetNameAction.h" +#include "RideSetPriceAction.h" +#include "RideSetSettingAction.h" +#include "RideSetStatusAction.h" +#include "RideSetVehicleAction.h" +#include "ScenarioSetSettingAction.h" +#include "SetCheatAction.h" +#include "SetParkEntranceFeeAction.h" +#include "SignSetNameAction.h" +#include "SignSetStyleAction.h" +#include "SmallSceneryPlaceAction.h" +#include "SmallSceneryRemoveAction.h" +#include "SmallScenerySetColourAction.h" +#include "StaffFireAction.h" +#include "StaffHireNewAction.h" +#include "StaffSetColourAction.h" +#include "StaffSetCostumeAction.h" +#include "StaffSetNameAction.h" +#include "StaffSetOrdersAction.h" +#include "StaffSetPatrolAreaAction.h" +#include "SurfaceSetStyleAction.h" +#include "TileModifyAction.h" +#include "TrackDesignAction.h" +#include "TrackPlaceAction.h" +#include "TrackRemoveAction.h" +#include "TrackSetBrakeSpeedAction.h" +#include "WallPlaceAction.h" +#include "WallRemoveAction.h" +#include "WallSetColourAction.h" +#include "WaterLowerAction.h" +#include "WaterRaiseAction.h" +#include "WaterSetHeightAction.h" + +namespace GameActions +{ + static GameActionFactory _actions[EnumValue(GameCommand::Count)]; + + GameActionFactory Register(GameCommand id, GameActionFactory factory) + { + const auto idx = static_cast(id); + + Guard::Assert(idx < std::size(_actions)); + Guard::ArgumentNotNull(factory); + + _actions[idx] = factory; + return factory; + } + + void Register() + { + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); +#ifdef ENABLE_SCRIPTING + Register(); +#endif + } + + const char* GetName(GameCommand id) + { + switch (id) + { + case GameCommand::SetRideAppearance: + return "SetRideAppearance"; + case GameCommand::SetLandHeight: + return "SetLandHeight"; + case GameCommand::TogglePause: + return "TogglePause"; + case GameCommand::PlaceTrack: + return "PlaceTrack"; + case GameCommand::RemoveTrack: + return "RemoveTrack"; + case GameCommand::LoadOrQuit: + return "LoadOrQuit"; + case GameCommand::CreateRide: + return "CreateRide"; + case GameCommand::DemolishRide: + return "DemolishRide"; + case GameCommand::SetRideStatus: + return "SetRideStatus"; + case GameCommand::SetRideVehicles: + return "SetRideVehicles"; + case GameCommand::SetRideName: + return "SetRideName"; + case GameCommand::SetRideSetting: + return "SetRideSetting"; + case GameCommand::PlaceRideEntranceOrExit: + return "PlaceRideEntranceOrExit"; + case GameCommand::RemoveRideEntranceOrExit: + return "RemoveRideEntranceOrExit"; + case GameCommand::RemoveScenery: + return "RemoveScenery"; + case GameCommand::PlaceScenery: + return "PlaceScenery"; + case GameCommand::SetWaterHeight: + return "SetWaterHeight"; + case GameCommand::PlacePath: + return "PlacePath"; + case GameCommand::PlacePathFromTrack: + return "PlacePathFromTrack"; + case GameCommand::RemovePath: + return "RemovePath"; + case GameCommand::ChangeSurfaceStyle: + return "ChangeSurfaceStyle"; + case GameCommand::SetRidePrice: + return "SetRidePrice"; + case GameCommand::SetGuestName: + return "SetGuestName"; + case GameCommand::SetStaffName: + return "SetStaffName"; + case GameCommand::RaiseLand: + return "RaiseLand"; + case GameCommand::LowerLand: + return "LowerLand"; + case GameCommand::EditLandSmooth: + return "EditLandSmooth"; + case GameCommand::RaiseWater: + return "RaiseWater"; + case GameCommand::LowerWater: + return "LowerWater"; + case GameCommand::SetBrakesSpeed: + return "SetBrakesSpeed"; + case GameCommand::HireNewStaffMember: + return "HireNewStaffMember"; + case GameCommand::SetStaffPatrol: + return "SetStaffPatrol"; + case GameCommand::FireStaffMember: + return "FireStaffMember"; + case GameCommand::SetStaffOrders: + return "SetStaffOrders"; + case GameCommand::SetParkName: + return "SetParkName"; + case GameCommand::SetParkOpen: + return "SetParkOpen"; + case GameCommand::BuyLandRights: + return "BuyLandRights"; + case GameCommand::PlaceParkEntrance: + return "PlaceParkEntrance"; + case GameCommand::RemoveParkEntrance: + return "RemoveParkEntrance"; + case GameCommand::SetMazeTrack: + return "SetMazeTrack"; + case GameCommand::SetParkEntranceFee: + return "SetParkEntranceFee"; + case GameCommand::SetStaffColour: + return "SetStaffColour"; + case GameCommand::PlaceWall: + return "PlaceWall"; + case GameCommand::RemoveWall: + return "RemoveWall"; + case GameCommand::PlaceLargeScenery: + return "PlaceLargeScenery"; + case GameCommand::RemoveLargeScenery: + return "RemoveLargeScenery"; + case GameCommand::SetCurrentLoan: + return "SetCurrentLoan"; + case GameCommand::SetResearchFunding: + return "SetResearchFunding"; + case GameCommand::PlaceTrackDesign: + return "PlaceTrackDesign"; + case GameCommand::StartMarketingCampaign: + return "StartMarketingCampaign"; + case GameCommand::PlaceMazeDesign: + return "PlaceMazeDesign"; + case GameCommand::PlaceBanner: + return "PlaceBanner"; + case GameCommand::RemoveBanner: + return "RemoveBanner"; + case GameCommand::SetSceneryColour: + return "SetSceneryColour"; + case GameCommand::SetWallColour: + return "SetWallColour"; + case GameCommand::SetLargeSceneryColour: + return "SetLargeSceneryColour"; + case GameCommand::SetBannerColour: + return "SetBannerColour"; + case GameCommand::SetLandOwnership: + return "SetLandOwnership"; + case GameCommand::ClearScenery: + return "ClearScenery"; + case GameCommand::SetBannerName: + return "SetBannerName"; + case GameCommand::SetSignName: + return "SetSignName"; + case GameCommand::SetBannerStyle: + return "SetBannerStyle"; + case GameCommand::SetSignStyle: + return "SetSignStyle"; + case GameCommand::SetPlayerGroup: + return "SetPlayerGroup"; + case GameCommand::ModifyGroups: + return "ModifyGroups"; + case GameCommand::KickPlayer: + return "KickPlayer"; + case GameCommand::Cheat: + return "Cheat"; + case GameCommand::PickupGuest: + return "PickupGuest"; + case GameCommand::PickupStaff: + return "PickupStaff"; + case GameCommand::BalloonPress: + return "BalloonPress"; + case GameCommand::ModifyTile: + return "ModifyTile"; + case GameCommand::EditScenarioOptions: + return "EditScenarioOptions"; + case GameCommand::PlacePeepSpawn: + return "PlacePeepSpawn"; + case GameCommand::SetClimate: + return "SetClimate"; + case GameCommand::SetColourScheme: + return "SetColourScheme"; + case GameCommand::SetStaffCostume: + return "SetStaffCostume"; + case GameCommand::PlaceFootpathAddition: + return "PlaceFootpathAddition"; + case GameCommand::RemoveFootpathAddition: + return "RemoveFootpathAddition"; + case GameCommand::GuestSetFlags: + return "GuestSetFlags"; + case GameCommand::SetDate: + return "SetDate"; + case GameCommand::Custom: + return "Custom"; + case GameCommand::ChangeMapSize: + return "ChangeMapSize"; + default: + break; + } + return ""; + } + + std::unique_ptr Create(GameCommand id) + { + Initialize(); + + const auto idx = static_cast(id); + + GameAction* result = nullptr; + if (idx < std::size(_actions)) + { + GameActionFactory factory = _actions[idx]; + if (factory != nullptr) + { + result = factory(); + } + } +#ifdef _DEBUG + Guard::ArgumentNotNull(result, "Attempting to create unregistered gameaction: %u", id); +#endif + return std::unique_ptr(result); + } + + bool IsValidId(uint32_t id) + { + if (id < std::size(_actions)) + { + return _actions[id] != nullptr; + } + return false; + } + +} // namespace GameActions diff --git a/src/openrct2/actions/GuestSetFlagsAction.h b/src/openrct2/actions/GuestSetFlagsAction.h index f162e1216a..66462b8e3b 100644 --- a/src/openrct2/actions/GuestSetFlagsAction.h +++ b/src/openrct2/actions/GuestSetFlagsAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(GuestSetFlagsAction, GameCommand::GuestSetFlags, GameActions::Result) +class GuestSetFlagsAction final : public GameActionBase { private: uint16_t _peepId{ SPRITE_INDEX_NULL }; @@ -21,11 +21,11 @@ public: GuestSetFlagsAction() = default; GuestSetFlagsAction(uint16_t peepId, uint32_t flags); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/GuestSetNameAction.h b/src/openrct2/actions/GuestSetNameAction.h index 6611f075e2..c1c404989b 100644 --- a/src/openrct2/actions/GuestSetNameAction.h +++ b/src/openrct2/actions/GuestSetNameAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(GuestSetNameAction, GameCommand::SetGuestName, GameActions::Result) +class GuestSetNameAction final : public GameActionBase { private: uint16_t _spriteIndex{ SPRITE_INDEX_NULL }; @@ -24,11 +24,11 @@ public: uint16_t GetSpriteIndex() const; std::string GetGuestName() const; - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/LandBuyRightsAction.h b/src/openrct2/actions/LandBuyRightsAction.h index 8d7cf06ee9..ff4c7e2ca9 100644 --- a/src/openrct2/actions/LandBuyRightsAction.h +++ b/src/openrct2/actions/LandBuyRightsAction.h @@ -18,7 +18,7 @@ enum class LandBuyRightSetting : uint8_t Count }; -DEFINE_GAME_ACTION(LandBuyRightsAction, GameCommand::BuyLandRights, GameActions::Result) +class LandBuyRightsAction final : public GameActionBase { private: MapRange _range; @@ -36,7 +36,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/LandLowerAction.h b/src/openrct2/actions/LandLowerAction.h index 283e12a873..5f6248ed61 100644 --- a/src/openrct2/actions/LandLowerAction.h +++ b/src/openrct2/actions/LandLowerAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(LandLowerAction, GameCommand::LowerLand, GameActions::Result) +class LandLowerAction final : public GameActionBase { private: CoordsXY _coords; @@ -24,7 +24,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/LandRaiseAction.h b/src/openrct2/actions/LandRaiseAction.h index 429f7d10b3..19a47926a6 100644 --- a/src/openrct2/actions/LandRaiseAction.h +++ b/src/openrct2/actions/LandRaiseAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(LandRaiseAction, GameCommand::RaiseLand, GameActions::Result) +class LandRaiseAction final : public GameActionBase { private: CoordsXY _coords; @@ -24,7 +24,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/LandSetHeightAction.h b/src/openrct2/actions/LandSetHeightAction.h index 26224190ab..854bb34c0b 100644 --- a/src/openrct2/actions/LandSetHeightAction.h +++ b/src/openrct2/actions/LandSetHeightAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(LandSetHeightAction, GameCommand::SetLandHeight, GameActions::Result) +class LandSetHeightAction final : public GameActionBase { private: CoordsXY _coords; @@ -24,7 +24,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; @@ -34,16 +34,16 @@ private: money32 GetSmallSceneryRemovalCost() const; void SmallSceneryRemoval() const; rct_string_id CheckRideSupports() const; - TileElement* CheckFloatingStructures(TileElement * surfaceElement, uint8_t zCorner) const; - TileElement* CheckUnremovableObstructions(TileElement * surfaceElement, uint8_t zCorner) const; - money32 GetSurfaceHeightChangeCost(SurfaceElement * surfaceElement) const; - void SetSurfaceHeight(TileElement * surfaceElement) const; + TileElement* CheckFloatingStructures(TileElement* surfaceElement, uint8_t zCorner) const; + TileElement* CheckUnremovableObstructions(TileElement* surfaceElement, uint8_t zCorner) const; + money32 GetSurfaceHeightChangeCost(SurfaceElement* surfaceElement) const; + void SetSurfaceHeight(TileElement* surfaceElement) const; /** * * rct2: 0x00663CB9 */ static int32_t map_set_land_height_clear_func( - TileElement * *tile_element, [[maybe_unused]] const CoordsXY& coords, [[maybe_unused]] uint8_t flags, + TileElement** tile_element, [[maybe_unused]] const CoordsXY& coords, [[maybe_unused]] uint8_t flags, [[maybe_unused]] money32* price); }; diff --git a/src/openrct2/actions/LandSetRightsAction.h b/src/openrct2/actions/LandSetRightsAction.h index 682b55cd8e..3709a89381 100644 --- a/src/openrct2/actions/LandSetRightsAction.h +++ b/src/openrct2/actions/LandSetRightsAction.h @@ -21,7 +21,7 @@ enum class LandSetRightSetting : uint8_t Count }; -DEFINE_GAME_ACTION(LandSetRightsAction, GameCommand::SetLandOwnership, GameActions::Result) +class LandSetRightsAction final : public GameActionBase { private: MapRange _range; @@ -35,7 +35,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/LandSmoothAction.h b/src/openrct2/actions/LandSmoothAction.h index 3bd71ae3e6..dd7cb1fd70 100644 --- a/src/openrct2/actions/LandSmoothAction.h +++ b/src/openrct2/actions/LandSmoothAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(LandSmoothAction, GameCommand::EditLandSmooth, GameActions::Result) +class LandSmoothAction final : public GameActionBase { private: CoordsXY _coords; @@ -30,7 +30,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/LargeSceneryPlaceAction.h b/src/openrct2/actions/LargeSceneryPlaceAction.h index 2925be57f5..8de7f56a36 100644 --- a/src/openrct2/actions/LargeSceneryPlaceAction.h +++ b/src/openrct2/actions/LargeSceneryPlaceAction.h @@ -20,7 +20,7 @@ struct LargeSceneryPlaceActionResult BannerIndex bannerId = BANNER_INDEX_NULL; }; -DEFINE_GAME_ACTION(LargeSceneryPlaceAction, GameCommand::PlaceLargeScenery, GameActions::Result) +class LargeSceneryPlaceAction final : public GameActionBase { private: CoordsXYZD _loc; @@ -34,17 +34,17 @@ public: LargeSceneryPlaceAction( const CoordsXYZD& loc, ObjectEntryIndex sceneryType, uint8_t primaryColour, uint8_t secondaryColour); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; private: - int16_t GetTotalNumTiles(rct_large_scenery_tile * tiles) const; - bool CheckMapCapacity(rct_large_scenery_tile * tiles, int16_t numTiles) const; - int16_t GetMaxSurfaceHeight(rct_large_scenery_tile * tiles) const; - void SetNewLargeSceneryElement(LargeSceneryElement & sceneryElement, uint8_t tileNum) const; + int16_t GetTotalNumTiles(rct_large_scenery_tile* tiles) const; + bool CheckMapCapacity(rct_large_scenery_tile* tiles, int16_t numTiles) const; + int16_t GetMaxSurfaceHeight(rct_large_scenery_tile* tiles) const; + void SetNewLargeSceneryElement(LargeSceneryElement& sceneryElement, uint8_t tileNum) const; }; diff --git a/src/openrct2/actions/LargeSceneryRemoveAction.h b/src/openrct2/actions/LargeSceneryRemoveAction.h index 6eb895a71e..550e628789 100644 --- a/src/openrct2/actions/LargeSceneryRemoveAction.h +++ b/src/openrct2/actions/LargeSceneryRemoveAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(LargeSceneryRemoveAction, GameCommand::RemoveLargeScenery, GameActions::Result) +class LargeSceneryRemoveAction final : public GameActionBase { private: CoordsXYZD _loc; @@ -21,11 +21,11 @@ public: LargeSceneryRemoveAction() = default; LargeSceneryRemoveAction(const CoordsXYZD& location, uint16_t tileIndex); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/LargeScenerySetColourAction.h b/src/openrct2/actions/LargeScenerySetColourAction.h index 59941bf587..bedd48a396 100644 --- a/src/openrct2/actions/LargeScenerySetColourAction.h +++ b/src/openrct2/actions/LargeScenerySetColourAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(LargeScenerySetColourAction, GameCommand::SetLargeSceneryColour, GameActions::Result) +class LargeScenerySetColourAction final : public GameActionBase { private: CoordsXYZD _loc; @@ -25,7 +25,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/LoadOrQuitAction.h b/src/openrct2/actions/LoadOrQuitAction.h index 8e6248649b..452dd048a1 100644 --- a/src/openrct2/actions/LoadOrQuitAction.h +++ b/src/openrct2/actions/LoadOrQuitAction.h @@ -17,7 +17,7 @@ enum class LoadOrQuitModes : uint8_t CloseSavePrompt }; -DEFINE_GAME_ACTION(LoadOrQuitAction, GameCommand::LoadOrQuit, GameActions::Result) +class LoadOrQuitAction final : public GameActionBase { private: LoadOrQuitModes _mode{}; @@ -29,7 +29,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/MazePlaceTrackAction.h b/src/openrct2/actions/MazePlaceTrackAction.h index a25ce69b51..2f49e0a368 100644 --- a/src/openrct2/actions/MazePlaceTrackAction.h +++ b/src/openrct2/actions/MazePlaceTrackAction.h @@ -10,7 +10,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(MazePlaceTrackAction, GameCommand::PlaceMazeDesign, GameActions::Result) +class MazePlaceTrackAction final : public GameActionBase { private: CoordsXYZ _loc; @@ -21,8 +21,8 @@ public: MazePlaceTrackAction() = default; MazePlaceTrackAction(const CoordsXYZ& location, NetworkRideId_t rideIndex, uint16_t mazeEntry); - void AcceptParameters(GameActionParameterVisitor & visitor) override; - void Serialise(DataSerialiser & stream) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/MazeSetTrackAction.h b/src/openrct2/actions/MazeSetTrackAction.h index 75549dd402..4db9438434 100644 --- a/src/openrct2/actions/MazeSetTrackAction.h +++ b/src/openrct2/actions/MazeSetTrackAction.h @@ -37,7 +37,7 @@ static constexpr const uint8_t byte_993D0C[] = { }; // clang-format on -DEFINE_GAME_ACTION(MazeSetTrackAction, GameCommand::SetMazeTrack, GameActions::Result) +class MazeSetTrackAction final : public GameActionBase { private: CoordsXYZD _loc; @@ -49,8 +49,8 @@ public: MazeSetTrackAction() = default; MazeSetTrackAction(const CoordsXYZD& location, bool initialPlacement, NetworkRideId_t rideIndex, uint8_t mode); - void AcceptParameters(GameActionParameterVisitor & visitor) override; - void Serialise(DataSerialiser & stream) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/NetworkModifyGroupAction.h b/src/openrct2/actions/NetworkModifyGroupAction.h index a0f82b21ad..3b0acdccc6 100644 --- a/src/openrct2/actions/NetworkModifyGroupAction.h +++ b/src/openrct2/actions/NetworkModifyGroupAction.h @@ -29,7 +29,7 @@ enum class PermissionState : uint8_t Count }; -DEFINE_GAME_ACTION(NetworkModifyGroupAction, GameCommand::ModifyGroups, GameActions::Result) +class NetworkModifyGroupAction final : public GameActionBase { private: ModifyGroupType _type{ ModifyGroupType::Count }; @@ -46,7 +46,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/ParkEntranceRemoveAction.h b/src/openrct2/actions/ParkEntranceRemoveAction.h index ebecb187ea..9fb1208293 100644 --- a/src/openrct2/actions/ParkEntranceRemoveAction.h +++ b/src/openrct2/actions/ParkEntranceRemoveAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(ParkEntranceRemoveAction, GameCommand::RemoveParkEntrance, GameActions::Result) +class ParkEntranceRemoveAction final : public GameActionBase { private: CoordsXYZ _loc; @@ -22,7 +22,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/ParkMarketingAction.h b/src/openrct2/actions/ParkMarketingAction.h index 0af79e725f..68f016c9ee 100644 --- a/src/openrct2/actions/ParkMarketingAction.h +++ b/src/openrct2/actions/ParkMarketingAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(ParkMarketingAction, GameCommand::StartMarketingCampaign, GameActions::Result) +class ParkMarketingAction final : public GameActionBase { private: int32_t _type{}; @@ -22,11 +22,11 @@ public: ParkMarketingAction() = default; ParkMarketingAction(int32_t type, int32_t item, int32_t numWeeks); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/ParkSetDateAction.h b/src/openrct2/actions/ParkSetDateAction.h index 20d76a5ce3..efe6bf1840 100644 --- a/src/openrct2/actions/ParkSetDateAction.h +++ b/src/openrct2/actions/ParkSetDateAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(ParkSetDateAction, GameCommand::SetDate, GameActions::Result) +class ParkSetDateAction final : public GameActionBase { private: int32_t _year{}; @@ -22,11 +22,11 @@ public: ParkSetDateAction() = default; ParkSetDateAction(int32_t year, int32_t month, int32_t day); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/ParkSetLoanAction.h b/src/openrct2/actions/ParkSetLoanAction.h index 43f4692ea2..09440b3aa6 100644 --- a/src/openrct2/actions/ParkSetLoanAction.h +++ b/src/openrct2/actions/ParkSetLoanAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(ParkSetLoanAction, GameCommand::SetCurrentLoan, GameActions::Result) +class ParkSetLoanAction final : public GameActionBase { private: money32 _value{ MONEY32_UNDEFINED }; @@ -20,11 +20,11 @@ public: ParkSetLoanAction() = default; ParkSetLoanAction(money32 value); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/ParkSetNameAction.h b/src/openrct2/actions/ParkSetNameAction.h index 108db73546..6e55625a8e 100644 --- a/src/openrct2/actions/ParkSetNameAction.h +++ b/src/openrct2/actions/ParkSetNameAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(ParkSetNameAction, GameCommand::SetParkName, GameActions::Result) +class ParkSetNameAction final : public GameActionBase { private: std::string _name; @@ -20,11 +20,11 @@ public: ParkSetNameAction() = default; ParkSetNameAction(const std::string& name); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/ParkSetParameterAction.h b/src/openrct2/actions/ParkSetParameterAction.h index f546039fde..11c5bf4db6 100644 --- a/src/openrct2/actions/ParkSetParameterAction.h +++ b/src/openrct2/actions/ParkSetParameterAction.h @@ -19,7 +19,7 @@ enum class ParkParameter : uint8_t Count }; -DEFINE_GAME_ACTION(ParkSetParameterAction, GameCommand::SetParkOpen, GameActions::Result) +class ParkSetParameterAction final : public GameActionBase { private: ParkParameter _parameter{ ParkParameter::Count }; @@ -38,7 +38,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/ParkSetResearchFundingAction.h b/src/openrct2/actions/ParkSetResearchFundingAction.h index de4282aae2..e0674695e7 100644 --- a/src/openrct2/actions/ParkSetResearchFundingAction.h +++ b/src/openrct2/actions/ParkSetResearchFundingAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(ParkSetResearchFundingAction, GameCommand::SetResearchFunding, GameActions::Result) +class ParkSetResearchFundingAction final : public GameActionBase { private: // TODO change to std::optional when C++17 @@ -24,7 +24,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/PauseToggleAction.h b/src/openrct2/actions/PauseToggleAction.h index 56219df591..e0b4053175 100644 --- a/src/openrct2/actions/PauseToggleAction.h +++ b/src/openrct2/actions/PauseToggleAction.h @@ -13,7 +13,7 @@ // Clang format is broken for small game actions // clang-format off -DEFINE_GAME_ACTION(PauseToggleAction, GameCommand::TogglePause, GameActions::Result) +class PauseToggleAction final : public GameActionBase { public: PauseToggleAction() = default; diff --git a/src/openrct2/actions/PeepPickupAction.h b/src/openrct2/actions/PeepPickupAction.h index 5ff32e8d59..4e5df75c7e 100644 --- a/src/openrct2/actions/PeepPickupAction.h +++ b/src/openrct2/actions/PeepPickupAction.h @@ -19,7 +19,7 @@ enum class PeepPickupType : uint8_t Count }; -DEFINE_GAME_ACTION(PeepPickupAction, GameCommand::PickupGuest, GameActions::Result) +class PeepPickupAction final : public GameActionBase { private: PeepPickupType _type{ PeepPickupType::Count }; @@ -33,10 +33,10 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; private: - void CancelConcurrentPickups(Peep * pickedPeep) const; + void CancelConcurrentPickups(Peep* pickedPeep) const; }; diff --git a/src/openrct2/actions/PlaceParkEntranceAction.h b/src/openrct2/actions/PlaceParkEntranceAction.h index 88d149cbda..cc02a66c52 100644 --- a/src/openrct2/actions/PlaceParkEntranceAction.h +++ b/src/openrct2/actions/PlaceParkEntranceAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(PlaceParkEntranceAction, GameCommand::PlaceParkEntrance, GameActions::Result) +class PlaceParkEntranceAction final : public GameActionBase { private: CoordsXYZD _loc; @@ -23,7 +23,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/PlacePeepSpawnAction.h b/src/openrct2/actions/PlacePeepSpawnAction.h index cf89c921dd..bf71a83f7e 100644 --- a/src/openrct2/actions/PlacePeepSpawnAction.h +++ b/src/openrct2/actions/PlacePeepSpawnAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(PlacePeepSpawnAction, GameCommand::PlacePeepSpawn, GameActions::Result) +class PlacePeepSpawnAction final : public GameActionBase { private: CoordsXYZD _location; @@ -22,7 +22,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/PlayerKickAction.h b/src/openrct2/actions/PlayerKickAction.h index db56485062..27e658ef6b 100644 --- a/src/openrct2/actions/PlayerKickAction.h +++ b/src/openrct2/actions/PlayerKickAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(PlayerKickAction, GameCommand::KickPlayer, GameActions::Result) +class PlayerKickAction final : public GameActionBase { private: NetworkPlayerId_t _playerId{ -1 }; @@ -23,7 +23,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/PlayerSetGroupAction.h b/src/openrct2/actions/PlayerSetGroupAction.h index 8d41dbe806..80d144b3dc 100644 --- a/src/openrct2/actions/PlayerSetGroupAction.h +++ b/src/openrct2/actions/PlayerSetGroupAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(PlayerSetGroupAction, GameCommand::SetPlayerGroup, GameActions::Result) +class PlayerSetGroupAction final : public GameActionBase { private: NetworkPlayerId_t _playerId{ -1 }; @@ -23,7 +23,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/RideCreateAction.h b/src/openrct2/actions/RideCreateAction.h index 8f3f30a116..654ca36799 100644 --- a/src/openrct2/actions/RideCreateAction.h +++ b/src/openrct2/actions/RideCreateAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(RideCreateAction, GameCommand::CreateRide, GameActions::Result) +class RideCreateAction final : public GameActionBase { private: ObjectEntryIndex _rideType{ OBJECT_ENTRY_INDEX_NULL }; @@ -23,13 +23,13 @@ public: RideCreateAction() = default; RideCreateAction(int32_t rideType, ObjectEntryIndex subType, int32_t colour1, int32_t colour2); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; int32_t GetRideType() const; int32_t GetRideObject() const; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/RideDemolishAction.h b/src/openrct2/actions/RideDemolishAction.h index 69a4e99363..b80408647b 100644 --- a/src/openrct2/actions/RideDemolishAction.h +++ b/src/openrct2/actions/RideDemolishAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(RideDemolishAction, GameCommand::DemolishRide, GameActions::Result) +class RideDemolishAction final : public GameActionBase { private: NetworkRideId_t _rideIndex{ RIDE_ID_NULL }; @@ -21,19 +21,19 @@ public: RideDemolishAction() = default; RideDemolishAction(ride_id_t rideIndex, uint8_t modifyType); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint32_t GetCooldownTime() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; private: - GameActions::Result::Ptr DemolishRide(Ride * ride) const; + GameActions::Result::Ptr DemolishRide(Ride* ride) const; money32 MazeRemoveTrack(const CoordsXYZD& coords) const; money32 DemolishTracks() const; - GameActions::Result::Ptr RefurbishRide(Ride * ride) const; + GameActions::Result::Ptr RefurbishRide(Ride* ride) const; money32 GetRefurbishPrice(const Ride* ride) const; money32 GetRefundPrice(const Ride* ride) const; }; diff --git a/src/openrct2/actions/RideEntranceExitPlaceAction.h b/src/openrct2/actions/RideEntranceExitPlaceAction.h index 4baae5ec62..0d737c4a7e 100644 --- a/src/openrct2/actions/RideEntranceExitPlaceAction.h +++ b/src/openrct2/actions/RideEntranceExitPlaceAction.h @@ -12,7 +12,7 @@ #include "../world/Entrance.h" #include "GameAction.h" -DEFINE_GAME_ACTION(RideEntranceExitPlaceAction, GameCommand::PlaceRideEntranceOrExit, GameActions::Result) +class RideEntranceExitPlaceAction final : public GameActionBase { private: CoordsXY _loc; @@ -26,11 +26,11 @@ public: RideEntranceExitPlaceAction( const CoordsXY& loc, Direction direction, ride_id_t rideIndex, StationIndex stationNum, bool isExit); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/RideEntranceExitRemoveAction.h b/src/openrct2/actions/RideEntranceExitRemoveAction.h index d5d290f0b6..bd813d559a 100644 --- a/src/openrct2/actions/RideEntranceExitRemoveAction.h +++ b/src/openrct2/actions/RideEntranceExitRemoveAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(RideEntranceExitRemoveAction, GameCommand::RemoveRideEntranceOrExit, GameActions::Result) +class RideEntranceExitRemoveAction final : public GameActionBase { private: CoordsXY _loc; @@ -23,11 +23,11 @@ public: RideEntranceExitRemoveAction() = default; RideEntranceExitRemoveAction(const CoordsXY& loc, ride_id_t rideIndex, StationIndex stationNum, bool isExit); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/RideSetAppearanceAction.h b/src/openrct2/actions/RideSetAppearanceAction.h index cc4d56bf4d..43efca03be 100644 --- a/src/openrct2/actions/RideSetAppearanceAction.h +++ b/src/openrct2/actions/RideSetAppearanceAction.h @@ -24,7 +24,7 @@ enum class RideSetAppearanceType : uint8_t EntranceStyle }; -DEFINE_GAME_ACTION(RideSetAppearanceAction, GameCommand::SetRideAppearance, GameActions::Result) +class RideSetAppearanceAction final : public GameActionBase { private: NetworkRideId_t _rideIndex{ RIDE_ID_NULL }; @@ -36,11 +36,11 @@ public: RideSetAppearanceAction() = default; RideSetAppearanceAction(ride_id_t rideIndex, RideSetAppearanceType type, uint16_t value, uint32_t index); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/RideSetColourSchemeAction.h b/src/openrct2/actions/RideSetColourSchemeAction.h index 0a36ab5f81..e17f51517f 100644 --- a/src/openrct2/actions/RideSetColourSchemeAction.h +++ b/src/openrct2/actions/RideSetColourSchemeAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(RideSetColourSchemeAction, GameCommand::SetColourScheme, GameActions::Result) +class RideSetColourSchemeAction final : public GameActionBase { private: CoordsXYZD _loc; @@ -22,11 +22,11 @@ public: RideSetColourSchemeAction() = default; RideSetColourSchemeAction(const CoordsXYZD& location, track_type_t trackType, uint16_t newColourScheme); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/RideSetNameAction.h b/src/openrct2/actions/RideSetNameAction.h index 5da79e27a2..01133d99e8 100644 --- a/src/openrct2/actions/RideSetNameAction.h +++ b/src/openrct2/actions/RideSetNameAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(RideSetNameAction, GameCommand::SetRideName, GameActions::Result) +class RideSetNameAction final : public GameActionBase { private: NetworkRideId_t _rideIndex{ RIDE_ID_NULL }; @@ -21,11 +21,11 @@ public: RideSetNameAction() = default; RideSetNameAction(ride_id_t rideIndex, const std::string& name); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/RideSetPriceAction.h b/src/openrct2/actions/RideSetPriceAction.h index 07bebe0a1c..efd3a834bf 100644 --- a/src/openrct2/actions/RideSetPriceAction.h +++ b/src/openrct2/actions/RideSetPriceAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(RideSetPriceAction, GameCommand::SetRidePrice, GameActions::Result) +class RideSetPriceAction final : public GameActionBase { private: NetworkRideId_t _rideIndex{ RIDE_ID_NULL }; @@ -22,11 +22,11 @@ public: RideSetPriceAction() = default; RideSetPriceAction(ride_id_t rideIndex, money16 price, bool primaryPrice); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/RideSetSettingAction.h b/src/openrct2/actions/RideSetSettingAction.h index 5eebc14bbe..52f7b89cee 100644 --- a/src/openrct2/actions/RideSetSettingAction.h +++ b/src/openrct2/actions/RideSetSettingAction.h @@ -26,7 +26,7 @@ enum class RideSetSetting : uint8_t RideType, }; -DEFINE_GAME_ACTION(RideSetSettingAction, GameCommand::SetRideSetting, GameActions::Result) +class RideSetSettingAction final : public GameActionBase { private: NetworkRideId_t _rideIndex{ RIDE_ID_NULL }; @@ -37,18 +37,18 @@ public: RideSetSettingAction() = default; RideSetSettingAction(ride_id_t rideIndex, RideSetSetting setting, uint8_t value); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; private: - bool ride_is_mode_valid(Ride * ride) const; - bool ride_is_valid_lift_hill_speed(Ride * ride) const; + bool ride_is_mode_valid(Ride* ride) const; + bool ride_is_valid_lift_hill_speed(Ride* ride) const; bool ride_is_valid_num_circuits() const; - bool ride_is_valid_operation_option(Ride * ride) const; - rct_string_id GetOperationErrorMessage(Ride * ride) const; + bool ride_is_valid_operation_option(Ride* ride) const; + rct_string_id GetOperationErrorMessage(Ride* ride) const; }; diff --git a/src/openrct2/actions/RideSetStatusAction.h b/src/openrct2/actions/RideSetStatusAction.h index fc97fb220e..3fb79a81b7 100644 --- a/src/openrct2/actions/RideSetStatusAction.h +++ b/src/openrct2/actions/RideSetStatusAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(RideSetStatusAction, GameCommand::SetRideStatus, GameActions::Result) +class RideSetStatusAction final : public GameActionBase { private: NetworkRideId_t _rideIndex{ RIDE_ID_NULL }; @@ -21,11 +21,11 @@ public: RideSetStatusAction() = default; RideSetStatusAction(ride_id_t rideIndex, RideStatus status); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/RideSetVehicleAction.h b/src/openrct2/actions/RideSetVehicleAction.h index 7c7662a85e..61efcf4a2f 100644 --- a/src/openrct2/actions/RideSetVehicleAction.h +++ b/src/openrct2/actions/RideSetVehicleAction.h @@ -19,7 +19,7 @@ enum class RideSetVehicleType : uint8_t Count, }; -DEFINE_GAME_ACTION(RideSetVehicleAction, GameCommand::SetRideVehicles, GameActions::Result) +class RideSetVehicleAction final : public GameActionBase { private: NetworkRideId_t _rideIndex{ RIDE_ID_NULL }; @@ -31,14 +31,14 @@ public: RideSetVehicleAction() = default; RideSetVehicleAction(ride_id_t rideIndex, RideSetVehicleType type, uint8_t value, uint8_t colour = 0); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; private: - bool ride_is_vehicle_type_valid(Ride * ride) const; + bool ride_is_vehicle_type_valid(Ride* ride) const; }; diff --git a/src/openrct2/actions/ScenarioSetSettingAction.h b/src/openrct2/actions/ScenarioSetSettingAction.h index 625418696a..324f3a2601 100644 --- a/src/openrct2/actions/ScenarioSetSettingAction.h +++ b/src/openrct2/actions/ScenarioSetSettingAction.h @@ -38,7 +38,7 @@ enum class ScenarioSetSetting : uint8_t Count }; -DEFINE_GAME_ACTION(ScenarioSetSettingAction, GameCommand::EditScenarioOptions, GameActions::Result) +class ScenarioSetSettingAction final : public GameActionBase { private: ScenarioSetSetting _setting{ ScenarioSetSetting::Count }; @@ -57,7 +57,7 @@ public: return GameAction::GetActionFlags() | GameActions::Flags::AllowWhilePaused; } - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/SetCheatAction.h b/src/openrct2/actions/SetCheatAction.h index 58752105ca..e58ac644bd 100644 --- a/src/openrct2/actions/SetCheatAction.h +++ b/src/openrct2/actions/SetCheatAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(SetCheatAction, GameCommand::Cheat, GameActions::Result) +class SetCheatAction final : public GameActionBase { using ParametersRange = std::pair, std::pair>; @@ -24,11 +24,11 @@ public: SetCheatAction() = default; SetCheatAction(CheatType cheatType, int32_t param1 = 0, int32_t param2 = 0); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/SetParkEntranceFeeAction.h b/src/openrct2/actions/SetParkEntranceFeeAction.h index 5fb8b280a8..f319554d8c 100644 --- a/src/openrct2/actions/SetParkEntranceFeeAction.h +++ b/src/openrct2/actions/SetParkEntranceFeeAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(SetParkEntranceFeeAction, GameCommand::SetParkEntranceFee, GameActions::Result) +class SetParkEntranceFeeAction final : public GameActionBase { private: money16 _fee{ MONEY16_UNDEFINED }; @@ -20,11 +20,11 @@ public: SetParkEntranceFeeAction() = default; SetParkEntranceFeeAction(money16 fee); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/SignSetNameAction.h b/src/openrct2/actions/SignSetNameAction.h index 4c99862368..b351c86750 100644 --- a/src/openrct2/actions/SignSetNameAction.h +++ b/src/openrct2/actions/SignSetNameAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(SignSetNameAction, GameCommand::SetSignName, GameActions::Result) +class SignSetNameAction final : public GameActionBase { private: BannerIndex _bannerIndex{ BANNER_INDEX_NULL }; @@ -21,11 +21,11 @@ public: SignSetNameAction() = default; SignSetNameAction(BannerIndex bannerIndex, const std::string& name); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/SignSetStyleAction.h b/src/openrct2/actions/SignSetStyleAction.h index b19b161b9c..33eeab5ff4 100644 --- a/src/openrct2/actions/SignSetStyleAction.h +++ b/src/openrct2/actions/SignSetStyleAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(SignSetStyleAction, GameCommand::SetSignStyle, GameActions::Result) +class SignSetStyleAction final : public GameActionBase { private: BannerIndex _bannerIndex{ BANNER_INDEX_NULL }; @@ -25,7 +25,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/SmallSceneryPlaceAction.h b/src/openrct2/actions/SmallSceneryPlaceAction.h index 7807c8f5f5..78f9823845 100644 --- a/src/openrct2/actions/SmallSceneryPlaceAction.h +++ b/src/openrct2/actions/SmallSceneryPlaceAction.h @@ -19,7 +19,7 @@ struct SmallSceneryPlaceActionResult uint8_t SceneryQuadrant{}; }; -DEFINE_GAME_ACTION(SmallSceneryPlaceAction, GameCommand::PlaceScenery, GameActions::Result) +class SmallSceneryPlaceAction final : public GameActionBase { private: CoordsXYZD _loc; @@ -33,12 +33,12 @@ public: SmallSceneryPlaceAction( const CoordsXYZD& loc, uint8_t quadrant, ObjectEntryIndex sceneryType, uint8_t primaryColour, uint8_t secondaryColour); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint32_t GetCooldownTime() const override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/SmallSceneryRemoveAction.h b/src/openrct2/actions/SmallSceneryRemoveAction.h index 21a1d7a25e..816dde28db 100644 --- a/src/openrct2/actions/SmallSceneryRemoveAction.h +++ b/src/openrct2/actions/SmallSceneryRemoveAction.h @@ -12,7 +12,7 @@ #include "../world/TileElement.h" #include "GameAction.h" -DEFINE_GAME_ACTION(SmallSceneryRemoveAction, GameCommand::RemoveScenery, GameActions::Result) +class SmallSceneryRemoveAction final : public GameActionBase { private: CoordsXYZ _loc; @@ -23,11 +23,11 @@ public: SmallSceneryRemoveAction() = default; SmallSceneryRemoveAction(const CoordsXYZ& location, uint8_t quadrant, ObjectEntryIndex sceneryType); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/SmallScenerySetColourAction.h b/src/openrct2/actions/SmallScenerySetColourAction.h index d83877cf20..73998d3bbb 100644 --- a/src/openrct2/actions/SmallScenerySetColourAction.h +++ b/src/openrct2/actions/SmallScenerySetColourAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(SmallScenerySetColourAction, GameCommand::SetSceneryColour, GameActions::Result) +class SmallScenerySetColourAction final : public GameActionBase { private: CoordsXYZ _loc; @@ -27,7 +27,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/StaffFireAction.h b/src/openrct2/actions/StaffFireAction.h index 2b74d256b6..9776fc9c93 100644 --- a/src/openrct2/actions/StaffFireAction.h +++ b/src/openrct2/actions/StaffFireAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(StaffFireAction, GameCommand::FireStaffMember, GameActions::Result) +class StaffFireAction final : public GameActionBase { private: uint16_t _spriteId{ SPRITE_INDEX_NULL }; @@ -22,7 +22,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/StaffHireNewAction.h b/src/openrct2/actions/StaffHireNewAction.h index 5b06979fa6..3351cc13e9 100644 --- a/src/openrct2/actions/StaffHireNewAction.h +++ b/src/openrct2/actions/StaffHireNewAction.h @@ -17,7 +17,7 @@ struct StaffHireNewActionResult uint16_t StaffEntityId = SPRITE_INDEX_NULL; }; -DEFINE_GAME_ACTION(StaffHireNewAction, GameCommand::HireNewStaffMember, GameActions::Result) +class StaffHireNewAction final : public GameActionBase { private: bool _autoPosition{}; @@ -29,15 +29,15 @@ public: StaffHireNewAction() = default; StaffHireNewAction(bool autoPosition, StaffType staffType, EntertainerCostume entertainerType, uint32_t staffOrders); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; private: GameActions::Result::Ptr QueryExecute(bool execute) const; - void AutoPositionNewStaff(Peep * newPeep) const; + void AutoPositionNewStaff(Peep* newPeep) const; }; diff --git a/src/openrct2/actions/StaffSetColourAction.h b/src/openrct2/actions/StaffSetColourAction.h index b5c9e773db..80020c8e6a 100644 --- a/src/openrct2/actions/StaffSetColourAction.h +++ b/src/openrct2/actions/StaffSetColourAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(StaffSetColourAction, GameCommand::SetStaffColour, GameActions::Result) +class StaffSetColourAction final : public GameActionBase { private: uint8_t _staffType{}; @@ -23,7 +23,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/StaffSetCostumeAction.h b/src/openrct2/actions/StaffSetCostumeAction.h index 617f859140..1e1ecd4b3a 100644 --- a/src/openrct2/actions/StaffSetCostumeAction.h +++ b/src/openrct2/actions/StaffSetCostumeAction.h @@ -12,7 +12,7 @@ #include "../peep/Staff.h" #include "GameAction.h" -DEFINE_GAME_ACTION(StaffSetCostumeAction, GameCommand::SetStaffCostume, GameActions::Result) +class StaffSetCostumeAction final : public GameActionBase { private: uint16_t _spriteIndex{ SPRITE_INDEX_NULL }; @@ -24,7 +24,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/StaffSetNameAction.h b/src/openrct2/actions/StaffSetNameAction.h index 7864677be7..bafe84d0dc 100644 --- a/src/openrct2/actions/StaffSetNameAction.h +++ b/src/openrct2/actions/StaffSetNameAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(StaffSetNameAction, GameCommand::SetStaffName, GameActions::Result) +class StaffSetNameAction final : public GameActionBase { private: uint16_t _spriteIndex{ SPRITE_INDEX_NULL }; @@ -22,7 +22,7 @@ public: StaffSetNameAction(uint16_t spriteIndex, const std::string& name); uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/StaffSetOrdersAction.h b/src/openrct2/actions/StaffSetOrdersAction.h index b0a1f41cdb..66042d30b7 100644 --- a/src/openrct2/actions/StaffSetOrdersAction.h +++ b/src/openrct2/actions/StaffSetOrdersAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(StaffSetOrdersAction, GameCommand::SetStaffOrders, GameActions::Result) +class StaffSetOrdersAction final : public GameActionBase { private: uint16_t _spriteIndex{ SPRITE_INDEX_NULL }; @@ -23,7 +23,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/StaffSetPatrolAreaAction.h b/src/openrct2/actions/StaffSetPatrolAreaAction.h index d6b31ce52a..654265f9b7 100644 --- a/src/openrct2/actions/StaffSetPatrolAreaAction.h +++ b/src/openrct2/actions/StaffSetPatrolAreaAction.h @@ -18,7 +18,7 @@ enum class StaffSetPatrolAreaMode : uint8_t ClearAll }; -DEFINE_GAME_ACTION(StaffSetPatrolAreaAction, GameCommand::SetStaffPatrol, GameActions::Result) +class StaffSetPatrolAreaAction final : public GameActionBase { private: uint16_t _spriteId{ SPRITE_INDEX_NULL }; @@ -31,7 +31,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/SurfaceSetStyleAction.h b/src/openrct2/actions/SurfaceSetStyleAction.h index 880f6477fe..7ce929e47f 100644 --- a/src/openrct2/actions/SurfaceSetStyleAction.h +++ b/src/openrct2/actions/SurfaceSetStyleAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(SurfaceSetStyleAction, GameCommand::ChangeSurfaceStyle, GameActions::Result) +class SurfaceSetStyleAction final : public GameActionBase { private: MapRange _range; @@ -22,7 +22,7 @@ public: SurfaceSetStyleAction() = default; SurfaceSetStyleAction(MapRange range, ObjectEntryIndex surfaceStyle, ObjectEntryIndex edgeStyle); - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/TileModifyAction.h b/src/openrct2/actions/TileModifyAction.h index ffba3a45cd..7066a94057 100644 --- a/src/openrct2/actions/TileModifyAction.h +++ b/src/openrct2/actions/TileModifyAction.h @@ -41,7 +41,7 @@ enum class TileModifyType : uint8_t Count, }; -DEFINE_GAME_ACTION(TileModifyAction, GameCommand::ModifyTile, GameActions::Result) +class TileModifyAction final : public GameActionBase { private: CoordsXY _loc; @@ -57,7 +57,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/TrackDesignAction.h b/src/openrct2/actions/TrackDesignAction.h index 8ce73431f0..f9e76cf988 100644 --- a/src/openrct2/actions/TrackDesignAction.h +++ b/src/openrct2/actions/TrackDesignAction.h @@ -12,7 +12,7 @@ #include "../ride/TrackDesign.h" #include "GameAction.h" -DEFINE_GAME_ACTION(TrackDesignAction, GameCommand::PlaceTrackDesign, GameActions::Result) +class TrackDesignAction final : public GameActionBase { private: CoordsXYZD _loc; @@ -22,11 +22,11 @@ public: TrackDesignAction() = default; TrackDesignAction(const CoordsXYZD& location, const TrackDesign& td); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/TrackPlaceAction.h b/src/openrct2/actions/TrackPlaceAction.h index 2b2a59b8f1..ce33834e5d 100644 --- a/src/openrct2/actions/TrackPlaceAction.h +++ b/src/openrct2/actions/TrackPlaceAction.h @@ -16,7 +16,7 @@ struct TrackPlaceActionResult uint8_t GroundFlags{ 0 }; }; -DEFINE_GAME_ACTION(TrackPlaceAction, GameCommand::PlaceTrack, GameActions::Result) +class TrackPlaceAction final : public GameActionBase { private: NetworkRideId_t _rideIndex{ RIDE_ID_NULL }; @@ -34,11 +34,11 @@ public: NetworkRideId_t rideIndex, int32_t trackType, const CoordsXYZD& origin, int32_t brakeSpeed, int32_t colour, int32_t seatRotation, int32_t liftHillAndAlternativeState, bool fromTrackDesign); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override final; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/TrackRemoveAction.h b/src/openrct2/actions/TrackRemoveAction.h index ff10333b74..78bdc9e3df 100644 --- a/src/openrct2/actions/TrackRemoveAction.h +++ b/src/openrct2/actions/TrackRemoveAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(TrackRemoveAction, GameCommand::RemoveTrack, GameActions::Result) +class TrackRemoveAction final : public GameActionBase { private: track_type_t _trackType{}; @@ -22,11 +22,11 @@ public: TrackRemoveAction() = default; TrackRemoveAction(track_type_t trackType, int32_t sequence, const CoordsXYZD& origin); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override final; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/TrackSetBrakeSpeedAction.h b/src/openrct2/actions/TrackSetBrakeSpeedAction.h index d11fcd73ec..92967288c2 100644 --- a/src/openrct2/actions/TrackSetBrakeSpeedAction.h +++ b/src/openrct2/actions/TrackSetBrakeSpeedAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(TrackSetBrakeSpeedAction, GameCommand::SetBrakesSpeed, GameActions::Result) +class TrackSetBrakeSpeedAction final : public GameActionBase { private: CoordsXYZ _loc; @@ -22,11 +22,11 @@ public: TrackSetBrakeSpeedAction() = default; TrackSetBrakeSpeedAction(const CoordsXYZ& loc, track_type_t trackType, uint8_t brakeSpeed); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override final; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/WallPlaceAction.h b/src/openrct2/actions/WallPlaceAction.h index 9699eeaebf..5dd1bcf856 100644 --- a/src/openrct2/actions/WallPlaceAction.h +++ b/src/openrct2/actions/WallPlaceAction.h @@ -21,7 +21,7 @@ struct WallPlaceActionResult BannerIndex BannerId = BANNER_INDEX_NULL; }; -DEFINE_GAME_ACTION(WallPlaceAction, GameCommand::PlaceWall, GameActions::Result) +class WallPlaceAction final : public GameActionBase { private: ObjectEntryIndex _wallType{ OBJECT_ENTRY_INDEX_NULL }; @@ -37,11 +37,11 @@ public: ObjectEntryIndex wallType, const CoordsXYZ& loc, uint8_t edge, int32_t primaryColour, int32_t secondaryColour, int32_t tertiaryColour); - void AcceptParameters(GameActionParameterVisitor & visitor) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; uint16_t GetActionFlags() const override final; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; @@ -50,13 +50,13 @@ private: * * rct2: 0x006E5CBA */ - bool WallCheckObstructionWithTrack(WallSceneryEntry * wall, int32_t z0, TrackElement * trackElement, bool* wallAcrossTrack) - const; + bool WallCheckObstructionWithTrack( + WallSceneryEntry* wall, int32_t z0, TrackElement* trackElement, bool* wallAcrossTrack) const; /** * * rct2: 0x006E5C1A */ - GameActions::Result::Ptr WallCheckObstruction(WallSceneryEntry * wall, int32_t z0, int32_t z1, bool* wallAcrossTrack) const; + GameActions::Result::Ptr 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.h b/src/openrct2/actions/WallRemoveAction.h index 033527527c..08e4076b70 100644 --- a/src/openrct2/actions/WallRemoveAction.h +++ b/src/openrct2/actions/WallRemoveAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(WallRemoveAction, GameCommand::RemoveWall, GameActions::Result) +class WallRemoveAction final : public GameActionBase { private: CoordsXYZD _loc; @@ -20,8 +20,8 @@ public: WallRemoveAction() = default; WallRemoveAction(const CoordsXYZD& loc); - void AcceptParameters(GameActionParameterVisitor & visitor) override; - void Serialise(DataSerialiser & stream) override; + void AcceptParameters(GameActionParameterVisitor& visitor) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/WallSetColourAction.h b/src/openrct2/actions/WallSetColourAction.h index 92bd4be32b..7e21c6c08b 100644 --- a/src/openrct2/actions/WallSetColourAction.h +++ b/src/openrct2/actions/WallSetColourAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(WallSetColourAction, GameCommand::SetWallColour, GameActions::Result) +class WallSetColourAction final : public GameActionBase { private: CoordsXYZD _loc; @@ -25,7 +25,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; }; diff --git a/src/openrct2/actions/WaterLowerAction.h b/src/openrct2/actions/WaterLowerAction.h index b7ed697a42..a7d5dc00df 100644 --- a/src/openrct2/actions/WaterLowerAction.h +++ b/src/openrct2/actions/WaterLowerAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(WaterLowerAction, GameCommand::LowerWater, GameActions::Result) +class WaterLowerAction final : public GameActionBase { private: MapRange _range; @@ -22,7 +22,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/WaterRaiseAction.h b/src/openrct2/actions/WaterRaiseAction.h index 64a036cc2c..9271fd527f 100644 --- a/src/openrct2/actions/WaterRaiseAction.h +++ b/src/openrct2/actions/WaterRaiseAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(WaterRaiseAction, GameCommand::RaiseWater, GameActions::Result) +class WaterRaiseAction final : public GameActionBase { private: MapRange _range; @@ -22,7 +22,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/actions/WaterSetHeightAction.h b/src/openrct2/actions/WaterSetHeightAction.h index 45b5c3d84d..1289095cf3 100644 --- a/src/openrct2/actions/WaterSetHeightAction.h +++ b/src/openrct2/actions/WaterSetHeightAction.h @@ -11,7 +11,7 @@ #include "GameAction.h" -DEFINE_GAME_ACTION(WaterSetHeightAction, GameCommand::SetWaterHeight, GameActions::Result) +class WaterSetHeightAction final : public GameActionBase { private: CoordsXY _coords; @@ -23,7 +23,7 @@ public: uint16_t GetActionFlags() const override; - void Serialise(DataSerialiser & stream) override; + void Serialise(DataSerialiser& stream) override; GameActions::Result::Ptr Query() const override; GameActions::Result::Ptr Execute() const override; diff --git a/src/openrct2/libopenrct2.vcxproj b/src/openrct2/libopenrct2.vcxproj index 93ad9f7f0b..50ff663968 100644 --- a/src/openrct2/libopenrct2.vcxproj +++ b/src/openrct2/libopenrct2.vcxproj @@ -521,7 +521,7 @@ - + diff --git a/src/openrct2/network/network.h b/src/openrct2/network/network.h index 3bde48a7ee..0c4b19e050 100644 --- a/src/openrct2/network/network.h +++ b/src/openrct2/network/network.h @@ -25,7 +25,7 @@ #include #include -struct GameAction; +class GameAction; struct Peep; struct CoordsXYZ; namespace GameActions diff --git a/src/openrct2/scripting/ScriptEngine.h b/src/openrct2/scripting/ScriptEngine.h index f954aff12c..d3b153e0d2 100644 --- a/src/openrct2/scripting/ScriptEngine.h +++ b/src/openrct2/scripting/ScriptEngine.h @@ -31,7 +31,7 @@ struct duk_hthread; typedef struct duk_hthread duk_context; -struct GameAction; +class GameAction; namespace GameActions { class Result; From c7fa1b44e9d9117f25841621d34170ee47e4f136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Thu, 11 Nov 2021 15:50:01 +0200 Subject: [PATCH 2/5] Pass name during registration and minor cleanup --- src/openrct2/actions/GameAction.cpp | 10 - src/openrct2/actions/GameAction.h | 10 - src/openrct2/actions/GameActionRegistry.cpp | 371 ++++++-------------- 3 files changed, 114 insertions(+), 277 deletions(-) diff --git a/src/openrct2/actions/GameAction.cpp b/src/openrct2/actions/GameAction.cpp index 878f7e0c4b..686c4942b2 100644 --- a/src/openrct2/actions/GameAction.cpp +++ b/src/openrct2/actions/GameAction.cpp @@ -158,16 +158,6 @@ namespace GameActions _actionQueue.clear(); } - void Initialize() - { - static bool initialized = false; - if (initialized) - return; - - Register(); - initialized = true; - } - GameAction::Ptr Clone(const GameAction* action) { std::unique_ptr ga = GameActions::Create(action->GetType()); diff --git a/src/openrct2/actions/GameAction.h b/src/openrct2/actions/GameAction.h index 6e80bb8bd6..41774cd2ce 100644 --- a/src/openrct2/actions/GameAction.h +++ b/src/openrct2/actions/GameAction.h @@ -257,7 +257,6 @@ namespace GameActions using GameActionFactory = GameAction* (*)(); void Initialize(); - void Register(); bool IsValidId(uint32_t id); const char* GetName(GameCommand id); @@ -285,13 +284,4 @@ namespace GameActions GameActions::Result::Ptr QueryNested(const GameAction* action); GameActions::Result::Ptr ExecuteNested(const GameAction* action); - GameActionFactory Register(GameCommand id, GameActionFactory action); - - template static GameActionFactory Register() - { - GameActionFactory factory = []() -> GameAction* { return new T(); }; - Register(T::TYPE, factory); - return factory; - } - } // namespace GameActions diff --git a/src/openrct2/actions/GameActionRegistry.cpp b/src/openrct2/actions/GameActionRegistry.cpp index 7e233600f7..bf1a0d3e66 100644 --- a/src/openrct2/actions/GameActionRegistry.cpp +++ b/src/openrct2/actions/GameActionRegistry.cpp @@ -90,11 +90,14 @@ #include "WaterRaiseAction.h" #include "WaterSetHeightAction.h" +#include + namespace GameActions { - static GameActionFactory _actions[EnumValue(GameCommand::Count)]; + static std::array _actions{}; + static std::array _actionNames{}; - GameActionFactory Register(GameCommand id, GameActionFactory factory) + static void Register(GameCommand id, GameActionFactory factory, const char* name) { const auto idx = static_cast(id); @@ -102,268 +105,114 @@ namespace GameActions Guard::ArgumentNotNull(factory); _actions[idx] = factory; - return factory; + _actionNames[idx] = name; + } + + template static void Register(const char* name) + { + GameActionFactory factory = []() -> GameAction* { return new T(); }; + Register(T::TYPE, factory, name); } void Register() { - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); +#define REGISTER_ACTION(type) Register(#type) + + REGISTER_ACTION(BalloonPressAction); + REGISTER_ACTION(BannerPlaceAction); + REGISTER_ACTION(BannerRemoveAction); + REGISTER_ACTION(BannerSetColourAction); + REGISTER_ACTION(BannerSetNameAction); + REGISTER_ACTION(BannerSetStyleAction); + REGISTER_ACTION(ClimateSetAction); + REGISTER_ACTION(FootpathPlaceAction); + REGISTER_ACTION(FootpathPlaceFromTrackAction); + REGISTER_ACTION(FootpathRemoveAction); + REGISTER_ACTION(FootpathAdditionPlaceAction); + REGISTER_ACTION(FootpathAdditionRemoveAction); + REGISTER_ACTION(GuestSetNameAction); + REGISTER_ACTION(MazePlaceTrackAction); + REGISTER_ACTION(MazeSetTrackAction); + REGISTER_ACTION(NetworkModifyGroupAction); + REGISTER_ACTION(ParkMarketingAction); + REGISTER_ACTION(ParkEntranceRemoveAction); + REGISTER_ACTION(ParkSetLoanAction); + REGISTER_ACTION(ParkSetNameAction); + REGISTER_ACTION(ParkSetParameterAction); + REGISTER_ACTION(ParkSetResearchFundingAction); + REGISTER_ACTION(PeepPickupAction); + REGISTER_ACTION(PlaceParkEntranceAction); + REGISTER_ACTION(PlacePeepSpawnAction); + REGISTER_ACTION(PlayerKickAction); + REGISTER_ACTION(PlayerSetGroupAction); + REGISTER_ACTION(RideCreateAction); + REGISTER_ACTION(RideDemolishAction); + REGISTER_ACTION(RideEntranceExitPlaceAction); + REGISTER_ACTION(RideEntranceExitRemoveAction); + REGISTER_ACTION(RideSetColourSchemeAction); + REGISTER_ACTION(RideSetNameAction); + REGISTER_ACTION(RideSetPriceAction); + REGISTER_ACTION(RideSetStatusAction); + REGISTER_ACTION(RideSetAppearanceAction); + REGISTER_ACTION(RideSetVehicleAction); + REGISTER_ACTION(RideSetSettingAction); + REGISTER_ACTION(ScenarioSetSettingAction); + REGISTER_ACTION(SetParkEntranceFeeAction); + REGISTER_ACTION(SignSetNameAction); + REGISTER_ACTION(SignSetStyleAction); + REGISTER_ACTION(StaffFireAction); + REGISTER_ACTION(StaffHireNewAction); + REGISTER_ACTION(StaffSetColourAction); + REGISTER_ACTION(StaffSetNameAction); + REGISTER_ACTION(StaffSetOrdersAction); + REGISTER_ACTION(StaffSetCostumeAction); + REGISTER_ACTION(StaffSetPatrolAreaAction); + REGISTER_ACTION(SurfaceSetStyleAction); + REGISTER_ACTION(WallPlaceAction); + REGISTER_ACTION(WallRemoveAction); + REGISTER_ACTION(WallSetColourAction); + REGISTER_ACTION(SmallSceneryPlaceAction); + REGISTER_ACTION(SmallSceneryRemoveAction); + REGISTER_ACTION(SmallScenerySetColourAction); + REGISTER_ACTION(LargeSceneryPlaceAction); + REGISTER_ACTION(LargeSceneryRemoveAction); + REGISTER_ACTION(LargeScenerySetColourAction); + REGISTER_ACTION(LandBuyRightsAction); + REGISTER_ACTION(LandLowerAction); + REGISTER_ACTION(LandRaiseAction); + REGISTER_ACTION(LandSetHeightAction); + REGISTER_ACTION(LandSetRightsAction); + REGISTER_ACTION(LandSmoothAction); + REGISTER_ACTION(TileModifyAction); + REGISTER_ACTION(TrackDesignAction); + REGISTER_ACTION(TrackPlaceAction); + REGISTER_ACTION(TrackRemoveAction); + REGISTER_ACTION(TrackSetBrakeSpeedAction); + REGISTER_ACTION(ClearAction); + REGISTER_ACTION(PauseToggleAction); + REGISTER_ACTION(LoadOrQuitAction); + REGISTER_ACTION(WaterSetHeightAction); + REGISTER_ACTION(WaterLowerAction); + REGISTER_ACTION(WaterRaiseAction); + REGISTER_ACTION(GuestSetFlagsAction); + REGISTER_ACTION(ParkSetDateAction); + REGISTER_ACTION(SetCheatAction); + REGISTER_ACTION(ChangeMapSizeAction); #ifdef ENABLE_SCRIPTING - Register(); + REGISTER_ACTION(CustomAction); #endif + +#undef REGISTER_ACTION } const char* GetName(GameCommand id) { - switch (id) - { - case GameCommand::SetRideAppearance: - return "SetRideAppearance"; - case GameCommand::SetLandHeight: - return "SetLandHeight"; - case GameCommand::TogglePause: - return "TogglePause"; - case GameCommand::PlaceTrack: - return "PlaceTrack"; - case GameCommand::RemoveTrack: - return "RemoveTrack"; - case GameCommand::LoadOrQuit: - return "LoadOrQuit"; - case GameCommand::CreateRide: - return "CreateRide"; - case GameCommand::DemolishRide: - return "DemolishRide"; - case GameCommand::SetRideStatus: - return "SetRideStatus"; - case GameCommand::SetRideVehicles: - return "SetRideVehicles"; - case GameCommand::SetRideName: - return "SetRideName"; - case GameCommand::SetRideSetting: - return "SetRideSetting"; - case GameCommand::PlaceRideEntranceOrExit: - return "PlaceRideEntranceOrExit"; - case GameCommand::RemoveRideEntranceOrExit: - return "RemoveRideEntranceOrExit"; - case GameCommand::RemoveScenery: - return "RemoveScenery"; - case GameCommand::PlaceScenery: - return "PlaceScenery"; - case GameCommand::SetWaterHeight: - return "SetWaterHeight"; - case GameCommand::PlacePath: - return "PlacePath"; - case GameCommand::PlacePathFromTrack: - return "PlacePathFromTrack"; - case GameCommand::RemovePath: - return "RemovePath"; - case GameCommand::ChangeSurfaceStyle: - return "ChangeSurfaceStyle"; - case GameCommand::SetRidePrice: - return "SetRidePrice"; - case GameCommand::SetGuestName: - return "SetGuestName"; - case GameCommand::SetStaffName: - return "SetStaffName"; - case GameCommand::RaiseLand: - return "RaiseLand"; - case GameCommand::LowerLand: - return "LowerLand"; - case GameCommand::EditLandSmooth: - return "EditLandSmooth"; - case GameCommand::RaiseWater: - return "RaiseWater"; - case GameCommand::LowerWater: - return "LowerWater"; - case GameCommand::SetBrakesSpeed: - return "SetBrakesSpeed"; - case GameCommand::HireNewStaffMember: - return "HireNewStaffMember"; - case GameCommand::SetStaffPatrol: - return "SetStaffPatrol"; - case GameCommand::FireStaffMember: - return "FireStaffMember"; - case GameCommand::SetStaffOrders: - return "SetStaffOrders"; - case GameCommand::SetParkName: - return "SetParkName"; - case GameCommand::SetParkOpen: - return "SetParkOpen"; - case GameCommand::BuyLandRights: - return "BuyLandRights"; - case GameCommand::PlaceParkEntrance: - return "PlaceParkEntrance"; - case GameCommand::RemoveParkEntrance: - return "RemoveParkEntrance"; - case GameCommand::SetMazeTrack: - return "SetMazeTrack"; - case GameCommand::SetParkEntranceFee: - return "SetParkEntranceFee"; - case GameCommand::SetStaffColour: - return "SetStaffColour"; - case GameCommand::PlaceWall: - return "PlaceWall"; - case GameCommand::RemoveWall: - return "RemoveWall"; - case GameCommand::PlaceLargeScenery: - return "PlaceLargeScenery"; - case GameCommand::RemoveLargeScenery: - return "RemoveLargeScenery"; - case GameCommand::SetCurrentLoan: - return "SetCurrentLoan"; - case GameCommand::SetResearchFunding: - return "SetResearchFunding"; - case GameCommand::PlaceTrackDesign: - return "PlaceTrackDesign"; - case GameCommand::StartMarketingCampaign: - return "StartMarketingCampaign"; - case GameCommand::PlaceMazeDesign: - return "PlaceMazeDesign"; - case GameCommand::PlaceBanner: - return "PlaceBanner"; - case GameCommand::RemoveBanner: - return "RemoveBanner"; - case GameCommand::SetSceneryColour: - return "SetSceneryColour"; - case GameCommand::SetWallColour: - return "SetWallColour"; - case GameCommand::SetLargeSceneryColour: - return "SetLargeSceneryColour"; - case GameCommand::SetBannerColour: - return "SetBannerColour"; - case GameCommand::SetLandOwnership: - return "SetLandOwnership"; - case GameCommand::ClearScenery: - return "ClearScenery"; - case GameCommand::SetBannerName: - return "SetBannerName"; - case GameCommand::SetSignName: - return "SetSignName"; - case GameCommand::SetBannerStyle: - return "SetBannerStyle"; - case GameCommand::SetSignStyle: - return "SetSignStyle"; - case GameCommand::SetPlayerGroup: - return "SetPlayerGroup"; - case GameCommand::ModifyGroups: - return "ModifyGroups"; - case GameCommand::KickPlayer: - return "KickPlayer"; - case GameCommand::Cheat: - return "Cheat"; - case GameCommand::PickupGuest: - return "PickupGuest"; - case GameCommand::PickupStaff: - return "PickupStaff"; - case GameCommand::BalloonPress: - return "BalloonPress"; - case GameCommand::ModifyTile: - return "ModifyTile"; - case GameCommand::EditScenarioOptions: - return "EditScenarioOptions"; - case GameCommand::PlacePeepSpawn: - return "PlacePeepSpawn"; - case GameCommand::SetClimate: - return "SetClimate"; - case GameCommand::SetColourScheme: - return "SetColourScheme"; - case GameCommand::SetStaffCostume: - return "SetStaffCostume"; - case GameCommand::PlaceFootpathAddition: - return "PlaceFootpathAddition"; - case GameCommand::RemoveFootpathAddition: - return "RemoveFootpathAddition"; - case GameCommand::GuestSetFlags: - return "GuestSetFlags"; - case GameCommand::SetDate: - return "SetDate"; - case GameCommand::Custom: - return "Custom"; - case GameCommand::ChangeMapSize: - return "ChangeMapSize"; - default: - break; - } - return ""; + Initialize(); + + const auto idx = static_cast(id); + Guard::IndexInRange(idx, _actionNames); + + return _actionNames[idx]; } std::unique_ptr Create(GameCommand id) @@ -381,9 +230,7 @@ namespace GameActions result = factory(); } } -#ifdef _DEBUG - Guard::ArgumentNotNull(result, "Attempting to create unregistered gameaction: %u", id); -#endif + Guard::ArgumentNotNull(result, "Attempting to create unregistered game action: %u", id); return std::unique_ptr(result); } @@ -396,4 +243,14 @@ namespace GameActions return false; } + void Initialize() + { + static bool initialized = false; + if (initialized) + return; + + Register(); + initialized = true; + } + } // namespace GameActions From f491c97734ab6cd6693783b032973b06414d1c13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Thu, 11 Nov 2021 16:16:52 +0200 Subject: [PATCH 3/5] Refactor game action registry initialization and make it constexpr --- src/openrct2/actions/GameAction.h | 1 - src/openrct2/actions/GameActionRegistry.cpp | 58 +++++++++------------ 2 files changed, 25 insertions(+), 34 deletions(-) diff --git a/src/openrct2/actions/GameAction.h b/src/openrct2/actions/GameAction.h index 41774cd2ce..fc8fa89267 100644 --- a/src/openrct2/actions/GameAction.h +++ b/src/openrct2/actions/GameAction.h @@ -256,7 +256,6 @@ namespace GameActions { using GameActionFactory = GameAction* (*)(); - void Initialize(); bool IsValidId(uint32_t id); const char* GetName(GameCommand id); diff --git a/src/openrct2/actions/GameActionRegistry.cpp b/src/openrct2/actions/GameActionRegistry.cpp index bf1a0d3e66..68256d2919 100644 --- a/src/openrct2/actions/GameActionRegistry.cpp +++ b/src/openrct2/actions/GameActionRegistry.cpp @@ -94,29 +94,31 @@ namespace GameActions { - static std::array _actions{}; - static std::array _actionNames{}; + struct GameActionEntry + { + GameActionFactory factory{}; + const char* name{}; + }; - static void Register(GameCommand id, GameActionFactory factory, const char* name) + using GameActionRegistry = std::array; + + static constexpr void Register(GameActionRegistry& registry, GameCommand id, GameActionFactory factory, const char* name) { const auto idx = static_cast(id); - - Guard::Assert(idx < std::size(_actions)); - Guard::ArgumentNotNull(factory); - - _actions[idx] = factory; - _actionNames[idx] = name; + registry[idx] = { factory, name }; } - template static void Register(const char* name) + template static constexpr void Register(GameActionRegistry& registry, const char* name) { GameActionFactory factory = []() -> GameAction* { return new T(); }; - Register(T::TYPE, factory, name); + Register(registry, T::TYPE, factory, name); } - void Register() + static constexpr GameActionRegistry BuildRegistry() { -#define REGISTER_ACTION(type) Register(#type) + GameActionRegistry registry{}; + +#define REGISTER_ACTION(type) Register(registry, #type) REGISTER_ACTION(BalloonPressAction); REGISTER_ACTION(BannerPlaceAction); @@ -203,28 +205,28 @@ namespace GameActions #endif #undef REGISTER_ACTION + + return registry; } + static constexpr GameActionRegistry _registry = BuildRegistry(); + const char* GetName(GameCommand id) { - Initialize(); - const auto idx = static_cast(id); - Guard::IndexInRange(idx, _actionNames); + Guard::IndexInRange(idx, _registry); - return _actionNames[idx]; + return _registry[idx].name; } std::unique_ptr Create(GameCommand id) { - Initialize(); - const auto idx = static_cast(id); GameAction* result = nullptr; - if (idx < std::size(_actions)) + if (idx < std::size(_registry)) { - GameActionFactory factory = _actions[idx]; + GameActionFactory factory = _registry[idx].factory; if (factory != nullptr) { result = factory(); @@ -236,21 +238,11 @@ namespace GameActions bool IsValidId(uint32_t id) { - if (id < std::size(_actions)) + if (id < std::size(_registry)) { - return _actions[id] != nullptr; + return _registry[id].factory != nullptr; } return false; } - void Initialize() - { - static bool initialized = false; - if (initialized) - return; - - Register(); - initialized = true; - } - } // namespace GameActions From 55af69813a99b0adfc7a01f26b9fe0ede69e1837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Thu, 11 Nov 2021 16:23:50 +0200 Subject: [PATCH 4/5] Ensure registration is never out of bounds with static_assert --- src/openrct2/actions/GameActionRegistry.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/openrct2/actions/GameActionRegistry.cpp b/src/openrct2/actions/GameActionRegistry.cpp index 68256d2919..71d776b836 100644 --- a/src/openrct2/actions/GameActionRegistry.cpp +++ b/src/openrct2/actions/GameActionRegistry.cpp @@ -102,16 +102,20 @@ namespace GameActions using GameActionRegistry = std::array; - static constexpr void Register(GameActionRegistry& registry, GameCommand id, GameActionFactory factory, const char* name) + template + static constexpr void Register(GameActionRegistry& registry, GameActionFactory factory, const char* name) { - const auto idx = static_cast(id); + constexpr auto idx = static_cast(TId); + + static_assert(idx < EnumValue(GameCommand::Count)); + registry[idx] = { factory, name }; } template static constexpr void Register(GameActionRegistry& registry, const char* name) { GameActionFactory factory = []() -> GameAction* { return new T(); }; - Register(registry, T::TYPE, factory, name); + Register(registry, factory, name); } static constexpr GameActionRegistry BuildRegistry() From d80612dfe4f6c94036106afe1cb4137c86f22fc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Thu, 11 Nov 2021 16:25:46 +0200 Subject: [PATCH 5/5] Update date --- src/openrct2/actions/GameActionRegistry.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openrct2/actions/GameActionRegistry.cpp b/src/openrct2/actions/GameActionRegistry.cpp index 71d776b836..409c6bcceb 100644 --- a/src/openrct2/actions/GameActionRegistry.cpp +++ b/src/openrct2/actions/GameActionRegistry.cpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2020 OpenRCT2 developers + * Copyright (c) 2014-2021 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2