From 3003393c87031073759f44be779719b123b60dcc Mon Sep 17 00:00:00 2001 From: Ted John Date: Thu, 22 Jun 2017 18:56:32 +0100 Subject: [PATCH] Allow re-creation of object manager Removing lazy initialisation of it. --- src/openrct2/Context.cpp | 3 +++ src/openrct2/object/ObjectManager.cpp | 14 ++++++-------- src/openrct2/object/ObjectManager.h | 6 ++++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/openrct2/Context.cpp b/src/openrct2/Context.cpp index 7233ef1d1d..748b2954f1 100644 --- a/src/openrct2/Context.cpp +++ b/src/openrct2/Context.cpp @@ -28,6 +28,7 @@ #include "core/String.hpp" #include "FileClassifier.h" #include "network/network.h" +#include "object/ObjectManager.h" #include "object/ObjectRepository.h" #include "OpenRCT2.h" #include "ParkImporter.h" @@ -77,6 +78,7 @@ namespace OpenRCT2 // Services IObjectRepository * _objectRepository = nullptr; + IObjectManager * _objectManager = nullptr; ITrackDesignRepository * _trackDesignRepository = nullptr; IScenarioRepository * _scenarioRepository = nullptr; @@ -188,6 +190,7 @@ namespace OpenRCT2 // } _objectRepository = CreateObjectRepository(_env); + _objectManager = CreateObjectManager(_objectRepository); _trackDesignRepository = CreateTrackDesignRepository(_env); _scenarioRepository = CreateScenarioRepository(_env); diff --git a/src/openrct2/object/ObjectManager.cpp b/src/openrct2/object/ObjectManager.cpp index 0d3c5982a7..9672c7b6fb 100644 --- a/src/openrct2/object/ObjectManager.cpp +++ b/src/openrct2/object/ObjectManager.cpp @@ -547,16 +547,14 @@ private: static std::unique_ptr _objectManager; +IObjectManager * CreateObjectManager(IObjectRepository * objectRepository) +{ + _objectManager = std::unique_ptr(new ObjectManager(objectRepository)); + return _objectManager.get(); +} + IObjectManager * GetObjectManager() { - if (_objectManager == nullptr) - { - IObjectRepository * objectRepository = GetObjectRepository(); - if (objectRepository != nullptr) - { - _objectManager = std::unique_ptr(new ObjectManager(objectRepository)); - } - } return _objectManager.get(); } diff --git a/src/openrct2/object/ObjectManager.h b/src/openrct2/object/ObjectManager.h index 9a823589c4..2afb049203 100644 --- a/src/openrct2/object/ObjectManager.h +++ b/src/openrct2/object/ObjectManager.h @@ -33,8 +33,9 @@ extern "C" #ifdef __cplusplus -class Object; -struct ObjectRepositoryItem; +interface IObjectRepository; +class Object; +struct ObjectRepositoryItem; interface IObjectManager { @@ -54,6 +55,7 @@ interface IObjectManager virtual std::vector GetPackableObjects() abstract; }; +IObjectManager * CreateObjectManager(IObjectRepository * objectRepository); IObjectManager * GetObjectManager(); #endif