From 8a4df108babd1a7ed96f378e3eea8d3721902aac Mon Sep 17 00:00:00 2001 From: Haven Kim Date: Sat, 17 Oct 2020 13:27:02 -0700 Subject: [PATCH] Close #12428: Refactor OBJECT_SOURCE_GAME to use strong enum --- .../windows/EditorObjectSelection.cpp | 30 +++++++++---------- src/openrct2/object/BannerObject.cpp | 4 +-- src/openrct2/object/FootpathItemObject.cpp | 4 +-- src/openrct2/object/Object.cpp | 4 +-- src/openrct2/object/Object.h | 24 +++++++-------- src/openrct2/object/ObjectFactory.cpp | 30 +++++++++---------- src/openrct2/object/ObjectList.cpp | 4 +-- src/openrct2/object/ObjectList.h | 2 +- src/openrct2/object/ObjectManager.cpp | 18 +++++------ src/openrct2/object/ObjectManager.h | 2 +- src/openrct2/object/ObjectRepository.cpp | 10 +++---- src/openrct2/object/ObjectRepository.h | 8 ++--- src/openrct2/rct1/S4Importer.cpp | 2 +- 13 files changed, 71 insertions(+), 71 deletions(-) diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index be877476f8..e75bf70bca 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -1433,24 +1433,24 @@ static bool filter_string(const ObjectRepositoryItem* item) return inName || inRideType || inPath; } -static bool sources_match(uint8_t source) +static bool sources_match(ObjectSourceGame source) { // clang-format off - return (_FILTER_RCT1 && source == OBJECT_SOURCE_RCT1) || - (_FILTER_AA && source == OBJECT_SOURCE_ADDED_ATTRACTIONS) || - (_FILTER_LL && source == OBJECT_SOURCE_LOOPY_LANDSCAPES) || - (_FILTER_RCT2 && source == OBJECT_SOURCE_RCT2) || - (_FILTER_WW && source == OBJECT_SOURCE_WACKY_WORLDS) || - (_FILTER_TT && source == OBJECT_SOURCE_TIME_TWISTER) || - (_FILTER_OO && source == OBJECT_SOURCE_OPENRCT2_OFFICIAL) || + return (_FILTER_RCT1 && source == ObjectSourceGame::RCT1) || + (_FILTER_AA && source == ObjectSourceGame::AddedAttractions) || + (_FILTER_LL && source == ObjectSourceGame::LoopyLandscapes) || + (_FILTER_RCT2 && source == ObjectSourceGame::RCT2) || + (_FILTER_WW && source == ObjectSourceGame::WackyWorlds) || + (_FILTER_TT && source == ObjectSourceGame::TimeTwister) || + (_FILTER_OO && source == ObjectSourceGame::OpenRCT2Official) || (_FILTER_CUSTOM && - source != OBJECT_SOURCE_RCT1 && - source != OBJECT_SOURCE_ADDED_ATTRACTIONS && - source != OBJECT_SOURCE_LOOPY_LANDSCAPES && - source != OBJECT_SOURCE_RCT2 && - source != OBJECT_SOURCE_WACKY_WORLDS && - source != OBJECT_SOURCE_TIME_TWISTER && - source != OBJECT_SOURCE_OPENRCT2_OFFICIAL); + source != ObjectSourceGame::RCT1 && + source != ObjectSourceGame::AddedAttractions && + source != ObjectSourceGame::LoopyLandscapes && + source != ObjectSourceGame::RCT2 && + source != ObjectSourceGame::WackyWorlds && + source != ObjectSourceGame::TimeTwister && + source != ObjectSourceGame::OpenRCT2Official); // clang-format on } diff --git a/src/openrct2/object/BannerObject.cpp b/src/openrct2/object/BannerObject.cpp index f9be669705..eb1493b48c 100644 --- a/src/openrct2/object/BannerObject.cpp +++ b/src/openrct2/object/BannerObject.cpp @@ -48,8 +48,8 @@ void BannerObject::ReadLegacy(IReadObjectContext* context, OpenRCT2::IStream* st if (item != nullptr) { auto sourceGame = item->GetFirstSourceGame(); - if (sourceGame == OBJECT_SOURCE_WACKY_WORLDS || sourceGame == OBJECT_SOURCE_TIME_TWISTER - || sourceGame == OBJECT_SOURCE_CUSTOM) + if (sourceGame == ObjectSourceGame::WackyWorlds || sourceGame == ObjectSourceGame::TimeTwister + || sourceGame == ObjectSourceGame::Custom) { auto scgPathX = Object::GetScgPathXHeader(); SetPrimarySceneryGroup(&scgPathX); diff --git a/src/openrct2/object/FootpathItemObject.cpp b/src/openrct2/object/FootpathItemObject.cpp index 5a8c9433c1..ee076b2f48 100644 --- a/src/openrct2/object/FootpathItemObject.cpp +++ b/src/openrct2/object/FootpathItemObject.cpp @@ -52,8 +52,8 @@ void FootpathItemObject::ReadLegacy(IReadObjectContext* context, OpenRCT2::IStre if (item != nullptr) { auto sourceGame = item->GetFirstSourceGame(); - if (sourceGame == OBJECT_SOURCE_WACKY_WORLDS || sourceGame == OBJECT_SOURCE_TIME_TWISTER - || sourceGame == OBJECT_SOURCE_CUSTOM) + if (sourceGame == ObjectSourceGame::WackyWorlds || sourceGame == ObjectSourceGame::TimeTwister + || sourceGame == ObjectSourceGame::Custom) { auto scgPathX = Object::GetScgPathXHeader(); SetPrimarySceneryGroup(&scgPathX); diff --git a/src/openrct2/object/Object.cpp b/src/openrct2/object/Object.cpp index 8aac7bbd42..67b0133568 100644 --- a/src/openrct2/object/Object.cpp +++ b/src/openrct2/object/Object.cpp @@ -100,12 +100,12 @@ rct_object_entry Object::CreateHeader(const char name[DAT_NAME_LENGTH + 1], uint return header; } -std::vector Object::GetSourceGames() +std::vector Object::GetSourceGames() { return _sourceGames; } -void Object::SetSourceGames(const std::vector& sourceGames) +void Object::SetSourceGames(const std::vector& sourceGames) { _sourceGames = sourceGames; } diff --git a/src/openrct2/object/Object.h b/src/openrct2/object/Object.h index f2c2831830..c072e8e423 100644 --- a/src/openrct2/object/Object.h +++ b/src/openrct2/object/Object.h @@ -59,16 +59,16 @@ enum OBJECT_SELECTION_FLAGS #define OBJECT_SELECTION_NOT_SELECTED_OR_REQUIRED 0 -enum OBJECT_SOURCE_GAME +enum class ObjectSourceGame : uint8_t { - OBJECT_SOURCE_CUSTOM, - OBJECT_SOURCE_WACKY_WORLDS, - OBJECT_SOURCE_TIME_TWISTER, - OBJECT_SOURCE_OPENRCT2_OFFICIAL, - OBJECT_SOURCE_RCT1, - OBJECT_SOURCE_ADDED_ATTRACTIONS, - OBJECT_SOURCE_LOOPY_LANDSCAPES, - OBJECT_SOURCE_RCT2 = 8 + Custom, + WackyWorlds, + TimeTwister, + OpenRCT2Official, + RCT1, + AddedAttractions, + LoopyLandscapes, + RCT2 = 8 }; #pragma pack(push, 1) @@ -179,7 +179,7 @@ private: rct_object_entry _objectEntry{}; StringTable _stringTable; ImageTable _imageTable; - std::vector _sourceGames; + std::vector _sourceGames; std::vector _authors; bool _isJsonObject{}; @@ -269,8 +269,8 @@ public: virtual void SetRepositoryItem(ObjectRepositoryItem* /*item*/) const { } - std::vector GetSourceGames(); - void SetSourceGames(const std::vector& sourceGames); + std::vector GetSourceGames(); + void SetSourceGames(const std::vector& sourceGames); const std::vector& GetAuthors() const; void SetAuthors(const std::vector&& authors); diff --git a/src/openrct2/object/ObjectFactory.cpp b/src/openrct2/object/ObjectFactory.cpp index 220680c239..3cc282a014 100644 --- a/src/openrct2/object/ObjectFactory.cpp +++ b/src/openrct2/object/ObjectFactory.cpp @@ -167,20 +167,20 @@ namespace ObjectFactory static std::unique_ptr CreateObjectFromJson( IObjectRepository& objectRepository, json_t& jRoot, const IFileDataRetriever* fileRetriever); - static uint8_t ParseSourceGame(const std::string& s) + static ObjectSourceGame ParseSourceGame(const std::string& s) { - static const std::unordered_map LookupTable{ - { "rct1", OBJECT_SOURCE_RCT1 }, - { "rct1aa", OBJECT_SOURCE_ADDED_ATTRACTIONS }, - { "rct1ll", OBJECT_SOURCE_LOOPY_LANDSCAPES }, - { "rct2", OBJECT_SOURCE_RCT2 }, - { "rct2ww", OBJECT_SOURCE_WACKY_WORLDS }, - { "rct2tt", OBJECT_SOURCE_TIME_TWISTER }, - { "official", OBJECT_SOURCE_OPENRCT2_OFFICIAL }, - { "custom", OBJECT_SOURCE_CUSTOM }, + static const std::unordered_map LookupTable{ + { "rct1", ObjectSourceGame::RCT1 }, + { "rct1aa", ObjectSourceGame::AddedAttractions }, + { "rct1ll", ObjectSourceGame::LoopyLandscapes }, + { "rct2", ObjectSourceGame::RCT2 }, + { "rct2ww", ObjectSourceGame::WackyWorlds }, + { "rct2tt", ObjectSourceGame::TimeTwister }, + { "official", ObjectSourceGame::OpenRCT2Official }, + { "custom", ObjectSourceGame::Custom }, }; auto result = LookupTable.find(s); - return (result != LookupTable.end()) ? result->second : OBJECT_SOURCE_CUSTOM; + return (result != LookupTable.end()) ? result->second : ObjectSourceGame::Custom; } static void ReadObjectLegacy(Object& object, IReadObjectContext* context, OpenRCT2::IStream* stream) @@ -400,7 +400,7 @@ namespace ObjectFactory auto sourceGames = jRoot["sourceGame"]; if (sourceGames.is_array() || sourceGames.is_string()) { - std::vector sourceGameVector; + std::vector sourceGameVector; for (const auto& jSourceGame : sourceGames) { sourceGameVector.push_back(ParseSourceGame(Json::GetString(jSourceGame))); @@ -412,18 +412,18 @@ namespace ObjectFactory else { log_error("Object %s has an incorrect sourceGame parameter.", id.c_str()); - result.SetSourceGames({ OBJECT_SOURCE_CUSTOM }); + result.SetSourceGames({ ObjectSourceGame::Custom }); } } // >90% of objects are custom, so allow omitting the parameter without displaying an error. else if (sourceGames.is_null()) { - result.SetSourceGames({ OBJECT_SOURCE_CUSTOM }); + result.SetSourceGames({ ObjectSourceGame::Custom }); } else { log_error("Object %s has an incorrect sourceGame parameter.", id.c_str()); - result.SetSourceGames({ OBJECT_SOURCE_CUSTOM }); + result.SetSourceGames({ ObjectSourceGame::Custom }); } } diff --git a/src/openrct2/object/ObjectList.cpp b/src/openrct2/object/ObjectList.cpp index f1e793a671..c1475c4e54 100644 --- a/src/openrct2/object/ObjectList.cpp +++ b/src/openrct2/object/ObjectList.cpp @@ -69,9 +69,9 @@ bool object_entry_is_empty(const rct_object_entry* entry) return false; } -uint8_t object_entry_get_source_game_legacy(const rct_object_entry* objectEntry) +ObjectSourceGame object_entry_get_source_game_legacy(const rct_object_entry* objectEntry) { - return (objectEntry->flags & 0xF0) >> 4; + return static_cast((objectEntry->flags & 0xF0) >> 4); } /** diff --git a/src/openrct2/object/ObjectList.h b/src/openrct2/object/ObjectList.h index 497abb76e4..5cd2ecc44e 100644 --- a/src/openrct2/object/ObjectList.h +++ b/src/openrct2/object/ObjectList.h @@ -21,4 +21,4 @@ void get_type_entry_index(size_t index, uint8_t* outObjectType, ObjectEntryIndex const rct_object_entry* get_loaded_object_entry(size_t index); void* get_loaded_object_chunk(size_t index); uint8_t object_entry_get_type(const rct_object_entry* objectEntry); -uint8_t object_entry_get_source_game_legacy(const rct_object_entry* objectEntry); +ObjectSourceGame object_entry_get_source_game_legacy(const rct_object_entry* objectEntry); diff --git a/src/openrct2/object/ObjectManager.cpp b/src/openrct2/object/ObjectManager.cpp index 4f1d97a7bf..ba93821ce9 100644 --- a/src/openrct2/object/ObjectManager.cpp +++ b/src/openrct2/object/ObjectManager.cpp @@ -270,23 +270,23 @@ public: LoadObject("#ORCT2SN"); } - static rct_string_id GetObjectSourceGameString(const uint8_t sourceGame) + static rct_string_id GetObjectSourceGameString(const ObjectSourceGame sourceGame) { switch (sourceGame) { - case OBJECT_SOURCE_RCT1: + case ObjectSourceGame::RCT1: return STR_SCENARIO_CATEGORY_RCT1; - case OBJECT_SOURCE_ADDED_ATTRACTIONS: + case ObjectSourceGame::AddedAttractions: return STR_SCENARIO_CATEGORY_RCT1_AA; - case OBJECT_SOURCE_LOOPY_LANDSCAPES: + case ObjectSourceGame::LoopyLandscapes: return STR_SCENARIO_CATEGORY_RCT1_LL; - case OBJECT_SOURCE_RCT2: + case ObjectSourceGame::RCT2: return STR_ROLLERCOASTER_TYCOON_2_DROPDOWN; - case OBJECT_SOURCE_WACKY_WORLDS: + case ObjectSourceGame::WackyWorlds: return STR_OBJECT_FILTER_WW; - case OBJECT_SOURCE_TIME_TWISTER: + case ObjectSourceGame::TimeTwister: return STR_OBJECT_FILTER_TT; - case OBJECT_SOURCE_OPENRCT2_OFFICIAL: + case ObjectSourceGame::OpenRCT2Official: return STR_OBJECT_FILTER_OPENRCT2_OFFICIAL; default: return STR_OBJECT_FILTER_CUSTOM; @@ -774,7 +774,7 @@ void object_manager_unload_all_objects() objectManager.UnloadAll(); } -rct_string_id object_manager_get_source_game_string(const uint8_t sourceGame) +rct_string_id object_manager_get_source_game_string(const ObjectSourceGame sourceGame) { return ObjectManager::GetObjectSourceGameString(sourceGame); } diff --git a/src/openrct2/object/ObjectManager.h b/src/openrct2/object/ObjectManager.h index 6084b364fe..dda14a4172 100644 --- a/src/openrct2/object/ObjectManager.h +++ b/src/openrct2/object/ObjectManager.h @@ -50,4 +50,4 @@ ObjectEntryIndex object_manager_get_loaded_object_entry_index(const void* loaded void* object_manager_load_object(const rct_object_entry* entry); void object_manager_unload_objects(const std::vector& entries); void object_manager_unload_all_objects(); -rct_string_id object_manager_get_source_game_string(const uint8_t sourceGame); +rct_string_id object_manager_get_source_game_string(const ObjectSourceGame sourceGame); diff --git a/src/openrct2/object/ObjectRepository.cpp b/src/openrct2/object/ObjectRepository.cpp index 694eaa048f..e0884aaecd 100644 --- a/src/openrct2/object/ObjectRepository.cpp +++ b/src/openrct2/object/ObjectRepository.cpp @@ -178,7 +178,7 @@ protected: for (size_t i = 0; i < sourceLength; i++) { auto value = stream->ReadValue(); - item.Sources.push_back(value); + item.Sources.push_back(static_cast(value)); } auto authorsLength = stream->ReadValue(); @@ -671,10 +671,10 @@ bool IsObjectCustom(const ObjectRepositoryItem* object) switch (object->GetFirstSourceGame()) { - case OBJECT_SOURCE_RCT2: - case OBJECT_SOURCE_WACKY_WORLDS: - case OBJECT_SOURCE_TIME_TWISTER: - case OBJECT_SOURCE_OPENRCT2_OFFICIAL: + case ObjectSourceGame::RCT2: + case ObjectSourceGame::WackyWorlds: + case ObjectSourceGame::TimeTwister: + case ObjectSourceGame::OpenRCT2Official: return false; default: return true; diff --git a/src/openrct2/object/ObjectRepository.h b/src/openrct2/object/ObjectRepository.h index cfb37161e3..503e282d21 100644 --- a/src/openrct2/object/ObjectRepository.h +++ b/src/openrct2/object/ObjectRepository.h @@ -41,7 +41,7 @@ struct ObjectRepositoryItem std::string Path; std::string Name; std::vector Authors; - std::vector Sources; + std::vector Sources; Object* LoadedObject{}; struct { @@ -54,12 +54,12 @@ struct ObjectRepositoryItem std::vector Entries; } SceneryGroupInfo; - OBJECT_SOURCE_GAME GetFirstSourceGame() const + ObjectSourceGame GetFirstSourceGame() const { if (Sources.empty()) - return OBJECT_SOURCE_CUSTOM; + return ObjectSourceGame::Custom; else - return static_cast(Sources[0]); + return static_cast(Sources[0]); } }; diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 05b2241c72..bf75b5346d 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -1930,7 +1930,7 @@ private: for (const auto objectName : objectNames) { rct_object_entry entry{}; - entry.flags = ((OBJECT_SOURCE_RCT2 << 4) & 0xF0) | (objectType & 0x0F); + entry.flags = ((static_cast(ObjectSourceGame::RCT2) << 4) & 0xF0) | (objectType & 0x0F); entry.SetName(objectName); entries.push_back(entry); }