From c519512cfe22d12e1c3c18dfb91b859c4f919290 Mon Sep 17 00:00:00 2001 From: Michael Steenbeek Date: Fri, 20 Mar 2020 19:28:39 +0100 Subject: [PATCH] Create ObjectEntryIndex (#10980) --- src/openrct2-ui/windows/TopToolbar.cpp | 2 +- src/openrct2/EditorObjectSelectionSession.cpp | 6 ++- src/openrct2/actions/TrackDesignAction.cpp | 18 ++++--- src/openrct2/management/Research.cpp | 8 +-- src/openrct2/management/Research.h | 6 +-- src/openrct2/object/Object.h | 5 +- src/openrct2/object/ObjectList.cpp | 12 ++--- src/openrct2/object/ObjectManager.cpp | 16 +++--- src/openrct2/object/ObjectManager.h | 6 +-- src/openrct2/rct1/S4Importer.cpp | 51 ++++++++++--------- src/openrct2/ride/Ride.h | 3 +- src/openrct2/ride/TrackDesign.cpp | 23 +++++---- src/openrct2/world/TileElement.h | 24 ++++----- 13 files changed, 97 insertions(+), 83 deletions(-) diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index eab4744cab..ae353f344e 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -2537,7 +2537,7 @@ static void top_toolbar_tool_update_water(int16_t x, int16_t y) */ static money32 try_place_ghost_scenery( CoordsXY map_tile, uint32_t parameter_1, uint32_t parameter_2, uint32_t parameter_3, uint8_t scenery_type, - uint16_t entryIndex) + ObjectEntryIndex entryIndex) { scenery_remove_ghost_tool_placement(); diff --git a/src/openrct2/EditorObjectSelectionSession.cpp b/src/openrct2/EditorObjectSelectionSession.cpp index 9a3dee2821..66df7bb839 100644 --- a/src/openrct2/EditorObjectSelectionSession.cpp +++ b/src/openrct2/EditorObjectSelectionSession.cpp @@ -203,7 +203,8 @@ void setup_in_use_selection_flags() const ObjectRepositoryItem* item = &items[i]; *selectionFlags &= ~OBJECT_SELECTION_FLAG_IN_USE; - uint8_t entryType, entryIndex; + uint8_t entryType; + ObjectEntryIndex entryIndex; if (find_object_in_entry_group(&item->ObjectEntry, &entryType, &entryIndex)) { auto flags = Editor::GetSelectedObjectFlags(entryType, entryIndex); @@ -282,7 +283,8 @@ void editor_object_flags_free() */ static void remove_selected_objects_from_research(const rct_object_entry* installedObject) { - uint8_t entry_type, entry_index; + uint8_t entry_type; + ObjectEntryIndex entry_index; if (!find_object_in_entry_group(installedObject, &entry_type, &entry_index)) return; diff --git a/src/openrct2/actions/TrackDesignAction.cpp b/src/openrct2/actions/TrackDesignAction.cpp index 87e5dcd6a6..9d1b3c9d7a 100644 --- a/src/openrct2/actions/TrackDesignAction.cpp +++ b/src/openrct2/actions/TrackDesignAction.cpp @@ -39,19 +39,20 @@ GameActionResult::Ptr TrackDesignAction::Query() const const rct_object_entry* rideEntryObject = &_td.vehicle_object; - uint8_t entryType, entryIndex; + uint8_t entryType; + ObjectEntryIndex entryIndex; if (!find_object_in_entry_group(rideEntryObject, &entryType, &entryIndex)) { - entryIndex = 0xFF; + entryIndex = OBJECT_ENTRY_INDEX_NULL; } // Force a fallback if the entry is not invented yet a td6 of it is selected, which can happen in select-by-track-type mode. else if (!ride_entry_is_invented(entryIndex) && !gCheatsIgnoreResearchStatus) { - entryIndex = 0xFF; + entryIndex = OBJECT_ENTRY_INDEX_NULL; } // The rest of the cases are handled by the code in ride_create() - if (RideGroupManager::RideTypeHasRideGroups(_td.type) && entryIndex == 0xFF) + if (RideGroupManager::RideTypeHasRideGroups(_td.type) && entryIndex == OBJECT_ENTRY_INDEX_NULL) { const ObjectRepositoryItem* ori = object_repository_find_object_by_name(rideEntryObject->name); if (ori != nullptr) @@ -130,19 +131,20 @@ GameActionResult::Ptr TrackDesignAction::Execute() const const rct_object_entry* rideEntryObject = &_td.vehicle_object; - uint8_t entryType, entryIndex; + uint8_t entryType; + ObjectEntryIndex entryIndex; if (!find_object_in_entry_group(rideEntryObject, &entryType, &entryIndex)) { - entryIndex = 0xFF; + entryIndex = OBJECT_ENTRY_INDEX_NULL; } // Force a fallback if the entry is not invented yet a td6 of it is selected, which can happen in select-by-track-type mode. else if (!ride_entry_is_invented(entryIndex) && !gCheatsIgnoreResearchStatus) { - entryIndex = 0xFF; + entryIndex = OBJECT_ENTRY_INDEX_NULL; } // The rest of the cases are handled by the code in ride_create() - if (RideGroupManager::RideTypeHasRideGroups(_td.type) && entryIndex == 0xFF) + if (RideGroupManager::RideTypeHasRideGroups(_td.type) && entryIndex == OBJECT_ENTRY_INDEX_NULL) { const ObjectRepositoryItem* ori = object_repository_find_object_by_name(rideEntryObject->name); if (ori != nullptr) diff --git a/src/openrct2/management/Research.cpp b/src/openrct2/management/Research.cpp index 75a502593e..d3d0f0886f 100644 --- a/src/openrct2/management/Research.cpp +++ b/src/openrct2/management/Research.cpp @@ -534,7 +534,7 @@ void research_populate_list_researched() } } -bool research_insert_ride_entry(uint8_t rideType, uint8_t entryIndex, uint8_t category, bool researched) +bool research_insert_ride_entry(uint8_t rideType, ObjectEntryIndex entryIndex, uint8_t category, bool researched) { if (rideType != RIDE_TYPE_NULL) { @@ -546,7 +546,7 @@ bool research_insert_ride_entry(uint8_t rideType, uint8_t entryIndex, uint8_t ca return false; } -void research_insert_ride_entry(uint8_t entryIndex, bool researched) +void research_insert_ride_entry(ObjectEntryIndex entryIndex, bool researched) { rct_ride_entry* rideEntry = get_ride_entry(entryIndex); uint8_t category = rideEntry->category[0]; @@ -556,7 +556,7 @@ void research_insert_ride_entry(uint8_t entryIndex, bool researched) } } -void research_insert_scenery_group_entry(uint8_t entryIndex, bool researched) +void research_insert_scenery_group_entry(ObjectEntryIndex entryIndex, bool researched) { research_insert({ entryIndex, RESEARCH_CATEGORY_SCENERY_GROUP }, researched); } @@ -827,7 +827,7 @@ void research_fix() // For good measure, also include scenery groups. if (gResearchProgressStage == RESEARCH_STAGE_FINISHED_ALL) { - for (uint8_t i = 0; i < MAX_RIDE_OBJECTS; i++) + for (ObjectEntryIndex i = 0; i < MAX_RIDE_OBJECTS; i++) { const rct_ride_entry* rideEntry = get_ride_entry(i); diff --git a/src/openrct2/management/Research.h b/src/openrct2/management/Research.h index f36237df11..ba0bf794b0 100644 --- a/src/openrct2/management/Research.h +++ b/src/openrct2/management/Research.h @@ -121,9 +121,9 @@ void research_finish_item(ResearchItem* researchItem); void research_insert(ResearchItem item, bool researched); void research_remove(ResearchItem* researchItem); -bool research_insert_ride_entry(uint8_t rideType, uint8_t entryIndex, uint8_t category, bool researched); -void research_insert_ride_entry(uint8_t entryIndex, bool researched); -void research_insert_scenery_group_entry(uint8_t entryIndex, bool researched); +bool research_insert_ride_entry(uint8_t rideType, ObjectEntryIndex entryIndex, uint8_t category, bool researched); +void research_insert_ride_entry(ObjectEntryIndex entryIndex, bool researched); +void research_insert_scenery_group_entry(ObjectEntryIndex entryIndex, bool researched); void ride_type_set_invented(uint32_t rideType); void ride_entry_set_invented(int32_t rideEntryIndex); diff --git a/src/openrct2/object/Object.h b/src/openrct2/object/Object.h index e6faf31228..0841b8cac8 100644 --- a/src/openrct2/object/Object.h +++ b/src/openrct2/object/Object.h @@ -17,7 +17,8 @@ #include #include -constexpr const uint16_t OBJECT_ENTRY_INDEX_NULL = 255; +using ObjectEntryIndex = uint16_t; +constexpr const ObjectEntryIndex OBJECT_ENTRY_INDEX_NULL = 255; // First 0xF of rct_object_entry->flags enum OBJECT_TYPE @@ -265,7 +266,7 @@ extern int32_t object_entry_group_encoding[]; bool object_entry_is_empty(const rct_object_entry* entry); bool object_entry_compare(const rct_object_entry* a, const rct_object_entry* b); int32_t object_calculate_checksum(const rct_object_entry* entry, const void* data, size_t dataLength); -bool find_object_in_entry_group(const rct_object_entry* entry, uint8_t* entry_type, uint8_t* entry_index); +bool find_object_in_entry_group(const rct_object_entry* entry, uint8_t* entry_type, ObjectEntryIndex* entryIndex); void object_create_identifier_name(char* string_buffer, size_t size, const rct_object_entry* object); const rct_object_entry* object_list_find(rct_object_entry* entry); diff --git a/src/openrct2/object/ObjectList.cpp b/src/openrct2/object/ObjectList.cpp index 1a98fe61a5..451ce98864 100644 --- a/src/openrct2/object/ObjectList.cpp +++ b/src/openrct2/object/ObjectList.cpp @@ -89,7 +89,7 @@ void object_create_identifier_name(char* string_buffer, size_t size, const rct_o * bl = entry_index * ecx = entry_type */ -bool find_object_in_entry_group(const rct_object_entry* entry, uint8_t* entry_type, uint8_t* entry_index) +bool find_object_in_entry_group(const rct_object_entry* entry, uint8_t* entry_type, ObjectEntryIndex* entryIndex) { int32_t objectType = entry->GetType(); if (objectType >= OBJECT_TYPE_COUNT) @@ -108,7 +108,7 @@ bool find_object_in_entry_group(const rct_object_entry* entry, uint8_t* entry_ty if (object_entry_compare(thisEntry, entry)) { *entry_type = objectType; - *entry_index = i; + *entryIndex = i; return true; } } @@ -116,7 +116,7 @@ bool find_object_in_entry_group(const rct_object_entry* entry, uint8_t* entry_ty return false; } -void get_type_entry_index(size_t index, uint8_t* outObjectType, uint16_t* outEntryIndex) +void get_type_entry_index(size_t index, uint8_t* outObjectType, ObjectEntryIndex* outEntryIndex) { uint8_t objectType = OBJECT_TYPE_RIDE; for (size_t groupCount : object_entry_group_counts) @@ -135,13 +135,13 @@ void get_type_entry_index(size_t index, uint8_t* outObjectType, uint16_t* outEnt if (outObjectType != nullptr) *outObjectType = objectType; if (outEntryIndex != nullptr) - *outEntryIndex = (uint8_t)index; + *outEntryIndex = static_cast(index); } const rct_object_entry* get_loaded_object_entry(size_t index) { uint8_t objectType; - uint16_t entryIndex; + ObjectEntryIndex entryIndex; get_type_entry_index(index, &objectType, &entryIndex); return object_entry_get_entry(objectType, entryIndex); @@ -150,7 +150,7 @@ const rct_object_entry* get_loaded_object_entry(size_t index) void* get_loaded_object_chunk(size_t index) { uint8_t objectType; - uint16_t entryIndex; + ObjectEntryIndex entryIndex; get_type_entry_index(index, &objectType, &entryIndex); return object_entry_get_chunk(objectType, entryIndex); } diff --git a/src/openrct2/object/ObjectManager.cpp b/src/openrct2/object/ObjectManager.cpp index 48d578f846..2be3024d77 100644 --- a/src/openrct2/object/ObjectManager.cpp +++ b/src/openrct2/object/ObjectManager.cpp @@ -36,10 +36,10 @@ class ObjectManager final : public IObjectManager private: IObjectRepository& _objectRepository; std::vector _loadedObjects; - std::array, RIDE_TYPE_COUNT> _rideTypeToObjectMap; + std::array, RIDE_TYPE_COUNT> _rideTypeToObjectMap; // Used to return a safe empty vector back from GetAllRideEntries, can be removed when std::span is available - std::vector _nullRideTypeEntries; + std::vector _nullRideTypeEntries; public: explicit ObjectManager(IObjectRepository& objectRepository) @@ -90,9 +90,9 @@ public: return loadedObject; } - uint16_t GetLoadedObjectEntryIndex(const Object* object) override + ObjectEntryIndex GetLoadedObjectEntryIndex(const Object* object) override { - uint16_t result = OBJECT_ENTRY_INDEX_NULL; + ObjectEntryIndex result = OBJECT_ENTRY_INDEX_NULL; size_t index = GetLoadedObjectIndex(object); if (index != SIZE_MAX) { @@ -292,7 +292,7 @@ public: } } - const std::vector& GetAllRideEntries(uint8_t rideType) override + const std::vector& GetAllRideEntries(uint8_t rideType) override { if (rideType >= RIDE_TYPE_COUNT) { @@ -454,7 +454,7 @@ private: window_close_by_class(WC_SCENERY); } - uint16_t GetPrimarySceneryGroupEntryIndex(Object* loadedObject) + ObjectEntryIndex GetPrimarySceneryGroupEntryIndex(Object* loadedObject) { auto sceneryObject = dynamic_cast(loadedObject); const rct_object_entry* primarySGEntry = sceneryObject->GetPrimarySceneryGroup(); @@ -678,7 +678,7 @@ private: if (rideType < _rideTypeToObjectMap.size()) { auto& v = _rideTypeToObjectMap[rideType]; - v.push_back(static_cast(i)); + v.push_back(static_cast(i)); } } } @@ -731,7 +731,7 @@ void* object_manager_get_loaded_object(const rct_object_entry* entry) return (void*)loadedObject; } -uint16_t object_manager_get_loaded_object_entry_index(const void* loadedObject) +ObjectEntryIndex object_manager_get_loaded_object_entry_index(const void* loadedObject) { auto& objectManager = OpenRCT2::GetContext()->GetObjectManager(); const Object* object = static_cast(loadedObject); diff --git a/src/openrct2/object/ObjectManager.h b/src/openrct2/object/ObjectManager.h index eb2e7672fd..7f382e458a 100644 --- a/src/openrct2/object/ObjectManager.h +++ b/src/openrct2/object/ObjectManager.h @@ -27,7 +27,7 @@ interface IObjectManager virtual Object* GetLoadedObject(size_t index) abstract; virtual Object* GetLoadedObject(int32_t objectType, size_t index) abstract; virtual Object* GetLoadedObject(const rct_object_entry* entry) abstract; - virtual uint16_t GetLoadedObjectEntryIndex(const Object* object) abstract; + virtual ObjectEntryIndex GetLoadedObjectEntryIndex(const Object* object) abstract; virtual std::vector GetInvalidObjects(const rct_object_entry* entries) abstract; virtual Object* LoadObject(const rct_object_entry* entry) abstract; @@ -39,14 +39,14 @@ interface IObjectManager virtual void ResetObjects() abstract; virtual std::vector GetPackableObjects() abstract; - virtual const std::vector& GetAllRideEntries(uint8_t rideType) abstract; + virtual const std::vector& GetAllRideEntries(uint8_t rideType) abstract; }; std::unique_ptr CreateObjectManager(IObjectRepository& objectRepository); void* object_manager_get_loaded_object_by_index(size_t index); void* object_manager_get_loaded_object(const rct_object_entry* entry); -uint16_t object_manager_get_loaded_object_entry_index(const void* loadedObject); +ObjectEntryIndex object_manager_get_loaded_object_entry_index(const void* loadedObject); void* object_manager_load_object(const rct_object_entry* entry); void object_manager_unload_objects(const rct_object_entry* entries, size_t count); void object_manager_unload_all_objects(); diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 5e42fa51f7..3558a2133c 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -59,6 +59,8 @@ #include #include +static constexpr const ObjectEntryIndex OBJECT_ENTRY_INDEX_IGNORE = 254; + using namespace OpenRCT2; class EntryList @@ -77,7 +79,7 @@ public: return _entries; } - uint16_t GetOrAddEntry(const char* entryName) + ObjectEntryIndex GetOrAddEntry(const char* entryName) { auto entryIndex = Collections::IndexOf(_entries, entryName, true); if (entryIndex == SIZE_MAX) @@ -85,7 +87,7 @@ public: entryIndex = _entries.size(); _entries.push_back(entryName); } - return static_cast(entryIndex); + return static_cast(entryIndex); } void AddRange(std::initializer_list initializerList) @@ -117,18 +119,18 @@ private: EntryList _waterEntry; // Lookup tables for converting from RCT1 hard coded types to the new dynamic object entries - uint16_t _rideTypeToRideEntryMap[RCT1_RIDE_TYPE_COUNT]{}; - uint16_t _vehicleTypeToRideEntryMap[RCT1_VEHICLE_TYPE_COUNT]{}; - uint16_t _smallSceneryTypeToEntryMap[256]{}; - uint16_t _largeSceneryTypeToEntryMap[256]{}; - uint16_t _wallTypeToEntryMap[256]{}; - uint16_t _pathTypeToEntryMap[24]{}; - uint16_t _pathAdditionTypeToEntryMap[16]{}; - uint16_t _sceneryThemeTypeToEntryMap[24]{}; + ObjectEntryIndex _rideTypeToRideEntryMap[RCT1_RIDE_TYPE_COUNT]{}; + ObjectEntryIndex _vehicleTypeToRideEntryMap[RCT1_VEHICLE_TYPE_COUNT]{}; + ObjectEntryIndex _smallSceneryTypeToEntryMap[256]{}; + ObjectEntryIndex _largeSceneryTypeToEntryMap[256]{}; + ObjectEntryIndex _wallTypeToEntryMap[256]{}; + ObjectEntryIndex _pathTypeToEntryMap[24]{}; + ObjectEntryIndex _pathAdditionTypeToEntryMap[16]{}; + ObjectEntryIndex _sceneryThemeTypeToEntryMap[24]{}; // Research - uint16_t _researchRideEntryUsed[MAX_RIDE_OBJECTS]{}; - uint16_t _researchRideTypeUsed[RCT1_RIDE_TYPE_COUNT]{}; + std::bitset _researchRideEntryUsed{}; + std::bitset _researchRideTypeUsed{}; // Scenario repository - used for determining scenario name IScenarioRepository* _scenarioRepository = GetScenarioRepository(); @@ -583,7 +585,7 @@ private: } } - void AddEntryForSmallScenery(uint16_t smallSceneryType) + void AddEntryForSmallScenery(ObjectEntryIndex smallSceneryType) { assert(smallSceneryType < std::size(_smallSceneryTypeToEntryMap)); if (_smallSceneryTypeToEntryMap[smallSceneryType] == OBJECT_ENTRY_INDEX_NULL) @@ -595,7 +597,7 @@ private: } } - void AddEntryForLargeScenery(uint16_t largeSceneryType) + void AddEntryForLargeScenery(ObjectEntryIndex largeSceneryType) { assert(largeSceneryType < std::size(_largeSceneryTypeToEntryMap)); if (_largeSceneryTypeToEntryMap[largeSceneryType] == OBJECT_ENTRY_INDEX_NULL) @@ -607,7 +609,7 @@ private: } } - void AddEntryForWall(uint16_t wallType) + void AddEntryForWall(ObjectEntryIndex wallType) { assert(wallType < std::size(_wallTypeToEntryMap)); if (_wallTypeToEntryMap[wallType] == OBJECT_ENTRY_INDEX_NULL) @@ -619,7 +621,7 @@ private: } } - void AddEntryForPath(uint16_t pathType) + void AddEntryForPath(ObjectEntryIndex pathType) { assert(pathType < std::size(_pathTypeToEntryMap)); if (_pathTypeToEntryMap[pathType] == OBJECT_ENTRY_INDEX_NULL) @@ -633,7 +635,7 @@ private: } } - void AddEntryForPathAddition(uint16_t pathAdditionType) + void AddEntryForPathAddition(ObjectEntryIndex pathAdditionType) { if (pathAdditionType == RCT1_PATH_ADDITION_NONE) return; @@ -653,12 +655,12 @@ private: } } - void AddEntriesForSceneryTheme(uint16_t sceneryThemeType) + void AddEntriesForSceneryTheme(ObjectEntryIndex sceneryThemeType) { if (sceneryThemeType == RCT1_SCENERY_THEME_GENERAL || sceneryThemeType == RCT1_SCENERY_THEME_JUMPING_FOUNTAINS || sceneryThemeType == RCT1_SCENERY_THEME_GARDEN_CLOCK) { - _sceneryThemeTypeToEntryMap[sceneryThemeType] = 254; + _sceneryThemeTypeToEntryMap[sceneryThemeType] = OBJECT_ENTRY_INDEX_IGNORE; } else { @@ -2035,7 +2037,7 @@ private: // Type uint8_t pathType = src2->GetRCT1PathType(); - uint8_t entryIndex = _pathTypeToEntryMap[pathType]; + auto entryIndex = _pathTypeToEntryMap[pathType]; dst2->SetDirection(0); dst2->SetIsBroken(false); @@ -2238,8 +2240,8 @@ private: const rct1_research_item* researchList = GetResearchList(&researchListCount); // Initialise the "seen" tables - std::fill(std::begin(_researchRideEntryUsed), std::end(_researchRideEntryUsed), 0); - std::fill(std::begin(_researchRideTypeUsed), std::end(_researchRideTypeUsed), 0); + _researchRideEntryUsed.reset(); + _researchRideTypeUsed.reset(); // The first six scenery groups are always available for (uint8_t i = 0; i < 6; i++) @@ -2274,7 +2276,8 @@ private: { uint8_t rct1SceneryTheme = researchItem->item; auto sceneryGroupEntryIndex = _sceneryThemeTypeToEntryMap[rct1SceneryTheme]; - if (sceneryGroupEntryIndex != 254 && sceneryGroupEntryIndex != OBJECT_ENTRY_INDEX_NULL) + if (sceneryGroupEntryIndex != OBJECT_ENTRY_INDEX_IGNORE + && sceneryGroupEntryIndex != OBJECT_ENTRY_INDEX_NULL) { research_insert_scenery_group_entry(sceneryGroupEntryIndex, researched); } @@ -2618,7 +2621,7 @@ private: { auto entryIndex = _sceneryThemeTypeToEntryMap[srcItem]; - if (entryIndex != 254 && entryIndex != OBJECT_ENTRY_INDEX_NULL) + if (entryIndex != OBJECT_ENTRY_INDEX_IGNORE && entryIndex != OBJECT_ENTRY_INDEX_NULL) { dst->entryIndex = entryIndex; dst->type = RESEARCH_ENTRY_TYPE_SCENERY; diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index f9a22ed99d..db4e8f27d9 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -32,7 +32,6 @@ struct Staff; // Examples of vehicles here are the locomotive, tender and carriage of the Miniature Railway. #define MAX_VEHICLES_PER_RIDE_ENTRY 4 #define MAX_VEHICLES_PER_RIDE 31 -#define RIDE_ENTRY_INDEX_NULL 255 #define NUM_COLOUR_SCHEMES 4 #define MAX_CATEGORIES_PER_RIDE 2 #define DOWNTIME_HISTORY_SIZE 8 @@ -49,6 +48,8 @@ constexpr uint16_t const MAX_HELICES = RCT12_MAX_HELICES; constexpr uint16_t const MAZE_CLEARANCE_HEIGHT = 4 * COORDS_Z_STEP; +constexpr const ObjectEntryIndex RIDE_ENTRY_INDEX_NULL = OBJECT_ENTRY_INDEX_NULL; + #pragma pack(push, 1) /** diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index ee7ca0896c..31cd30a039 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -656,8 +656,9 @@ static void track_design_mirror_scenery(TrackDesign* td6) { for (auto& scenery : td6->scenery_elements) { - uint8_t entry_type{ 0 }, entry_index{ 0 }; - if (!find_object_in_entry_group(&scenery.scenery_object, &entry_type, &entry_index)) + uint8_t entry_type{ 0 }; + ObjectEntryIndex entryIndex{ 0 }; + if (!find_object_in_entry_group(&scenery.scenery_object, &entry_type, &entryIndex)) { entry_type = scenery.scenery_object.GetType(); if (entry_type != OBJECT_TYPE_PATHS) @@ -665,10 +666,10 @@ static void track_design_mirror_scenery(TrackDesign* td6) continue; } - entry_index = 0; + entryIndex = 0; } - rct_scenery_entry* scenery_entry = (rct_scenery_entry*)object_entry_get_chunk(entry_type, entry_index); + rct_scenery_entry* scenery_entry = (rct_scenery_entry*)object_entry_get_chunk(entry_type, entryIndex); switch (entry_type) { case OBJECT_TYPE_LARGE_SCENERY: @@ -855,7 +856,7 @@ static void track_design_update_max_min_coordinates(int16_t x, int16_t y, int16_ } static bool TrackDesignPlaceSceneryElementGetEntry( - uint8_t& entry_type, uint8_t& entry_index, const TrackDesignSceneryElement& scenery) + uint8_t& entry_type, ObjectEntryIndex& entry_index, const TrackDesignSceneryElement& scenery) { if (!find_object_in_entry_group(&scenery.scenery_object, &entry_type, &entry_index)) { @@ -898,7 +899,8 @@ static bool TrackDesignPlaceSceneryElementGetEntry( static bool TrackDesignPlaceSceneryElementRemoveGhost( CoordsXY mapCoord, const TrackDesignSceneryElement& scenery, uint8_t rotation, int32_t originZ) { - uint8_t entry_type, entry_index; + uint8_t entry_type; + ObjectEntryIndex entry_index; if (TrackDesignPlaceSceneryElementGetEntry(entry_type, entry_index, scenery)) { return true; @@ -959,7 +961,8 @@ static bool TrackDesignPlaceSceneryElementGetPlaceZ(const TrackDesignSceneryElem _trackDesignPlaceSceneryZ = z; } - uint8_t entry_type, entry_index; + uint8_t entry_type; + ObjectEntryIndex entry_index; TrackDesignPlaceSceneryElementGetEntry(entry_type, entry_index, scenery); return true; @@ -988,7 +991,8 @@ static bool TrackDesignPlaceSceneryElement( || _trackDesignPlaceOperation == PTD_OPERATION_PLACE_GHOST || _trackDesignPlaceOperation == PTD_OPERATION_PLACE_TRACK_PREVIEW) { - uint8_t entry_type, entry_index; + uint8_t entry_type; + ObjectEntryIndex entry_index; if (TrackDesignPlaceSceneryElementGetEntry(entry_type, entry_index, scenery)) { return true; @@ -1852,7 +1856,8 @@ static bool track_design_place_preview(TrackDesign* td6, money32* cost, Ride** o *outRide = nullptr; *flags = 0; - uint8_t entry_type, entry_index; + uint8_t entry_type; + ObjectEntryIndex entry_index; if (!find_object_in_entry_group(&td6->vehicle_object, &entry_type, &entry_index)) { entry_index = RIDE_ENTRY_INDEX_NULL; diff --git a/src/openrct2/world/TileElement.h b/src/openrct2/world/TileElement.h index d6d672ef84..f772d9d8e6 100644 --- a/src/openrct2/world/TileElement.h +++ b/src/openrct2/world/TileElement.h @@ -373,18 +373,18 @@ assert_struct_size(TrackElement, 16); struct SmallSceneryElement : TileElementBase { private: - uint16_t entryIndex; // 4 - uint8_t age; // 5 - uint8_t colour_1; // 6 - uint8_t colour_2; // 7 + ObjectEntryIndex entryIndex; // 4 + uint8_t age; // 5 + uint8_t colour_1; // 6 + uint8_t colour_2; // 7 #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused-private-field" uint8_t pad_09[7]; #pragma clang diagnostic pop public: - uint16_t GetEntryIndex() const; - void SetEntryIndex(uint16_t newIndex); + ObjectEntryIndex GetEntryIndex() const; + void SetEntryIndex(ObjectEntryIndex newIndex); rct_scenery_entry* GetEntry() const; uint8_t GetAge() const; void SetAge(uint8_t newAge); @@ -439,12 +439,12 @@ assert_struct_size(LargeSceneryElement, 16); struct WallElement : TileElementBase { private: - uint16_t entryIndex; // 04 - colour_t colour_1; // 06 - colour_t colour_2; // 07 - colour_t colour_3; // 08 - BannerIndex banner_index; // 09 - uint8_t animation; // 0A 0b_dfff_ft00 d = direction, f = frame num, t = across track flag (not used) + ObjectEntryIndex entryIndex; // 04 + colour_t colour_1; // 06 + colour_t colour_2; // 07 + colour_t colour_3; // 08 + BannerIndex banner_index; // 09 + uint8_t animation; // 0A 0b_dfff_ft00 d = direction, f = frame num, t = across track flag (not used) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused-private-field" uint8_t pad_0C[4];