blob: 1824a840654e071cd1773db2fcf9385e7cee094a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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;
}
|