summaryrefslogtreecommitdiff
path: root/source/modules/asura-core/application.h
blob: 0cde32f0b413d24012f05621afb5136f412ead0e (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
#ifndef __ASURA_ENGINE_APPLICATION_H__
#define __ASURA_ENGINE_APPLICATION_H__

#include <asura-utils/scripting/portable.hpp>
#include <asura-utils/module.h>
#include <queue>

#include "core_config.h"

namespace AsuraEngine
{

	///
	/// ģ
	///
	enum SubModules
	{
		ASURA_MODULE_NONE = 0X00000000U,

		ASURA_MODULE_GRAPHICS = 1 << 1,
		ASURA_MODULE_AUDIO    = 1 << 2,
		ASURA_MODULE_FONT     = 1 << 3,
		ASURA_MODULE_INPUT    = 1 << 4,
		ASURA_MODULE_MATH     = 1 << 5,
		ASURA_MODULE_PHYSICS  = 1 << 6,
		ASURA_MODULE_TIME     = 1 << 7,
		ASURA_MODULE_WINDOW   = 1 << 8,

		ASURA_MODULE_ALL = 0XFFFFFFFFU
	};

	///
	/// ѭ
	///
	class Application
	{
	public:
		
		Application(); 

		virtual ~Application();

		///
		/// ʼǰϵͳ
		/// 
		bool InitSubModules(uint flag = ASURA_MODULE_ALL);
		
		///
		/// 
		///
		virtual void Run(int argc, char* args[]);

		///
		/// ˳runʱĴ
		///
		virtual void OnExit();

	protected:

		///
		/// moduleapplicationӵmoduleȨ
		///
		void EnqueueModule(Module* module);
		
	private:

		///
		/// ̵߳lua state handleӦѭСһ˵ֻҪ߳һlua_State̲߳Ҫ̼߳
		/// lua̫ʹˡC++дȻעһصһ̴߳lua_Stateעắִк󷢻
		/// ̵߳lua_Stateֻ֤һnativeʵ֮һlua_State󶨡
		///
		Luax::LuaxVM* m_VM;

		///
		/// Asura libsᰴն˳ʼ˳ʱִ˳
		///
		std::queue<Module*> m_Modules;

	};

}

#endif