]> git.tdb.fi Git - libs/game.git/blobdiff - source/gameview/application.h
Add a view sub-library, including a Camera component
[libs/game.git] / source / gameview / application.h
diff --git a/source/gameview/application.h b/source/gameview/application.h
new file mode 100644 (file)
index 0000000..fbaa47b
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef MSP_GAMEVIEW_APPLICATION_H_
+#define MSP_GAMEVIEW_APPLICATION_H_
+
+#include <msp/core/application.h>
+#include <msp/game/director.h>
+#include <msp/gl/device.h>
+#include <msp/gl/windowview.h>
+#include <msp/graphics/display.h>
+#include <msp/graphics/window.h>
+#include "presenter.h"
+
+namespace Msp::GameView {
+
+template<typename T, typename R>
+class Application: public Msp::RegisteredApplication<T>
+{
+public:
+       using ResourcesType = R;
+
+protected:
+       Msp::Graphics::Display display;
+       Msp::Graphics::Window window;
+       GL::Device gl_device;
+       ResourcesType resources;
+       Msp::Game::Director director;
+       GL::WindowView gl_view;
+       Presenter presenter;
+
+public:
+       Application();
+
+       int main() override;
+protected:
+       void tick() override;
+};
+
+template<typename T, typename R>
+Application<T, R>::Application():
+       window(display, 1920, 1080),
+       gl_device(window),
+       director(resources),
+       gl_view(window),
+       presenter(director, gl_view)
+{
+       window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &Application::exit), 0));
+}
+
+template<typename T, typename R>
+int Application<T, R>::main()
+{
+       window.show();
+       return Msp::Application::main();
+}
+
+template<typename T, typename R>
+void Application<T, R>::tick()
+{
+       display.tick();
+       director.tick();
+}
+
+} // namespace Msp::GameView
+
+#endif