diff --git a/src/openrct2/Context.cpp b/src/openrct2/Context.cpp index 748b2954f1..4ef7fe5d74 100644 --- a/src/openrct2/Context.cpp +++ b/src/openrct2/Context.cpp @@ -455,7 +455,7 @@ namespace OpenRCT2 } else { - parkImporter.reset(ParkImporter::CreateS6()); + parkImporter.reset(ParkImporter::CreateS6(_objectRepository, _objectManager)); } if (info.Type == FILE_TYPE::SAVED_GAME) diff --git a/src/openrct2/ParkImporter.cpp b/src/openrct2/ParkImporter.cpp index d3828563ef..6b20575930 100644 --- a/src/openrct2/ParkImporter.cpp +++ b/src/openrct2/ParkImporter.cpp @@ -17,6 +17,8 @@ #include #include "core/Path.hpp" #include "core/String.hpp" +#include "object/ObjectManager.h" +#include "object/ObjectRepository.h" #include "ParkImporter.h" namespace ParkImporter @@ -31,7 +33,7 @@ namespace ParkImporter } else { - parkImporter = CreateS6(); + parkImporter = CreateS6(GetObjectRepository(), GetObjectManager()); } return parkImporter; } diff --git a/src/openrct2/ParkImporter.h b/src/openrct2/ParkImporter.h index 409336ee7b..bbce6a92b9 100644 --- a/src/openrct2/ParkImporter.h +++ b/src/openrct2/ParkImporter.h @@ -23,6 +23,8 @@ #include #include "scenario/ScenarioRepository.h" +interface IObjectManager; +interface IObjectRepository; interface IStream; /** @@ -44,7 +46,7 @@ namespace ParkImporter { IParkImporter * Create(const std::string &hintPath); IParkImporter * CreateS4(); - IParkImporter * CreateS6(); + IParkImporter * CreateS6(IObjectRepository * objectRepository, IObjectManager * objectManager); bool ExtensionIsRCT1(const std::string &extension); bool ExtensionIsScenario(const std::string &extension); diff --git a/src/openrct2/network/network.cpp b/src/openrct2/network/network.cpp index 1672bb89e3..51ee7edf13 100644 --- a/src/openrct2/network/network.cpp +++ b/src/openrct2/network/network.cpp @@ -1869,7 +1869,8 @@ bool Network::LoadMap(IStream * stream) bool result = false; try { - auto importer = std::unique_ptr(ParkImporter::CreateS6()); + auto importer = std::unique_ptr( + ParkImporter::CreateS6(GetObjectRepository(), GetObjectManager())); importer->LoadFromStream(stream, false); importer->Import(); diff --git a/src/openrct2/object.h b/src/openrct2/object.h index d3bd17d83a..ad27682b4d 100644 --- a/src/openrct2/object.h +++ b/src/openrct2/object.h @@ -106,7 +106,6 @@ assert_struct_size(rct_object_filters, 3); extern const rct_object_entry_group object_entry_groups[]; void object_list_load(); -bool object_load_entries(rct_object_entry* entries); bool object_entry_is_empty(const rct_object_entry *entry); bool object_entry_compare(const rct_object_entry *a, const rct_object_entry *b); diff --git a/src/openrct2/object/ObjectRepository.cpp b/src/openrct2/object/ObjectRepository.cpp index 1125e54a01..5a25cb6a80 100644 --- a/src/openrct2/object/ObjectRepository.cpp +++ b/src/openrct2/object/ObjectRepository.cpp @@ -754,17 +754,6 @@ extern "C" objectManager->UnloadAll(); } - bool object_load_entries(rct_object_entry * entries) - { - log_verbose("loading required objects"); - - IObjectManager * objectManger = GetObjectManager(); - bool result = objectManger->LoadObjects(entries, OBJECT_ENTRY_COUNT); - - log_verbose("finished loading required objects"); - return result; - } - void * object_repository_load_object(const rct_object_entry * objectEntry) { Object * object = nullptr; diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index 6ae961b6db..e98599ad32 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -22,6 +22,7 @@ #include "../core/String.hpp" #include "../management/award.h" #include "../network/network.h" +#include "../object/ObjectManager.h" #include "../object/ObjectRepository.h" #include "../ParkImporter.h" #include "../rct12/SawyerChunkReader.h" @@ -64,12 +65,17 @@ public: class S6Importer final : public IParkImporter { private: + IObjectRepository * const _objectRepository; + IObjectManager * const _objectManager; + const utf8 * _s6Path = nullptr; rct_s6_data _s6; uint8 _gameVersion = 0; public: - S6Importer() + S6Importer(IObjectRepository * objectRepository, IObjectManager * objectManager) + : _objectRepository(objectRepository), + _objectManager(objectManager) { Memory::Set(&_s6, 0, sizeof(_s6)); } @@ -134,10 +140,9 @@ public: // Read packed objects // TODO try to contain this more and not store objects until later - IObjectRepository * objectRepo = GetObjectRepository(); for (uint16 i = 0; i < _s6.header.num_packed_objects; i++) { - objectRepo->ExportPackedObject(stream); + _objectRepository->ExportPackedObject(stream); } if (isScenario) @@ -390,7 +395,7 @@ public: // pad_13CE778 // Fix and set dynamic variables - if (!object_load_entries(_s6.objects)) + if (!_objectManager->LoadObjects(_s6.objects, OBJECT_ENTRY_COUNT)) { throw ObjectLoadException(); } @@ -406,9 +411,9 @@ public: } }; -IParkImporter * ParkImporter::CreateS6() +IParkImporter * ParkImporter::CreateS6(IObjectRepository * objectRepository, IObjectManager * objectManager) { - return new S6Importer(); + return new S6Importer(objectRepository, objectManager); } extern "C" @@ -416,7 +421,7 @@ extern "C" bool game_load_sv6_path(const char * path) { bool result = false; - auto s6Importer = new S6Importer(); + auto s6Importer = new S6Importer(GetObjectRepository(), GetObjectManager()); try { s6Importer->LoadSavedGame(path); @@ -456,7 +461,7 @@ extern "C" sint32 scenario_load(const char * path) { bool result = false; - auto s6Importer = new S6Importer(); + auto s6Importer = new S6Importer(GetObjectRepository(), GetObjectManager()); try { s6Importer->LoadScenario(path);