diff options
Diffstat (limited to 'Runtime/BaseClasses/ManagerContext.cpp')
-rw-r--r-- | Runtime/BaseClasses/ManagerContext.cpp | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/Runtime/BaseClasses/ManagerContext.cpp b/Runtime/BaseClasses/ManagerContext.cpp new file mode 100644 index 0000000..1824a84 --- /dev/null +++ b/Runtime/BaseClasses/ManagerContext.cpp @@ -0,0 +1,107 @@ +#include "UnityPrefix.h" +#include "ManagerContext.h" +#include "BaseObject.h" +#include "Configuration/UnityConfigure.h" + +ManagerContext::ManagerContext () +{ + for (int i=0;i<kManagerCount;i++) + m_Managers[i] = NULL; +} + +void ManagerContext::InitializeClasses () +{ + for (int i=0;i<kManagerCount;i++) + { + m_ManagerClassIDs[i] = -1; + #if DEBUGMODE + m_ManagerNames[i] = "Not initialized"; + #endif + } + +#if DEBUGMODE + #define INIT_MANAGER_CLASS(x) Assert(m_ManagerClassIDs[k##x] == -1); m_ManagerClassIDs[k##x] = Object::StringToClassID (#x); m_ManagerNames[k##x] = #x; +#else + #define INIT_MANAGER_CLASS(x) m_ManagerClassIDs[k##x] = Object::StringToClassID (#x); +#endif + + INIT_MANAGER_CLASS (PlayerSettings) + INIT_MANAGER_CLASS (InputManager) + INIT_MANAGER_CLASS (TagManager) + INIT_MANAGER_CLASS (AudioManager) + INIT_MANAGER_CLASS (ScriptMapper) + INIT_MANAGER_CLASS (MonoManager) + INIT_MANAGER_CLASS (GraphicsSettings) + INIT_MANAGER_CLASS (TimeManager) + INIT_MANAGER_CLASS (DelayedCallManager) + INIT_MANAGER_CLASS (PhysicsManager) + INIT_MANAGER_CLASS (BuildSettings) + INIT_MANAGER_CLASS (QualitySettings) + INIT_MANAGER_CLASS (ResourceManager) + INIT_MANAGER_CLASS (NetworkManager) + INIT_MANAGER_CLASS (MasterServerInterface) + INIT_MANAGER_CLASS (NavMeshLayers) + #if ENABLE_2D_PHYSICS + INIT_MANAGER_CLASS (Physics2DSettings) + #endif + + INIT_MANAGER_CLASS (SceneSettings) + INIT_MANAGER_CLASS (RenderSettings) + INIT_MANAGER_CLASS (HaloManager) + INIT_MANAGER_CLASS (LightmapSettings) + INIT_MANAGER_CLASS (NavMeshSettings) + +#if UNITY_EDITOR + for (int i=0;i<kManagerCount;i++) + { + Assert (m_ManagerClassIDs[i] != -1); + } + + std::vector<SInt32> allDerivedClasses; + Object::FindAllDerivedClasses(Object::StringToClassID("GameManager"), &allDerivedClasses); + if (allDerivedClasses.size() != kManagerCount) + { + ErrorString("Number of GameManager classes does not match number of game managers registered."); + } +#endif + +} + +static ManagerContext gContext; + +Object& GetManagerFromContext (int index) +{ +#if DEBUGMODE + + if( index >= ManagerContext::kManagerCount ) + FatalErrorString( "GetManagerFromContext: index for managers table is out of bounds" ); + + if( gContext.m_Managers[index] == NULL ) + { + char const* managerName = gContext.m_ManagerNames[ index ]; + FatalErrorString( Format("GetManagerFromContext: pointer to object of manager '%s' is NULL (table index %d)", managerName, index) ); + } +#endif + + return *gContext.m_Managers[index]; +} + +void ManagerContextInitializeClasses() +{ + gContext.InitializeClasses(); +} + +Object* GetManagerPtrFromContext (int index) +{ + return gContext.m_Managers[index]; +} + +void SetManagerPtrInContext(int index, Object* ptr) +{ + gContext.m_Managers[index] = ptr; +} + +const ManagerContext& GetManagerContext () +{ + return gContext; +} |