From 7b17b603f3f88962b118c82e8d88531bb3770000 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sat, 9 Jul 2016 20:37:12 +0100 Subject: [PATCH] set scenery tab IDs --- src/object/ObjectManager.cpp | 46 ++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/object/ObjectManager.cpp b/src/object/ObjectManager.cpp index 6c2c790a96..8db4fdf1f8 100644 --- a/src/object/ObjectManager.cpp +++ b/src/object/ObjectManager.cpp @@ -19,10 +19,14 @@ #include #include "../core/Console.hpp" #include "../core/Memory.hpp" +#include "FootpathItemObject.h" +#include "LargeSceneryObject.h" #include "Object.h" #include "ObjectManager.h" #include "ObjectRepository.h" #include "SceneryGroupObject.h" +#include "SmallSceneryObject.h" +#include "WallObject.h" extern "C" { @@ -218,6 +222,8 @@ private: size_t GetLoadedObjectIndex(const Object * object) { + Guard::ArgumentNotNull(object); + size_t result = SIZE_MAX; if (_loadedObjects != nullptr) { @@ -352,16 +358,52 @@ private: Object * loadedObject = _loadedObjects[i]; if (loadedObject != nullptr) { - if (loadedObject->GetObjectType() == OBJECT_TYPE_SCENERY_SETS) - { + rct_scenery_entry * sceneryEntry; + switch (loadedObject->GetObjectType()) { + case OBJECT_TYPE_SMALL_SCENERY: + sceneryEntry = (rct_scenery_entry *)loadedObject->GetLegacyData(); + sceneryEntry->small_scenery.scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject); + break; + case OBJECT_TYPE_LARGE_SCENERY: + sceneryEntry = (rct_scenery_entry *)loadedObject->GetLegacyData(); + sceneryEntry->large_scenery.scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject); + break; + case OBJECT_TYPE_WALLS: + sceneryEntry = (rct_scenery_entry *)loadedObject->GetLegacyData(); + sceneryEntry->wall.scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject); + break; + case OBJECT_TYPE_BANNERS: + sceneryEntry = (rct_scenery_entry *)loadedObject->GetLegacyData(); + sceneryEntry->banner.scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject); + break; + case OBJECT_TYPE_PATH_BITS: + sceneryEntry = (rct_scenery_entry *)loadedObject->GetLegacyData(); + sceneryEntry->path_bit.scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject); + break; + case OBJECT_TYPE_SCENERY_SETS: auto sgObject = static_cast(loadedObject); sgObject->UpdateEntryIndexes(); + break; } } } } } + uint8 GetPrimarySceneryGroupEntryIndex(Object * loadedObject) + { + auto sceneryObject = static_cast(loadedObject); + const rct_object_entry * primarySGEntry = sceneryObject->GetPrimarySceneryGroup(); + Object * sgObject = GetLoadedObject(primarySGEntry); + + uint8 entryIndex = 255; + if (sgObject != nullptr) + { + entryIndex = GetLoadedObjectEntryIndex(sgObject); + } + return entryIndex; + } + bool GetRequiredObjects(const rct_object_entry * entries, const ObjectRepositoryItem * * requiredObjects, size_t * outNumRequiredObjects)