1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-18 04:23:20 +01:00

Give context the ownership of repositories and the object manager (#7340)

This makes them no longer a singleton, which fixes annoying behaviour when launching multiple contexts in one game session.
This commit is contained in:
Hielke Morsink
2018-04-10 14:19:23 +02:00
committed by Ted John
parent 8fbe6e63d8
commit dc673a64d8
22 changed files with 117 additions and 99 deletions

View File

@@ -18,6 +18,7 @@
#include <array>
#include <memory>
#include <unordered_set>
#include "../Context.h"
#include "../core/Console.hpp"
#include "../core/Memory.hpp"
#include "../localisation/StringIds.h"
@@ -571,36 +572,28 @@ private:
}
};
static ObjectManager * _objectManager = nullptr;
IObjectManager * CreateObjectManager(IObjectRepository * objectRepository)
{
_objectManager = new ObjectManager(objectRepository);
return _objectManager;
}
IObjectManager * GetObjectManager()
{
return _objectManager;
return new ObjectManager(objectRepository);
}
void * object_manager_get_loaded_object_by_index(size_t index)
{
IObjectManager * objectManager = GetObjectManager();
IObjectManager * objectManager = OpenRCT2::GetContext()->GetObjectManager();
Object * loadedObject = objectManager->GetLoadedObject(index);
return (void *)loadedObject;
}
void * object_manager_get_loaded_object(const rct_object_entry * entry)
{
IObjectManager * objectManager = GetObjectManager();
IObjectManager * objectManager = OpenRCT2::GetContext()->GetObjectManager();
Object * loadedObject = objectManager->GetLoadedObject(entry);
return (void *)loadedObject;
}
uint8 object_manager_get_loaded_object_entry_index(const void * loadedObject)
{
IObjectManager * objectManager = GetObjectManager();
IObjectManager * objectManager = OpenRCT2::GetContext()->GetObjectManager();
const Object * object = static_cast<const Object *>(loadedObject);
uint8 entryIndex = objectManager->GetLoadedObjectEntryIndex(object);
return entryIndex;
@@ -608,20 +601,20 @@ uint8 object_manager_get_loaded_object_entry_index(const void * loadedObject)
void * object_manager_load_object(const rct_object_entry * entry)
{
IObjectManager * objectManager = GetObjectManager();
IObjectManager * objectManager = OpenRCT2::GetContext()->GetObjectManager();
Object * loadedObject = objectManager->LoadObject(entry);
return (void *)loadedObject;
}
void object_manager_unload_objects(const rct_object_entry * entries, size_t count)
{
IObjectManager * objectManager = GetObjectManager();
IObjectManager * objectManager = OpenRCT2::GetContext()->GetObjectManager();
objectManager->UnloadObjects(entries, count);
}
void object_manager_unload_all_objects()
{
IObjectManager * objectManager = GetObjectManager();
IObjectManager * objectManager = OpenRCT2::GetContext()->GetObjectManager();
if (objectManager != nullptr)
{
objectManager->UnloadAll();
@@ -632,4 +625,3 @@ rct_string_id object_manager_get_source_game_string(const rct_object_entry * ent
{
return ObjectManager::GetObjectSourceGameString(entry);
}