diff --git a/src/openrct2/Context.cpp b/src/openrct2/Context.cpp index 55a83cc559..bb64faced5 100644 --- a/src/openrct2/Context.cpp +++ b/src/openrct2/Context.cpp @@ -88,6 +88,7 @@ namespace OpenRCT2 ITrackDesignRepository * _trackDesignRepository = nullptr; IScenarioRepository * _scenarioRepository = nullptr; + bool _initialised = false; bool _isWindowMinimised = false; uint32 _lastTick = 0; uint32 _accumulator = 0; @@ -125,6 +126,12 @@ namespace OpenRCT2 EVP_MD_CTX_destroy(gHashCTX); #endif // DISABLE_NETWORK rct2_interop_dispose(); + + delete _scenarioRepository; + delete _trackDesignRepository; + delete _objectManager; + delete _objectRepository; + Instance = nullptr; } @@ -157,6 +164,12 @@ namespace OpenRCT2 bool Initialise() final override { + if (_initialised) + { + throw std::runtime_error("Context already initialised."); + } + _initialised = true; + #ifndef DISABLE_NETWORK gHashCTX = EVP_MD_CTX_create(); Guard::Assert(gHashCTX != nullptr, "EVP_MD_CTX_create failed"); diff --git a/src/openrct2/object/ObjectManager.cpp b/src/openrct2/object/ObjectManager.cpp index 9c83db64aa..0995316594 100644 --- a/src/openrct2/object/ObjectManager.cpp +++ b/src/openrct2/object/ObjectManager.cpp @@ -607,17 +607,17 @@ private: } }; -static std::unique_ptr _objectManager; +static ObjectManager * _objectManager = nullptr; IObjectManager * CreateObjectManager(IObjectRepository * objectRepository) { - _objectManager = std::unique_ptr(new ObjectManager(objectRepository)); - return _objectManager.get(); + _objectManager = new ObjectManager(objectRepository); + return _objectManager; } IObjectManager * GetObjectManager() { - return _objectManager.get(); + return _objectManager; } extern "C" diff --git a/src/openrct2/object/ObjectRepository.cpp b/src/openrct2/object/ObjectRepository.cpp index fb153b25b6..7f74c8ba46 100644 --- a/src/openrct2/object/ObjectRepository.cpp +++ b/src/openrct2/object/ObjectRepository.cpp @@ -698,17 +698,17 @@ private: } }; -static std::unique_ptr _objectRepository; +static ObjectRepository * _objectRepository = nullptr; IObjectRepository * CreateObjectRepository(IPlatformEnvironment * env) { - _objectRepository = std::unique_ptr(new ObjectRepository(env)); - return _objectRepository.get(); + _objectRepository = new ObjectRepository(env); + return _objectRepository; } IObjectRepository * GetObjectRepository() { - return _objectRepository.get(); + return _objectRepository; } bool IsObjectCustom(const ObjectRepositoryItem * object) diff --git a/src/openrct2/ride/TrackDesignRepository.cpp b/src/openrct2/ride/TrackDesignRepository.cpp index a681c87139..239bfebad3 100644 --- a/src/openrct2/ride/TrackDesignRepository.cpp +++ b/src/openrct2/ride/TrackDesignRepository.cpp @@ -456,17 +456,17 @@ public: } }; -static std::unique_ptr _trackDesignRepository; +static TrackDesignRepository * _trackDesignRepository = nullptr; ITrackDesignRepository * CreateTrackDesignRepository(IPlatformEnvironment * env) { - _trackDesignRepository = std::unique_ptr(new TrackDesignRepository(env)); - return _trackDesignRepository.get(); + _trackDesignRepository = new TrackDesignRepository(env); + return _trackDesignRepository; } ITrackDesignRepository * GetTrackDesignRepository() { - return _trackDesignRepository.get(); + return _trackDesignRepository; } extern "C" diff --git a/src/openrct2/scenario/ScenarioRepository.cpp b/src/openrct2/scenario/ScenarioRepository.cpp index d732fbb413..2911129021 100644 --- a/src/openrct2/scenario/ScenarioRepository.cpp +++ b/src/openrct2/scenario/ScenarioRepository.cpp @@ -604,17 +604,17 @@ private: } }; -static std::unique_ptr _scenarioRepository; +static ScenarioRepository * _scenarioRepository; IScenarioRepository * CreateScenarioRepository(IPlatformEnvironment * env) { - _scenarioRepository = std::unique_ptr(new ScenarioRepository(env)); - return _scenarioRepository.get(); + _scenarioRepository = new ScenarioRepository(env); + return _scenarioRepository; } IScenarioRepository * GetScenarioRepository() { - return _scenarioRepository.get(); + return _scenarioRepository; } extern "C"