aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Game/je_application.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/Game/je_application.h')
-rw-r--r--src/libjin/Game/je_application.h88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/libjin/Game/je_application.h b/src/libjin/Game/je_application.h
new file mode 100644
index 0000000..f740c22
--- /dev/null
+++ b/src/libjin/Game/je_application.h
@@ -0,0 +1,88 @@
+#ifndef __JE_CORE_GAME_H
+#define __JE_CORE_GAME_H
+
+#include "../core/je_configuration.h"
+#if defined(jin_game)
+
+#include "../common/je_subsystem.hpp"
+#include "../utils/je_macros.h"
+#include "../input/je_Event.h"
+
+#include "SDL2/SDL.h"
+
+namespace JinEngine
+{
+ namespace Game
+ {
+
+ ///
+ /// Game class.
+ ///
+ class Application : public Subsystem<Application>
+ {
+ public:
+
+ typedef void(*onLoad)();
+ typedef void(*onEvent)(JinEngine::Input::Event* e);
+ typedef void(*onUpdate)(int dt);
+ typedef void(*onDraw)();
+
+ ///
+ /// Game setting.
+ ///
+ struct Setting : SettingBase
+ {
+ onEvent eventHandler;
+ onUpdate updater;
+ onDraw drawer;
+ onLoad loader;
+ };
+
+ ///
+ /// Main game loop.
+ ///
+ void run();
+
+ ///
+ /// Stop game.
+ ///
+ inline void stop()
+ {
+ _running = false;
+ };
+
+ ///
+ /// Return if game is running.
+ ///
+ /// @return True if game is running, otherwise return false.
+ ///
+ inline bool running()
+ {
+ return _running;
+ };
+
+ private:
+
+ Application();
+ ~Application() {};
+
+ singleton(Application);
+
+ onEvent _onEvent;
+ onUpdate _onUpdate;
+ onDraw _onDraw;
+ onLoad _onLoad;
+
+ bool _running;
+
+ bool initSystem(const SettingBase* setting);
+ void quitSystem();
+
+ };
+
+ } // namespace Core
+} // namespace JinEngine
+
+#endif // jin_game
+
+#endif // __JE_CORE_GAME_H \ No newline at end of file