diff --git a/src/openrct2/object/ObjectManager.cpp b/src/openrct2/object/ObjectManager.cpp index 14902b118c..ef84127b3d 100644 --- a/src/openrct2/object/ObjectManager.cpp +++ b/src/openrct2/object/ObjectManager.cpp @@ -469,6 +469,18 @@ private: log_verbose("%u / %u objects unloaded", numObjectsUnloaded, totalObjectsLoaded); } + template static void UpdateSceneryGroupIndexes(Object* object) + { + auto* sceneryEntry = static_cast(object->GetLegacyData()); + sceneryEntry->scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject); + } + + template<> static void UpdateSceneryGroupIndexes(Object* object) + { + auto sgObject = dynamic_cast(object); + sgObject->UpdateEntryIndexes(); + } + void UpdateSceneryGroupIndexes() { for (auto& loadedObject : _loadedObjects) @@ -480,41 +492,23 @@ private: switch (loadedObject->GetObjectType()) { case ObjectType::SmallScenery: - { - auto* sceneryEntry = static_cast(loadedObject->GetLegacyData()); - sceneryEntry->scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject); + UpdateSceneryGroupIndexes(loadedObject); break; - } case ObjectType::LargeScenery: - { - auto* sceneryEntry = static_cast(loadedObject->GetLegacyData()); - sceneryEntry->scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject); + UpdateSceneryGroupIndexes(loadedObject); break; - } case ObjectType::Walls: - { - auto* wallEntry = static_cast(loadedObject->GetLegacyData()); - wallEntry->scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject); + UpdateSceneryGroupIndexes(loadedObject); break; - } case ObjectType::Banners: - { - auto* bannerEntry = static_cast(loadedObject->GetLegacyData()); - bannerEntry->scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject); + UpdateSceneryGroupIndexes(loadedObject); break; - } case ObjectType::PathBits: - { - auto* pathBitEntry = static_cast(loadedObject->GetLegacyData()); - pathBitEntry->scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject); + UpdateSceneryGroupIndexes(loadedObject); break; - } case ObjectType::SceneryGroup: - { - auto sgObject = dynamic_cast(loadedObject); - sgObject->UpdateEntryIndexes(); + UpdateSceneryGroupIndexes(loadedObject); break; - } default: // This switch only handles scenery ObjectTypes. break;