summaryrefslogtreecommitdiff
path: root/Source/Asura.Engine/application.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Asura.Engine/application.cpp')
-rw-r--r--Source/Asura.Engine/application.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/Source/Asura.Engine/application.cpp b/Source/Asura.Engine/application.cpp
new file mode 100644
index 0000000..598bca8
--- /dev/null
+++ b/Source/Asura.Engine/application.cpp
@@ -0,0 +1,59 @@
+#include "Sdl2/SDL.h"
+#include "Exceptions/Exception.h"
+#include "Scripting/Luax.hpp"
+#include "Application.h"
+
+using namespace Luax;
+
+namespace AsuraEngine
+{
+
+ Application::Application()
+ {
+
+ }
+
+ Application::~Application()
+ {
+
+ }
+
+ bool Application::InitSubModules(uint flag)
+ {
+ // ʼģ
+ #define TryInitSubModule(module_name, func_name) \
+ if((flag&ASURA_MODULE_##module_name) && !Application::Init##func_name()) \
+ throw Exception("Asura init submodule %s failed.", #module_name);
+
+ TryInitSubModule(GRAPHICS, Graphics);
+ TryInitSubModule(AUDIO, Audio);
+ TryInitSubModule(FONT, Font);
+ TryInitSubModule(INPUT, Input);
+ TryInitSubModule(MATH, Math);
+ TryInitSubModule(PHYSICS, Physics);
+ TryInitSubModule(TIME, Time);
+ TryInitSubModule(WINDOW, Window);
+
+ }
+
+ void Application::PortToLua()
+ {
+ LuaxState state(mLuaState);
+
+#define RegisterLuaFactory(T) state.RegisterFactory<T>();
+
+ state.SetToGlobalNamespace();
+ state.PushNamespace("AsuraEngine");
+
+ RegisterLuaFactory(AEGraphics::Image>);
+
+#ifdef ASURA_AUTHOR
+ state.PushNamespace("Version");
+
+ state.PopNamespace(); // AsuraEngine.Version
+#endif
+
+ state.PopNamespace(); // AsuraEngine
+ }
+
+} \ No newline at end of file