]> git.tdb.fi Git - libs/game.git/blob - source/gameview/application.h
Add infrastructure for receiving player input
[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 "playerinput.h"
11 #include "presenter.h"
12
13 namespace Msp::GameView {
14
15 template<typename T, typename R>
16 class Application: public Msp::RegisteredApplication<T>
17 {
18 public:
19         using ResourcesType = R;
20
21 protected:
22         Msp::Graphics::Display display;
23         Msp::Graphics::Window window;
24         GL::Device gl_device;
25         ResourcesType resources;
26         Msp::Game::Director director;
27         GL::WindowView gl_view;
28         Presenter presenter;
29         PlayerInput player_input;
30
31 public:
32         Application();
33
34         int main() override;
35 protected:
36         void tick() override;
37 };
38
39 template<typename T, typename R>
40 Application<T, R>::Application():
41         window(display, 1920, 1080),
42         gl_device(window),
43         director(resources),
44         gl_view(window),
45         presenter(director, gl_view),
46         player_input(director, window)
47 {
48         window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &Application::exit), 0));
49 }
50
51 template<typename T, typename R>
52 int Application<T, R>::main()
53 {
54         window.show();
55         return Msp::Application::main();
56 }
57
58 template<typename T, typename R>
59 void Application<T, R>::tick()
60 {
61         display.tick();
62         director.tick();
63 }
64
65 } // namespace Msp::GameView
66
67 #endif