diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index 92f9283242..bd7b302a47 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -1435,34 +1435,7 @@ static bool filter_source(const ObjectRepositoryItem* item, bool selected) if (_FILTER_ALL) return true; - uint8_t source = object_entry_get_source_game(&item->ObjectEntry); - uint8_t secondSource = OBJECT_SOURCE_CUSTOM; - - _loadedObject = item->LoadedObject; - if (_loadedObject == nullptr) - { - _loadedObject = object_manager_get_loaded_object(&item->ObjectEntry); - } - if (_loadedObject == nullptr) - { - _loadedObject = object_manager_load_object(&item->ObjectEntry); - } - if (_loadedObject != nullptr) - { - secondSource = ((Object*)_loadedObject)->GetSecondSourceGame(); - } - - if (!selected && _loadedObject != nullptr) - { - uint8_t objectType = object_entry_get_type(&item->ObjectEntry); - - if (objectType != OBJECT_TYPE_PARK_ENTRANCE && objectType != OBJECT_TYPE_SCENARIO_TEXT && objectType != OBJECT_TYPE_WATER && objectType != OBJECT_TYPE_SCENERY_GROUP) - { - ((Object*)_loadedObject)->Unload(); - } - } - - return sources_match(source) || (secondSource != OBJECT_SOURCE_CUSTOM && sources_match(secondSource)); + return sources_match(item->Source); } static bool filter_chunks(const ObjectRepositoryItem* item) diff --git a/src/openrct2/object/Object.cpp b/src/openrct2/object/Object.cpp index 66e1dc3b4f..d4573044f1 100644 --- a/src/openrct2/object/Object.cpp +++ b/src/openrct2/object/Object.cpp @@ -91,7 +91,7 @@ void Object::SetSourceGame(const uint8_t sourceGame) _objectEntry.flags |= (sourceGame << 4);*/ } -const uint8_t Object::GetSecondSourceGame() +uint8_t Object::GetSecondSourceGame() { return _secondSourceGame; } diff --git a/src/openrct2/object/Object.h b/src/openrct2/object/Object.h index d5d1b6eb8d..2f7eb38ed3 100644 --- a/src/openrct2/object/Object.h +++ b/src/openrct2/object/Object.h @@ -157,7 +157,7 @@ private: rct_object_entry _objectEntry{}; StringTable _stringTable; ImageTable _imageTable; - uint8_t _secondSourceGame; + uint8_t _secondSourceGame = OBJECT_SOURCE_CUSTOM; protected: StringTable& GetStringTable() @@ -216,7 +216,7 @@ public: virtual void SetRepositoryItem(ObjectRepositoryItem* /*item*/) const { } - const uint8_t GetSecondSourceGame(); + uint8_t GetSecondSourceGame(); void SetSecondSourceGame(uint8_t sourceGame); const ImageTable& GetImageTable() const diff --git a/src/openrct2/object/ObjectRepository.cpp b/src/openrct2/object/ObjectRepository.cpp index 7bb892317b..39cd2cee86 100644 --- a/src/openrct2/object/ObjectRepository.cpp +++ b/src/openrct2/object/ObjectRepository.cpp @@ -112,6 +112,7 @@ public: item.ObjectEntry = *object->GetObjectEntry(); item.Path = path; item.Name = object->GetName(); + item.Source = object->GetSecondSourceGame(); object->SetRepositoryItem(&item); delete object; return std::make_tuple(true, item); @@ -125,6 +126,7 @@ protected: stream->WriteValue(item.ObjectEntry); stream->WriteString(item.Path); stream->WriteString(item.Name); + stream->WriteValue(item.Source); switch (object_entry_get_type(&item.ObjectEntry)) { @@ -157,6 +159,7 @@ protected: item.ObjectEntry = stream->ReadValue(); item.Path = stream->ReadStdString(); item.Name = stream->ReadStdString(); + item.Source = stream->ReadValue(); switch (object_entry_get_type(&item.ObjectEntry)) { diff --git a/src/openrct2/object/ObjectRepository.h b/src/openrct2/object/ObjectRepository.h index 6f27a5fe62..6255d08625 100644 --- a/src/openrct2/object/ObjectRepository.h +++ b/src/openrct2/object/ObjectRepository.h @@ -36,6 +36,7 @@ struct ObjectRepositoryItem rct_object_entry ObjectEntry; std::string Path; std::string Name; + uint8_t Source; Object* LoadedObject{}; struct {