diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index 4491fd0fe9..fda1534737 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -306,7 +306,7 @@ static void visible_list_refresh(rct_window* w) { uint8_t selectionFlags = _objectSelectionFlags[i]; const ObjectRepositoryItem* item = &items[i]; - uint8_t objectType = item->ObjectEntry.flags & 0x0F; + uint8_t objectType = item->ObjectEntry.GetType(); if (objectType == get_selected_object_type(w) && !(selectionFlags & OBJECT_SELECTION_FLAG_6) && filter_source(item) && filter_string(item) && filter_chunks(item) && filter_selected(selectionFlags)) { @@ -1292,7 +1292,7 @@ static void editor_load_selected_objects() else if (!(gScreenFlags & SCREEN_FLAGS_EDITOR)) { // Defaults selected items to researched (if in-game) - uint8_t objectType = object_entry_get_type(entry); + uint8_t objectType = entry->GetType(); uint8_t entryIndex = object_manager_get_loaded_object_entry_index(loadedObject); if (objectType == OBJECT_TYPE_RIDE) { @@ -1405,7 +1405,7 @@ static bool filter_string(const ObjectRepositoryItem* item) // Check if the searched string exists in the name, ride type, or filename bool inName = strstr(name_lower, filter_lower) != nullptr; - bool inRideType = ((item->ObjectEntry.flags & 0x0F) == OBJECT_TYPE_RIDE) && strstr(type_lower, filter_lower) != nullptr; + bool inRideType = (item->ObjectEntry.GetType() == OBJECT_TYPE_RIDE) && strstr(type_lower, filter_lower) != nullptr; bool inPath = strstr(object_path, filter_lower) != nullptr; return inName || inRideType || inPath; @@ -1448,7 +1448,7 @@ static bool filter_source(const ObjectRepositoryItem* item) static bool filter_chunks(const ObjectRepositoryItem* item) { - switch (item->ObjectEntry.flags & 0x0F) + switch (item->ObjectEntry.GetType()) { case OBJECT_TYPE_RIDE: @@ -1480,7 +1480,7 @@ static void filter_update_counts() const ObjectRepositoryItem* item = &items[i]; if (filter_source(item) && filter_string(item) && filter_chunks(item) && filter_selected(selectionFlags[i])) { - uint8_t objectType = item->ObjectEntry.flags & 0xF; + uint8_t objectType = item->ObjectEntry.GetType(); _filter_object_counts[objectType]++; } } diff --git a/src/openrct2-ui/windows/ObjectLoadError.cpp b/src/openrct2-ui/windows/ObjectLoadError.cpp index e6127c34e3..220602f8dd 100644 --- a/src/openrct2-ui/windows/ObjectLoadError.cpp +++ b/src/openrct2-ui/windows/ObjectLoadError.cpp @@ -346,8 +346,7 @@ static bool _updatedListAfterDownload; static rct_string_id get_object_type_string(const rct_object_entry* entry) { rct_string_id result; - uint8_t objectType = object_entry_get_type(entry); - switch (objectType) + switch (entry->GetType()) { case OBJECT_TYPE_RIDE: result = STR_OBJECT_SELECTION_RIDE_VEHICLES_ATTRACTIONS; diff --git a/src/openrct2/EditorObjectSelectionSession.cpp b/src/openrct2/EditorObjectSelectionSession.cpp index d2852cd084..9a3dee2821 100644 --- a/src/openrct2/EditorObjectSelectionSession.cpp +++ b/src/openrct2/EditorObjectSelectionSession.cpp @@ -49,7 +49,7 @@ static void setup_track_manager_objects() { uint8_t* selectionFlags = &_objectSelectionFlags[i]; const ObjectRepositoryItem* item = &items[i]; - uint8_t object_type = object_entry_get_type(&item->ObjectEntry); + uint8_t object_type = item->ObjectEntry.GetType(); if (object_type == OBJECT_TYPE_RIDE) { *selectionFlags |= OBJECT_SELECTION_FLAG_6; @@ -78,7 +78,7 @@ static void setup_track_designer_objects() { uint8_t* selectionFlags = &_objectSelectionFlags[i]; const ObjectRepositoryItem* item = &items[i]; - uint8_t objectType = object_entry_get_type(&item->ObjectEntry); + uint8_t objectType = item->ObjectEntry.GetType(); if (objectType == OBJECT_TYPE_RIDE) { *selectionFlags |= OBJECT_SELECTION_FLAG_6; @@ -237,7 +237,7 @@ void sub_6AB211() const ObjectRepositoryItem* items = object_repository_get_items(); for (int32_t i = 0; i < numObjects; i++) { - uint8_t objectType = object_entry_get_type(&items[i].ObjectEntry); + uint8_t objectType = items[i].ObjectEntry.GetType(); _numAvailableObjectsForType[objectType]++; } @@ -365,7 +365,7 @@ void reset_selected_object_count_and_size() const ObjectRepositoryItem* items = object_repository_get_items(); for (int32_t i = 0; i < numObjects; i++) { - uint8_t objectType = object_entry_get_type(&items[i].ObjectEntry); + uint8_t objectType = items[i].ObjectEntry.GetType(); if (_objectSelectionFlags[i] & OBJECT_SELECTION_FLAG_SELECTED) { _numSelectedObjectsForType[objectType]++; @@ -430,7 +430,7 @@ int32_t window_editor_object_selection_select_object(uint8_t bh, int32_t flags, return 0; } - uint8_t objectType = object_entry_get_type(&item->ObjectEntry); + uint8_t objectType = item->ObjectEntry.GetType(); if (objectType == OBJECT_TYPE_SCENERY_GROUP && (flags & (1 << 2))) { for (const auto& sgEntry : item->SceneryGroupInfo.Entries) @@ -457,7 +457,7 @@ int32_t window_editor_object_selection_select_object(uint8_t bh, int32_t flags, return 1; } - uint8_t objectType = object_entry_get_type(&item->ObjectEntry); + uint8_t objectType = item->ObjectEntry.GetType(); uint16_t maxObjects = object_entry_group_counts[objectType]; if (gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) { @@ -510,7 +510,7 @@ bool editor_check_object_group_at_least_one_selected(int32_t checkObjectType) for (int32_t i = 0; i < numObjects; i++) { - uint8_t objectType = object_entry_get_type(&items[i].ObjectEntry); + uint8_t objectType = items[i].ObjectEntry.GetType(); if (checkObjectType == objectType && (_objectSelectionFlags[i] & OBJECT_SELECTION_FLAG_SELECTED)) { return true; @@ -536,7 +536,7 @@ int32_t editor_remove_unused_objects() && !(_objectSelectionFlags[i] & OBJECT_SELECTION_FLAG_ALWAYS_REQUIRED)) { const ObjectRepositoryItem* item = &items[i]; - uint8_t objectType = object_entry_get_type(&item->ObjectEntry); + uint8_t objectType = item->ObjectEntry.GetType(); if (objectType >= OBJECT_TYPE_SCENERY_GROUP) { diff --git a/src/openrct2/interface/InteractiveConsole.cpp b/src/openrct2/interface/InteractiveConsole.cpp index 7a972ba4d7..833c6d4263 100644 --- a/src/openrct2/interface/InteractiveConsole.cpp +++ b/src/openrct2/interface/InteractiveConsole.cpp @@ -1078,7 +1078,7 @@ static int32_t cc_load_object(InteractiveConsole& console, const arguments_t& ar } uint32_t groupIndex = object_manager_get_loaded_object_entry_index(loadedObject); - uint8_t objectType = object_entry_get_type(entry); + uint8_t objectType = entry->GetType(); if (objectType == OBJECT_TYPE_RIDE) { // Automatically research the ride so it's supported by the game. diff --git a/src/openrct2/object/Object.h b/src/openrct2/object/Object.h index 7b4fd534b4..784739399a 100644 --- a/src/openrct2/object/Object.h +++ b/src/openrct2/object/Object.h @@ -105,6 +105,11 @@ struct rct_object_entry name[i] = dc; } } + + uint8_t GetType() const + { + return flags & 0x0F; + } }; assert_struct_size(rct_object_entry, 0x10); @@ -214,7 +219,7 @@ public: virtual uint8_t GetObjectType() const final { - return _objectEntry.flags & 0x0F; + return _objectEntry.GetType(); } virtual std::string GetName() const; virtual std::string GetName(int32_t language) const; diff --git a/src/openrct2/object/ObjectFactory.cpp b/src/openrct2/object/ObjectFactory.cpp index 68ea0b21f3..d5211c71f6 100644 --- a/src/openrct2/object/ObjectFactory.cpp +++ b/src/openrct2/object/ObjectFactory.cpp @@ -203,7 +203,7 @@ namespace ObjectFactory rct_object_entry entry = fs.ReadValue(); - if (object_entry_get_type(&entry) != OBJECT_TYPE_SCENARIO_TEXT) + if (entry.GetType() != OBJECT_TYPE_SCENARIO_TEXT) { result = CreateObject(entry); @@ -265,8 +265,7 @@ namespace ObjectFactory Object* CreateObject(const rct_object_entry& entry) { Object* result; - uint8_t objectType = object_entry_get_type(&entry); - switch (objectType) + switch (entry.GetType()) { case OBJECT_TYPE_RIDE: result = new RideObject(entry); diff --git a/src/openrct2/object/ObjectList.cpp b/src/openrct2/object/ObjectList.cpp index 45089060ac..6d9f2f4dde 100644 --- a/src/openrct2/object/ObjectList.cpp +++ b/src/openrct2/object/ObjectList.cpp @@ -69,11 +69,6 @@ bool object_entry_is_empty(const rct_object_entry* entry) return false; } -uint8_t object_entry_get_type(const rct_object_entry* objectEntry) -{ - return (objectEntry->flags & 0x0F); -} - uint8_t object_entry_get_source_game_legacy(const rct_object_entry* objectEntry) { return (objectEntry->flags & 0xF0) >> 4; @@ -96,7 +91,7 @@ void object_create_identifier_name(char* string_buffer, size_t size, const rct_o */ bool find_object_in_entry_group(const rct_object_entry* entry, uint8_t* entry_type, uint8_t* entry_index) { - int32_t objectType = object_entry_get_type(entry); + int32_t objectType = entry->GetType(); if (objectType >= OBJECT_TYPE_COUNT) { return false; diff --git a/src/openrct2/object/ObjectManager.cpp b/src/openrct2/object/ObjectManager.cpp index 0cbe3cac9b..0257ab9b56 100644 --- a/src/openrct2/object/ObjectManager.cpp +++ b/src/openrct2/object/ObjectManager.cpp @@ -105,7 +105,7 @@ public: loadedObject = ori->LoadedObject; if (loadedObject == nullptr) { - uint8_t objectType = object_entry_get_type(&ori->ObjectEntry); + uint8_t objectType = ori->ObjectEntry.GetType(); int32_t slot = FindSpareSlot(objectType); if (slot != -1) { @@ -479,7 +479,7 @@ private: ori = _objectRepository.FindObject(&entry); if (ori == nullptr) { - if (object_entry_get_type(&entry) != OBJECT_TYPE_SCENARIO_TEXT) + if (entry.GetType() != OBJECT_TYPE_SCENARIO_TEXT) { invalidEntries.push_back(entry); ReportMissingObject(&entry); @@ -521,7 +521,7 @@ private: if (!object_entry_is_empty(entry)) { ori = _objectRepository.FindObject(entry); - if (ori == nullptr && object_entry_get_type(entry) != OBJECT_TYPE_SCENARIO_TEXT) + if (ori == nullptr && entry->GetType() != OBJECT_TYPE_SCENARIO_TEXT) { missingObjects.push_back(*entry); ReportMissingObject(entry); diff --git a/src/openrct2/object/ObjectRepository.cpp b/src/openrct2/object/ObjectRepository.cpp index 557dcda31a..464660de19 100644 --- a/src/openrct2/object/ObjectRepository.cpp +++ b/src/openrct2/object/ObjectRepository.cpp @@ -135,7 +135,7 @@ protected: stream->WriteValue(source); } - switch (object_entry_get_type(&item.ObjectEntry)) + switch (item.ObjectEntry.GetType()) { case OBJECT_TYPE_RIDE: stream->WriteValue(item.RideInfo.RideFlags); @@ -173,7 +173,7 @@ protected: item.Sources.push_back(value); } - switch (object_entry_get_type(&item.ObjectEntry)) + switch (item.ObjectEntry.GetType()) { case OBJECT_TYPE_RIDE: item.RideInfo.RideFlags = stream->ReadValue(); @@ -520,7 +520,7 @@ private: } // Encode data - uint8_t objectType = object_entry_get_type(entry); + uint8_t objectType = entry->GetType(); sawyercoding_chunk_header chunkHeader; chunkHeader.encoding = object_entry_group_encoding[objectType]; chunkHeader.length = (uint32_t)dataSize; @@ -650,7 +650,7 @@ bool IsObjectCustom(const ObjectRepositoryItem* object) // Do not count our new object types as custom yet, otherwise the game // will try to pack them into saved games. - auto type = object_entry_get_type(&object->ObjectEntry); + auto type = object->ObjectEntry.GetType(); if (type > OBJECT_TYPE_SCENARIO_TEXT) { return false; @@ -749,7 +749,7 @@ bool object_entry_compare(const rct_object_entry* a, const rct_object_entry* b) // If an official object don't bother checking checksum if ((a->flags & 0xF0) || (b->flags & 0xF0)) { - if (object_entry_get_type(a) != object_entry_get_type(b)) + if (a->GetType() != b->GetType()) { return false; } diff --git a/src/openrct2/object/SceneryGroupObject.cpp b/src/openrct2/object/SceneryGroupObject.cpp index e22630aa39..bd641bc22e 100644 --- a/src/openrct2/object/SceneryGroupObject.cpp +++ b/src/openrct2/object/SceneryGroupObject.cpp @@ -85,7 +85,7 @@ void SceneryGroupObject::UpdateEntryIndexes() uint16_t sceneryEntry = objectManager.GetLoadedObjectEntryIndex(ori->LoadedObject); Guard::Assert(sceneryEntry != UINT8_MAX, GUARD_LINE); - auto objectType = ori->ObjectEntry.flags & 0x0F; + auto objectType = ori->ObjectEntry.GetType(); switch (objectType) { case OBJECT_TYPE_SMALL_SCENERY: diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index f1ef88884b..618b4ab3fb 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -513,7 +513,7 @@ private: auto foundObject = objectRepository.FindObject(objectName); if (foundObject != nullptr) { - uint8_t objectType = object_entry_get_type(&foundObject->ObjectEntry); + uint8_t objectType = foundObject->ObjectEntry.GetType(); switch (objectType) { case OBJECT_TYPE_SMALL_SCENERY: diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 36197144b4..ee7ca0896c 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -486,7 +486,7 @@ rct_string_id TrackDesign::CreateTrackDesignScenery() // Run an element loop for (auto& scenery : scenery_elements) { - switch (object_entry_get_type(&scenery.scenery_object)) + switch (scenery.scenery_object.GetType()) { case OBJECT_TYPE_PATHS: { @@ -659,7 +659,7 @@ static void track_design_mirror_scenery(TrackDesign* td6) uint8_t entry_type{ 0 }, entry_index{ 0 }; if (!find_object_in_entry_group(&scenery.scenery_object, &entry_type, &entry_index)) { - entry_type = object_entry_get_type(&scenery.scenery_object); + entry_type = scenery.scenery_object.GetType(); if (entry_type != OBJECT_TYPE_PATHS) { continue; @@ -859,7 +859,7 @@ static bool TrackDesignPlaceSceneryElementGetEntry( { if (!find_object_in_entry_group(&scenery.scenery_object, &entry_type, &entry_index)) { - entry_type = object_entry_get_type(&scenery.scenery_object); + entry_type = scenery.scenery_object.GetType(); if (entry_type != OBJECT_TYPE_PATHS) { _trackDesignPlaceStateSceneryUnavailable = true;