diff --git a/src/openrct2-ui/windows/EditorInventionsList.cpp b/src/openrct2-ui/windows/EditorInventionsList.cpp index cd42523095..3460cd6b08 100644 --- a/src/openrct2-ui/windows/EditorInventionsList.cpp +++ b/src/openrct2-ui/windows/EditorInventionsList.cpp @@ -126,12 +126,12 @@ static void move_research_item(ResearchItem* beforeItem, int32_t scrollIndex); static void research_rides_setup() { // Reset all objects to not required - for (uint8_t objectType = EnumValue(ObjectType::Ride); objectType < EnumValue(ObjectType::Count); objectType++) + for (ObjectType objectType = ObjectType::Ride; objectType < ObjectType::Count; objectType++) { - auto maxObjects = object_entry_group_counts[objectType]; + auto maxObjects = object_entry_group_counts[EnumValue(objectType)]; for (int32_t i = 0; i < maxObjects; i++) { - Editor::ClearSelectedObject(static_cast(objectType), i, OBJECT_SELECTION_FLAG_ALL); + Editor::ClearSelectedObject(objectType, i, OBJECT_SELECTION_FLAG_ALL); } } diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index db2318a19a..7b74d453e6 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -1471,39 +1471,18 @@ static bool filter_source(const ObjectRepositoryItem* item) static bool filter_chunks(const ObjectRepositoryItem* item) { - switch (item->ObjectEntry.GetType()) + if (item->ObjectEntry.GetType() == ObjectType::Ride) { - case ObjectType::Ride: + uint8_t rideType = 0; + for (int32_t i = 0; i < MAX_RIDE_TYPES_PER_RIDE_ENTRY; i++) { - uint8_t rideType = 0; - for (int32_t i = 0; i < MAX_RIDE_TYPES_PER_RIDE_ENTRY; i++) + if (item->RideInfo.RideType[i] != RIDE_TYPE_NULL) { - if (item->RideInfo.RideType[i] != RIDE_TYPE_NULL) - { - rideType = item->RideInfo.RideType[i]; - break; - } + rideType = item->RideInfo.RideType[i]; + break; } - return (_filter_flags & (1 << (RideTypeDescriptors[rideType].Category + _numSourceGameItems))) != 0; } - case ObjectType::SmallScenery: - case ObjectType::LargeScenery: - case ObjectType::Walls: - case ObjectType::Banners: - case ObjectType::Paths: - case ObjectType::PathBits: - case ObjectType::SceneryGroup: - case ObjectType::ParkEntrance: - case ObjectType::Water: - case ObjectType::ScenarioText: - case ObjectType::TerrainSurface: - case ObjectType::TerrainEdge: - case ObjectType::Station: - case ObjectType::Music: - case ObjectType::Count: - case ObjectType::None: - // This function works only with ObjectType::Ride. - break; + return (_filter_flags & (1 << (RideTypeDescriptors[rideType].Category + _numSourceGameItems))) != 0; } return true; } diff --git a/src/openrct2/interface/InteractiveConsole.cpp b/src/openrct2/interface/InteractiveConsole.cpp index 6f65219666..8d43edc083 100644 --- a/src/openrct2/interface/InteractiveConsole.cpp +++ b/src/openrct2/interface/InteractiveConsole.cpp @@ -1124,17 +1124,18 @@ static int32_t cc_object_count(InteractiveConsole& console, [[maybe_unused]] con "Paths", "Path Additions", "Scenery groups", "Park entrances", "Water", }; - for (int32_t i = 0; i < 10; i++) + for (ObjectType i = ObjectType::Ride; i < ObjectType::ScenarioText; i++) { int32_t entryGroupIndex = 0; - for (; entryGroupIndex < object_entry_group_counts[i]; entryGroupIndex++) + for (; entryGroupIndex < object_entry_group_counts[EnumValue(i)]; entryGroupIndex++) { - if (object_entry_get_chunk(static_cast(i), entryGroupIndex) == nullptr) + if (object_entry_get_chunk(i, entryGroupIndex) == nullptr) { break; } } - console.WriteFormatLine("%s: %d/%d", object_type_names[i], entryGroupIndex, object_entry_group_counts[i]); + console.WriteFormatLine( + "%s: %d/%d", object_type_names[EnumValue(i)], entryGroupIndex, object_entry_group_counts[EnumValue(i)]); } return 0; diff --git a/src/openrct2/object/Object.cpp b/src/openrct2/object/Object.cpp index cac76cf7d3..759f6cfca8 100644 --- a/src/openrct2/object/Object.cpp +++ b/src/openrct2/object/Object.cpp @@ -22,6 +22,11 @@ #include #include +ObjectType& operator++(ObjectType& d, int) +{ + return d = (d == ObjectType::Count) ? ObjectType::Ride : static_cast(static_cast(d) + 1); +} + Object::Object(const rct_object_entry& entry) { _objectEntry = entry; diff --git a/src/openrct2/object/Object.h b/src/openrct2/object/Object.h index 69bdd5f9e7..1fc6a2e712 100644 --- a/src/openrct2/object/Object.h +++ b/src/openrct2/object/Object.h @@ -45,6 +45,8 @@ enum class ObjectType : uint8_t None = 255 }; +ObjectType& operator++(ObjectType& d, int); + enum OBJECT_SELECTION_FLAGS { OBJECT_SELECTION_FLAG_SELECTED = (1 << 0), diff --git a/src/openrct2/object/ObjectManager.cpp b/src/openrct2/object/ObjectManager.cpp index 021f820a4e..c93368e79c 100644 --- a/src/openrct2/object/ObjectManager.cpp +++ b/src/openrct2/object/ObjectManager.cpp @@ -463,18 +463,8 @@ private: sgObject->UpdateEntryIndexes(); break; } - case ObjectType::Ride: - case ObjectType::Paths: - case ObjectType::ParkEntrance: - case ObjectType::Water: - case ObjectType::ScenarioText: - case ObjectType::TerrainSurface: - case ObjectType::TerrainEdge: - case ObjectType::Station: - case ObjectType::Music: - case ObjectType::Count: - case ObjectType::None: - // This switch handles only ObjectType for sceneries. + default: + // This switch only handles scenery ObjectTypes. break; } } diff --git a/src/openrct2/object/ObjectRepository.cpp b/src/openrct2/object/ObjectRepository.cpp index bc03c7ca08..1fffb75193 100644 --- a/src/openrct2/object/ObjectRepository.cpp +++ b/src/openrct2/object/ObjectRepository.cpp @@ -166,21 +166,7 @@ protected: stream->WriteValue(entry); } break; - case ObjectType::SmallScenery: - case ObjectType::LargeScenery: - case ObjectType::Walls: - case ObjectType::Banners: - case ObjectType::Paths: - case ObjectType::PathBits: - case ObjectType::ParkEntrance: - case ObjectType::Water: - case ObjectType::ScenarioText: - case ObjectType::TerrainSurface: - case ObjectType::TerrainEdge: - case ObjectType::Station: - case ObjectType::Music: - case ObjectType::Count: - case ObjectType::None: + default: // Switch processes only ObjectType::Ride and ObjectType::SceneryGroup break; } @@ -232,21 +218,7 @@ protected: } break; } - case ObjectType::SmallScenery: - case ObjectType::LargeScenery: - case ObjectType::Walls: - case ObjectType::Banners: - case ObjectType::Paths: - case ObjectType::PathBits: - case ObjectType::ParkEntrance: - case ObjectType::Water: - case ObjectType::ScenarioText: - case ObjectType::TerrainSurface: - case ObjectType::TerrainEdge: - case ObjectType::Station: - case ObjectType::Music: - case ObjectType::Count: - case ObjectType::None: + default: // Switch processes only ObjectType::Ride and ObjectType::SceneryGroup break; } diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index dcba2e67e5..452ec910c5 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -548,18 +548,7 @@ private: } break; } - case ObjectType::Ride: - case ObjectType::Banners: - case ObjectType::SceneryGroup: - case ObjectType::ParkEntrance: - case ObjectType::Water: - case ObjectType::ScenarioText: - case ObjectType::TerrainSurface: - case ObjectType::TerrainEdge: - case ObjectType::Station: - case ObjectType::Music: - case ObjectType::Count: - case ObjectType::None: + default: // This switch processes only ObjectTypes valid for scenery break; } @@ -2990,15 +2979,7 @@ private: return &_sceneryGroupEntries; case ObjectType::Water: return &_waterEntry; - case ObjectType::Banners: - case ObjectType::ParkEntrance: - case ObjectType::ScenarioText: - case ObjectType::TerrainSurface: - case ObjectType::TerrainEdge: - case ObjectType::Station: - case ObjectType::Music: - case ObjectType::Count: - case ObjectType::None: + default: // This switch processes only ObjectType for for Entries break; } diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 0a9c6ff716..94d3967321 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -772,19 +772,7 @@ static void track_design_mirror_scenery(TrackDesign* td6) scenery.flags |= flags; break; } - case ObjectType::Ride: - case ObjectType::Banners: - case ObjectType::PathBits: - case ObjectType::SceneryGroup: - case ObjectType::ParkEntrance: - case ObjectType::Water: - case ObjectType::ScenarioText: - case ObjectType::TerrainSurface: - case ObjectType::TerrainEdge: - case ObjectType::Station: - case ObjectType::Music: - case ObjectType::Count: - case ObjectType::None: + default: // This switch processes only ObjectType for Scenery items. break; }