summaryrefslogtreecommitdiff
path: root/Runtime/BaseClasses/ManagerContext.h
blob: af4de7b4c1fba4bc3aba53e5a1a40483954dfe12 (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
#ifndef MANAGERCONTEXT_H
#define MANAGERCONTEXT_H

class Object;
struct ManagerContext;

EXPORT_COREMODULE Object& GetManagerFromContext (int index);
EXPORT_COREMODULE Object* GetManagerPtrFromContext (int index);
void SetManagerPtrInContext(int index, Object* ptr);
void ManagerContextInitializeClasses();

#define GET_MANAGER(x) x& Get##x () { return reinterpret_cast<x&> (GetManagerFromContext (ManagerContext::k##x)); }
#define GET_MANAGER_PTR(x) x* Get##x##Ptr () { return reinterpret_cast<x*> (GetManagerPtrFromContext (ManagerContext::k##x)); }

const ManagerContext& GetManagerContext ();

struct ManagerContext
{
	enum Managers
	{
		// Global managers
		kPlayerSettings = 0,
		kInputManager,
		kTagManager,
		kAudioManager,
		kScriptMapper,
		kMonoManager,
		kGraphicsSettings,
		kTimeManager,
		kDelayedCallManager,
		kPhysicsManager,
		kBuildSettings,
		kQualitySettings,
		kResourceManager,
		kNetworkManager,
		kMasterServerInterface,
		kNavMeshLayers,
		#if ENABLE_2D_PHYSICS
		kPhysics2DSettings,
		#endif
		kGlobalManagerCount,
		
		// Level managers
		kSceneSettings = kGlobalManagerCount,
		kRenderSettings,
		kHaloManager,
		kLightmapSettings,
		kNavMeshSettings,
		kManagerCount
	};
	
	ManagerContext ();
	Object*	m_Managers[kManagerCount];
	int		m_ManagerClassIDs[kManagerCount];
	#if DEBUGMODE
	const char* m_ManagerNames[kManagerCount];
	#endif
	void InitializeClasses ();
};

#endif