]> git.tdb.fi Git - libs/game.git/blob - source/gameview/application.h
Add a view sub-library, including a Camera component
[libs/game.git] / source / gameview / application.h
1 #ifndef MSP_GAMEVIEW_APPLICATION_H_
2 #define MSP_GAMEVIEW_APPLICATION_H_
3
4 #include <msp/core/application.h>
5 #include <msp/game/director.h>
6 #include <msp/gl/device.h>
7 #include <msp/gl/windowview.h>
8 #include <msp/graphics/display.h>
9 #include <msp/graphics/window.h>
10 #include "presenter.h"
11
12 namespace Msp::GameView {
13
14 template<typename T, typename R>
15 class Application: public Msp::RegisteredApplication<T>
16 {
17 public:
18         using ResourcesType = R;
19
20 protected:
21         Msp::Graphics::Display display;
22         Msp::Graphics::Window window;
23         GL::Device gl_device;
24         ResourcesType resources;
25         Msp::Game::Director director;
26         GL::WindowView gl_view;
27         Presenter presenter;
28
29 public:
30         Application();
31
32         int main() override;
33 protected:
34         void tick() override;
35 };
36
37 template<typename T, typename R>
38 Application<T, R>::Application():
39         window(display, 1920, 1080),
40         gl_device(window),
41         director(resources),
42         gl_view(window),
43         presenter(director, gl_view)
44 {
45         window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &Application::exit), 0));
46 }
47
48 template<typename T, typename R>
49 int Application<T, R>::main()
50 {
51         window.show();
52         return Msp::Application::main();
53 }
54
55 template<typename T, typename R>
56 void Application<T, R>::tick()
57 {
58         display.tick();
59         director.tick();
60 }
61
62 } // namespace Msp::GameView
63
64 #endif