From 11c16955c559aae634b508e3436718cae2e5f958 Mon Sep 17 00:00:00 2001 From: duncanspumpkin Date: Wed, 6 Feb 2019 15:05:35 +0000 Subject: [PATCH] Small refactor to use enum class --- src/openrct2-ui/windows/Ride.cpp | 27 +++-- .../actions/RideSetAppearanceAction.hpp | 103 ++++++++---------- 2 files changed, 64 insertions(+), 66 deletions(-) diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 7e204d638f..870a92fa16 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -4501,25 +4501,29 @@ static void window_ride_colour_dropdown(rct_window* w, rct_widgetindex widgetInd break; case WIDX_TRACK_MAIN_COLOUR: { - auto rideSetAppearanceAction = RideSetAppearanceAction(w->number, 0, dropdownIndex, w->ride_colour); + auto rideSetAppearanceAction = RideSetAppearanceAction( + w->number, RideSetAppearanceType::TrackColourMain, dropdownIndex, w->ride_colour); GameActions::Execute(&rideSetAppearanceAction); } break; case WIDX_TRACK_ADDITIONAL_COLOUR: { - auto rideSetAppearanceAction = RideSetAppearanceAction(w->number, 1, dropdownIndex, w->ride_colour); + auto rideSetAppearanceAction = RideSetAppearanceAction( + w->number, RideSetAppearanceType::TrackColourAdditional, dropdownIndex, w->ride_colour); GameActions::Execute(&rideSetAppearanceAction); } break; case WIDX_TRACK_SUPPORT_COLOUR: { - auto rideSetAppearanceAction = RideSetAppearanceAction(w->number, 4, dropdownIndex, w->ride_colour); + auto rideSetAppearanceAction = RideSetAppearanceAction( + w->number, RideSetAppearanceType::TrackColourSupports, dropdownIndex, w->ride_colour); GameActions::Execute(&rideSetAppearanceAction); } break; case WIDX_MAZE_STYLE_DROPDOWN: { - auto rideSetAppearanceAction = RideSetAppearanceAction(w->number, 4, dropdownIndex, w->ride_colour); + auto rideSetAppearanceAction = RideSetAppearanceAction( + w->number, RideSetAppearanceType::MazeStyle, dropdownIndex, w->ride_colour); GameActions::Execute(&rideSetAppearanceAction); } break; @@ -4534,7 +4538,8 @@ static void window_ride_colour_dropdown(rct_window* w, rct_widgetindex widgetInd { if (ddIndex == dropdownIndex) { - auto rideSetAppearanceAction = RideSetAppearanceAction(w->number, 6, ddIndex, 0); + auto rideSetAppearanceAction = RideSetAppearanceAction( + w->number, RideSetAppearanceType::EntranceStyle, ddIndex, 0); GameActions::Execute(&rideSetAppearanceAction); break; } @@ -4545,7 +4550,8 @@ static void window_ride_colour_dropdown(rct_window* w, rct_widgetindex widgetInd } case WIDX_VEHICLE_COLOUR_SCHEME_DROPDOWN: { - auto rideSetAppearanceAction = RideSetAppearanceAction(w->number, 5, dropdownIndex, 0); + auto rideSetAppearanceAction = RideSetAppearanceAction( + w->number, RideSetAppearanceType::VehicleColourScheme, dropdownIndex, 0); GameActions::Execute(&rideSetAppearanceAction); w->vehicleIndex = 0; } @@ -4556,19 +4562,22 @@ static void window_ride_colour_dropdown(rct_window* w, rct_widgetindex widgetInd break; case WIDX_VEHICLE_MAIN_COLOUR: { - auto rideSetAppearanceAction = RideSetAppearanceAction(w->number, 2, dropdownIndex, w->vehicleIndex); + auto rideSetAppearanceAction = RideSetAppearanceAction( + w->number, RideSetAppearanceType::VehicleColourBody, dropdownIndex, w->vehicleIndex); GameActions::Execute(&rideSetAppearanceAction); } break; case WIDX_VEHICLE_ADDITIONAL_COLOUR_1: { - auto rideSetAppearanceAction = RideSetAppearanceAction(w->number, 3, dropdownIndex, w->vehicleIndex); + auto rideSetAppearanceAction = RideSetAppearanceAction( + w->number, RideSetAppearanceType::VehicleColourTrim, dropdownIndex, w->vehicleIndex); GameActions::Execute(&rideSetAppearanceAction); } break; case WIDX_VEHICLE_ADDITIONAL_COLOUR_2: { - auto rideSetAppearanceAction = RideSetAppearanceAction(w->number, 7, dropdownIndex, w->vehicleIndex); + auto rideSetAppearanceAction = RideSetAppearanceAction( + w->number, RideSetAppearanceType::VehicleColourTernary, dropdownIndex, w->vehicleIndex); GameActions::Execute(&rideSetAppearanceAction); } break; diff --git a/src/openrct2/actions/RideSetAppearanceAction.hpp b/src/openrct2/actions/RideSetAppearanceAction.hpp index 349ebfb8ac..fb4bfad3f8 100644 --- a/src/openrct2/actions/RideSetAppearanceAction.hpp +++ b/src/openrct2/actions/RideSetAppearanceAction.hpp @@ -22,11 +22,24 @@ #include "../world/Park.h" #include "GameAction.h" +enum class RideSetAppearanceType : uint8_t +{ + TrackColourMain, + TrackColourAdditional, + TrackColourSupports, + MazeStyle = TrackColourSupports, + VehicleColourBody, + VehicleColourTrim, + VehicleColourTernary, + VehicleColourScheme, + EntranceStyle +}; + DEFINE_GAME_ACTION(RideSetAppearanceAction, GAME_COMMAND_SET_RIDE_APPEARANCE, GameActionResult) { private: NetworkRideId_t _rideIndex{ -1 }; - uint8_t _type; + RideSetAppearanceType _type; uint8_t _value; uint32_t _index; @@ -34,7 +47,7 @@ public: RideSetAppearanceAction() { } - RideSetAppearanceAction(ride_id_t rideIndex, uint8_t type, uint8_t value, uint32_t index) + RideSetAppearanceAction(ride_id_t rideIndex, RideSetAppearanceType type, uint8_t value, uint32_t index) : _rideIndex(rideIndex) , _type(type) , _value(value) @@ -50,8 +63,8 @@ public: void Serialise(DataSerialiser & stream) override { GameAction::Serialise(stream); - - stream << DS_TAG(_rideIndex) << DS_TAG(_type) << DS_TAG(_value) << DS_TAG(_index); + auto type = static_cast(_type); + stream << DS_TAG(_rideIndex) << DS_TAG(type) << DS_TAG(_value) << DS_TAG(_index); } GameActionResult::Ptr Query() const override @@ -71,52 +84,30 @@ public: switch (_type) { - case 0: + case RideSetAppearanceType::TrackColourMain: + case RideSetAppearanceType::TrackColourAdditional: + case RideSetAppearanceType::TrackColourSupports: if (_index >= std::size(ride->track_colour)) { log_warning("Invalid game command, index %d out of bounds", _index); return std::make_unique(GA_ERROR::INVALID_PARAMETERS, STR_NONE); } break; - case 1: - if (_index >= std::size(ride->track_colour)) - { - log_warning("Invalid game command, index %d out of bounds", _index); - return std::make_unique(GA_ERROR::INVALID_PARAMETERS, STR_NONE); - } - break; - case 2: + case RideSetAppearanceType::VehicleColourBody: + case RideSetAppearanceType::VehicleColourTrim: + case RideSetAppearanceType::VehicleColourTernary: if (_index >= std::size(ride->vehicle_colours)) { log_warning("Invalid game command, index %d out of bounds", _index); return std::make_unique(GA_ERROR::INVALID_PARAMETERS, STR_NONE); } break; - case 3: - if (_index >= std::size(ride->vehicle_colours)) - { - log_warning("Invalid game command, index %d out of bounds", _index); - return std::make_unique(GA_ERROR::INVALID_PARAMETERS, STR_NONE); - } - break; - case 4: - if (_index >= std::size(ride->track_colour)) - { - log_warning("Invalid game command, index %d out of bounds", _index); - return std::make_unique(GA_ERROR::INVALID_PARAMETERS, STR_NONE); - } - break; - case 5: - break; - case 6: - break; - case 7: - if (_index >= std::size(ride->vehicle_colours)) - { - log_warning("Invalid game command, index %d out of bounds", _index); - return std::make_unique(GA_ERROR::INVALID_PARAMETERS, STR_NONE); - } + case RideSetAppearanceType::VehicleColourScheme: + case RideSetAppearanceType::EntranceStyle: break; + default: + log_warning("Invalid game command, type %d not recognised", _type); + return std::make_unique(GA_ERROR::INVALID_PARAMETERS, STR_NONE); } return std::make_unique(); @@ -133,27 +124,31 @@ public: switch (_type) { - case 0: + case RideSetAppearanceType::TrackColourMain: ride->track_colour[_index].main = _value; gfx_invalidate_screen(); break; - case 1: + case RideSetAppearanceType::TrackColourAdditional: ride->track_colour[_index].additional = _value; gfx_invalidate_screen(); break; - case 2: - *((uint8_t*)(&ride->vehicle_colours[_index])) = _value; - ride_update_vehicle_colours(ride); - break; - case 3: - *((uint8_t*)(&ride->vehicle_colours[_index]) + 1) = _value; - ride_update_vehicle_colours(ride); - break; - case 4: + case RideSetAppearanceType::TrackColourSupports: ride->track_colour[_index].supports = _value; gfx_invalidate_screen(); break; - case 5: + case RideSetAppearanceType::VehicleColourBody: + ride->vehicle_colours[_index].Body = _value; + ride_update_vehicle_colours(ride); + break; + case RideSetAppearanceType::VehicleColourTrim: + ride->vehicle_colours[_index].Trim = _value; + ride_update_vehicle_colours(ride); + break; + case RideSetAppearanceType::VehicleColourTernary: + ride->vehicle_colours[_index].Ternary = _value; + ride_update_vehicle_colours(ride); + break; + case RideSetAppearanceType::VehicleColourScheme: ride->colour_scheme_type &= ~(RIDE_COLOUR_SCHEME_DIFFERENT_PER_TRAIN | RIDE_COLOUR_SCHEME_DIFFERENT_PER_CAR); ride->colour_scheme_type |= _value; for (uint32_t i = 1; i < std::size(ride->vehicle_colours); i++) @@ -162,16 +157,11 @@ public: } ride_update_vehicle_colours(ride); break; - case 6: + case RideSetAppearanceType::EntranceStyle: ride->entrance_style = _value; gLastEntranceStyle = _value; gfx_invalidate_screen(); break; - case 7: - - ride->vehicle_colours[_index].Ternary = _value; - ride_update_vehicle_colours(ride); - break; } window_invalidate_by_number(WC_RIDE, _rideIndex); @@ -185,8 +175,7 @@ public: res->Position.x = coord.x; res->Position.y = coord.y; res->Position.z = coord.z; - network_set_player_last_action_coord( - network_get_player_index(game_command_playerid), coord); + network_set_player_last_action_coord(network_get_player_index(game_command_playerid), coord); } return res; }