]> git.localhorst.tv Git - blank.git/blob - src/app/Application.hpp
some code reorganization
[blank.git] / src / app / Application.hpp
1 #ifndef BLANK_APP_APPLICATION_HPP_
2 #define BLANK_APP_APPLICATION_HPP_
3
4 #include "init.hpp"
5 #include "RandomWalk.hpp"
6 #include "../graphics/BlockLighting.hpp"
7 #include "../graphics/Camera.hpp"
8 #include "../graphics/DirectionalLighting.hpp"
9 #include "../ui/Interface.hpp"
10 #include "../world/World.hpp"
11
12
13 namespace blank {
14
15 class Application {
16
17 public:
18         struct Config {
19                 bool vsync = true;
20                 bool doublebuf = true;
21                 int multisampling = 1;
22
23                 Interface::Config interface = Interface::Config();
24                 World::Config world = World::Config();
25         };
26
27         explicit Application(const Config &);
28
29         Application(const Application &) = delete;
30         Application &operator =(const Application &) = delete;
31
32         /// run until user quits
33         void Run();
34         void Loop(int dt);
35
36         /// run for n frames
37         void RunN(size_t n);
38         /// run for t milliseconds
39         void RunT(size_t t);
40         /// run for n frames, assuming t milliseconds for each
41         void RunS(size_t n, size_t t);
42
43         void HandleEvents();
44         void Update(int dt);
45         void Render();
46
47         static Entity &MakeTestEntity(World &);
48
49 private:
50         InitSDL init_sdl;
51         InitIMG init_img;
52         InitGL init_gl;
53         Window window;
54         GLContext ctx;
55         InitGLEW init_glew;
56         BlockLighting chunk_prog;
57         DirectionalLighting entity_prog;
58
59         Camera cam;
60         World world;
61         Interface interface;
62
63         RandomWalk test_controller;
64
65         bool running;
66
67 };
68
69 }
70
71 #endif