mirror of https://github.com/OpenRCT2/OpenRCT2.git
Close #12428: Refactor OBJECT_SOURCE_GAME to use strong enum
This commit is contained in:
parent
a9316869fc
commit
8a4df108ba
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -100,12 +100,12 @@ rct_object_entry Object::CreateHeader(const char name[DAT_NAME_LENGTH + 1], uint
|
|||
return header;
|
||||
}
|
||||
|
||||
std::vector<uint8_t> Object::GetSourceGames()
|
||||
std::vector<ObjectSourceGame> Object::GetSourceGames()
|
||||
{
|
||||
return _sourceGames;
|
||||
}
|
||||
|
||||
void Object::SetSourceGames(const std::vector<uint8_t>& sourceGames)
|
||||
void Object::SetSourceGames(const std::vector<ObjectSourceGame>& sourceGames)
|
||||
{
|
||||
_sourceGames = sourceGames;
|
||||
}
|
||||
|
|
|
@ -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<uint8_t> _sourceGames;
|
||||
std::vector<ObjectSourceGame> _sourceGames;
|
||||
std::vector<std::string> _authors;
|
||||
bool _isJsonObject{};
|
||||
|
||||
|
@ -269,8 +269,8 @@ public:
|
|||
virtual void SetRepositoryItem(ObjectRepositoryItem* /*item*/) const
|
||||
{
|
||||
}
|
||||
std::vector<uint8_t> GetSourceGames();
|
||||
void SetSourceGames(const std::vector<uint8_t>& sourceGames);
|
||||
std::vector<ObjectSourceGame> GetSourceGames();
|
||||
void SetSourceGames(const std::vector<ObjectSourceGame>& sourceGames);
|
||||
|
||||
const std::vector<std::string>& GetAuthors() const;
|
||||
void SetAuthors(const std::vector<std::string>&& authors);
|
||||
|
|
|
@ -167,20 +167,20 @@ namespace ObjectFactory
|
|||
static std::unique_ptr<Object> 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<std::string, OBJECT_SOURCE_GAME> 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<std::string, ObjectSourceGame> 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<uint8_t> sourceGameVector;
|
||||
std::vector<ObjectSourceGame> 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 });
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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<ObjectSourceGame>((objectEntry->flags & 0xF0) >> 4);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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<rct_object_entry>& 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);
|
||||
|
|
|
@ -178,7 +178,7 @@ protected:
|
|||
for (size_t i = 0; i < sourceLength; i++)
|
||||
{
|
||||
auto value = stream->ReadValue<uint8_t>();
|
||||
item.Sources.push_back(value);
|
||||
item.Sources.push_back(static_cast<ObjectSourceGame>(value));
|
||||
}
|
||||
|
||||
auto authorsLength = stream->ReadValue<uint8_t>();
|
||||
|
@ -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;
|
||||
|
|
|
@ -41,7 +41,7 @@ struct ObjectRepositoryItem
|
|||
std::string Path;
|
||||
std::string Name;
|
||||
std::vector<std::string> Authors;
|
||||
std::vector<uint8_t> Sources;
|
||||
std::vector<ObjectSourceGame> Sources;
|
||||
Object* LoadedObject{};
|
||||
struct
|
||||
{
|
||||
|
@ -54,12 +54,12 @@ struct ObjectRepositoryItem
|
|||
std::vector<rct_object_entry> Entries;
|
||||
} SceneryGroupInfo;
|
||||
|
||||
OBJECT_SOURCE_GAME GetFirstSourceGame() const
|
||||
ObjectSourceGame GetFirstSourceGame() const
|
||||
{
|
||||
if (Sources.empty())
|
||||
return OBJECT_SOURCE_CUSTOM;
|
||||
return ObjectSourceGame::Custom;
|
||||
else
|
||||
return static_cast<OBJECT_SOURCE_GAME>(Sources[0]);
|
||||
return static_cast<ObjectSourceGame>(Sources[0]);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -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<uint8_t>(ObjectSourceGame::RCT2) << 4) & 0xF0) | (objectType & 0x0F);
|
||||
entry.SetName(objectName);
|
||||
entries.push_back(entry);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue