mirror of https://github.com/OpenRCT2/OpenRCT2.git
Pass name during registration and minor cleanup
This commit is contained in:
parent
96e2641d0d
commit
c7fa1b44e9
|
@ -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<GameAction> ga = GameActions::Create(action->GetType());
|
||||
|
|
|
@ -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<typename T> static GameActionFactory Register()
|
||||
{
|
||||
GameActionFactory factory = []() -> GameAction* { return new T(); };
|
||||
Register(T::TYPE, factory);
|
||||
return factory;
|
||||
}
|
||||
|
||||
} // namespace GameActions
|
||||
|
|
|
@ -90,11 +90,14 @@
|
|||
#include "WaterRaiseAction.h"
|
||||
#include "WaterSetHeightAction.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
namespace GameActions
|
||||
{
|
||||
static GameActionFactory _actions[EnumValue(GameCommand::Count)];
|
||||
static std::array<GameActionFactory, EnumValue(GameCommand::Count)> _actions{};
|
||||
static std::array<const char*, EnumValue(GameCommand::Count)> _actionNames{};
|
||||
|
||||
GameActionFactory Register(GameCommand id, GameActionFactory factory)
|
||||
static void Register(GameCommand id, GameActionFactory factory, const char* name)
|
||||
{
|
||||
const auto idx = static_cast<size_t>(id);
|
||||
|
||||
|
@ -102,268 +105,114 @@ namespace GameActions
|
|||
Guard::ArgumentNotNull(factory);
|
||||
|
||||
_actions[idx] = factory;
|
||||
return factory;
|
||||
_actionNames[idx] = name;
|
||||
}
|
||||
|
||||
template<typename T> static void Register(const char* name)
|
||||
{
|
||||
GameActionFactory factory = []() -> GameAction* { return new T(); };
|
||||
Register(T::TYPE, factory, name);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
Register<BalloonPressAction>();
|
||||
Register<BannerPlaceAction>();
|
||||
Register<BannerRemoveAction>();
|
||||
Register<BannerSetColourAction>();
|
||||
Register<BannerSetNameAction>();
|
||||
Register<BannerSetStyleAction>();
|
||||
Register<ClimateSetAction>();
|
||||
Register<FootpathPlaceAction>();
|
||||
Register<FootpathPlaceFromTrackAction>();
|
||||
Register<FootpathRemoveAction>();
|
||||
Register<FootpathAdditionPlaceAction>();
|
||||
Register<FootpathAdditionRemoveAction>();
|
||||
Register<GuestSetNameAction>();
|
||||
Register<MazePlaceTrackAction>();
|
||||
Register<MazeSetTrackAction>();
|
||||
Register<NetworkModifyGroupAction>();
|
||||
Register<ParkMarketingAction>();
|
||||
Register<ParkEntranceRemoveAction>();
|
||||
Register<ParkSetLoanAction>();
|
||||
Register<ParkSetNameAction>();
|
||||
Register<ParkSetParameterAction>();
|
||||
Register<ParkSetResearchFundingAction>();
|
||||
Register<PeepPickupAction>();
|
||||
Register<PlaceParkEntranceAction>();
|
||||
Register<PlacePeepSpawnAction>();
|
||||
Register<PlayerKickAction>();
|
||||
Register<PlayerSetGroupAction>();
|
||||
Register<RideCreateAction>();
|
||||
Register<RideDemolishAction>();
|
||||
Register<RideEntranceExitPlaceAction>();
|
||||
Register<RideEntranceExitRemoveAction>();
|
||||
Register<RideSetColourSchemeAction>();
|
||||
Register<RideSetNameAction>();
|
||||
Register<RideSetPriceAction>();
|
||||
Register<RideSetStatusAction>();
|
||||
Register<RideSetAppearanceAction>();
|
||||
Register<RideSetVehicleAction>();
|
||||
Register<RideSetSettingAction>();
|
||||
Register<ScenarioSetSettingAction>();
|
||||
Register<SetParkEntranceFeeAction>();
|
||||
Register<SignSetNameAction>();
|
||||
Register<SignSetStyleAction>();
|
||||
Register<StaffFireAction>();
|
||||
Register<StaffHireNewAction>();
|
||||
Register<StaffSetColourAction>();
|
||||
Register<StaffSetNameAction>();
|
||||
Register<StaffSetOrdersAction>();
|
||||
Register<StaffSetCostumeAction>();
|
||||
Register<StaffSetPatrolAreaAction>();
|
||||
Register<SurfaceSetStyleAction>();
|
||||
Register<WallPlaceAction>();
|
||||
Register<WallRemoveAction>();
|
||||
Register<WallSetColourAction>();
|
||||
Register<SmallSceneryPlaceAction>();
|
||||
Register<SmallSceneryRemoveAction>();
|
||||
Register<SmallScenerySetColourAction>();
|
||||
Register<LargeSceneryPlaceAction>();
|
||||
Register<LargeSceneryRemoveAction>();
|
||||
Register<LargeScenerySetColourAction>();
|
||||
Register<LandBuyRightsAction>();
|
||||
Register<LandLowerAction>();
|
||||
Register<LandRaiseAction>();
|
||||
Register<LandSetHeightAction>();
|
||||
Register<LandSetRightsAction>();
|
||||
Register<LandSmoothAction>();
|
||||
Register<TileModifyAction>();
|
||||
Register<TrackDesignAction>();
|
||||
Register<TrackPlaceAction>();
|
||||
Register<TrackRemoveAction>();
|
||||
Register<TrackSetBrakeSpeedAction>();
|
||||
Register<ClearAction>();
|
||||
Register<PauseToggleAction>();
|
||||
Register<LoadOrQuitAction>();
|
||||
Register<WaterSetHeightAction>();
|
||||
Register<WaterLowerAction>();
|
||||
Register<WaterRaiseAction>();
|
||||
Register<GuestSetFlagsAction>();
|
||||
Register<ParkSetDateAction>();
|
||||
Register<SetCheatAction>();
|
||||
Register<ChangeMapSizeAction>();
|
||||
#define REGISTER_ACTION(type) Register<type>(#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<CustomAction>();
|
||||
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 "<error>";
|
||||
Initialize();
|
||||
|
||||
const auto idx = static_cast<size_t>(id);
|
||||
Guard::IndexInRange(idx, _actionNames);
|
||||
|
||||
return _actionNames[idx];
|
||||
}
|
||||
|
||||
std::unique_ptr<GameAction> 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<GameAction>(result);
|
||||
}
|
||||
|
||||
|
@ -396,4 +243,14 @@ namespace GameActions
|
|||
return false;
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
static bool initialized = false;
|
||||
if (initialized)
|
||||
return;
|
||||
|
||||
Register();
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
} // namespace GameActions
|
||||
|
|
Loading…
Reference in New Issue