]> git.localhorst.tv Git - blank.git/blob - src/app/Application.hpp
some experiments with sound
[blank.git] / src / app / Application.hpp
1 #ifndef BLANK_APP_APPLICATION_HPP_
2 #define BLANK_APP_APPLICATION_HPP_
3
4 #include "Assets.hpp"
5 #include "FrameCounter.hpp"
6 #include "init.hpp"
7 #include "RandomWalk.hpp"
8 #include "../audio/Audio.hpp"
9 #include "../graphics/Viewport.hpp"
10 #include "../ui/Interface.hpp"
11 #include "../world/World.hpp"
12
13 #include <SDL.h>
14
15
16 namespace blank {
17
18 class Application {
19
20 public:
21         struct Config {
22                 bool vsync = true;
23                 bool doublebuf = true;
24                 int multisampling = 1;
25
26                 Interface::Config interface = Interface::Config();
27                 World::Config world = World::Config();
28         };
29
30         explicit Application(const Config &);
31         ~Application();
32
33         Application(const Application &) = delete;
34         Application &operator =(const Application &) = delete;
35
36         /// run until user quits
37         void Run();
38         /// evaluate a single frame of dt milliseconds
39         void Loop(int dt);
40
41         /// run for n frames
42         void RunN(size_t n);
43         /// run for t milliseconds
44         void RunT(size_t t);
45         /// run for n frames, assuming t milliseconds for each
46         void RunS(size_t n, size_t t);
47
48         /// process all events in SDL's queue
49         void HandleEvents();
50         void Handle(const SDL_WindowEvent &);
51         /// integrate to the next step with dt milliseconds passed
52         void Update(int dt);
53         /// push the current state to display
54         void Render();
55
56         static Entity &MakeTestEntity(World &);
57
58 private:
59         Init init;
60         Viewport viewport;
61         Assets assets;
62         Audio audio;
63         FrameCounter counter;
64
65         World world;
66         Interface interface;
67
68         RandomWalk test_controller;
69
70         bool running;
71
72 };
73
74 }
75
76 #endif