aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/game/application.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/game/application.cpp')
-rw-r--r--src/libjin/game/application.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/libjin/game/application.cpp b/src/libjin/game/application.cpp
new file mode 100644
index 0000000..e67231f
--- /dev/null
+++ b/src/libjin/game/application.cpp
@@ -0,0 +1,82 @@
+#include "../core/configuration.h"
+#if defined(jin_game)
+
+#include <iostream>
+
+#include "../time/timer.h"
+#include "../input/event.h"
+#include "../graphics/window.h"
+#include "../graphics/gl.h"
+#include "../math/math.h"
+
+#include "application.h"
+
+using namespace JinEngine::Graphics;
+using namespace JinEngine::Input;
+using namespace JinEngine::Time;
+using namespace JinEngine::Math;
+
+namespace JinEngine
+{
+ namespace Game
+ {
+
+ Application::Application() :_running(true) {};
+
+ /* default game loop */
+ void Application::run()
+ {
+ if (_onLoad != nullptr)
+ _onLoad();
+ Window* wnd = Window::get();
+ const int FPS = wnd ? wnd->getFPS() : 60;
+ const int MS_PER_UPDATE = 1000.0f / FPS;
+ _running = true;
+ Event e;
+ int current = getMilliSecond();
+ int previous = current;
+ int dt = 0;
+ while (_running)
+ {
+ while (JinEngine::Input::pollEvent(&e))
+ {
+ if (_onEvent != nullptr)
+ _onEvent(&e);
+ if (!_running)
+ goto quitloop;
+ }
+ previous = current;
+ current = getMilliSecond();
+ dt = current - previous;
+ if (_onUpdate != nullptr)
+ _onUpdate(dt);
+ glClear(GL_COLOR_BUFFER_BIT);
+ if (_onDraw != nullptr)
+ _onDraw();
+ wnd->present();
+ sleep(16);
+ }
+ quitloop:;
+ }
+
+ bool Application::startSystem(const SettingBase* setting)
+ {
+ if (setting == nullptr)
+ return false;
+ Application::Setting* s = (Application::Setting*) setting;
+ _onEvent = s->eventHandler;
+ _onUpdate = s->updater;
+ _onDraw = s->drawer;
+ _onLoad = s->loader;
+ return true;
+ }
+
+ void Application::quitSystem()
+ {
+ SDL_Quit();
+ }
+
+ } // namespace Core
+} // namespace JinEngine
+
+#endif // jin_game \ No newline at end of file