]> git.localhorst.tv Git - blank.git/blob - src/app/WorldState.cpp
try to get every chunk change saved to disk
[blank.git] / src / app / WorldState.cpp
1 #include "WorldState.hpp"
2
3 #include "Environment.hpp"
4 #include "UnloadState.hpp"
5
6 #include <SDL.h>
7
8
9 namespace blank {
10
11 WorldState::WorldState(
12         Environment &env,
13         const Interface::Config &ic,
14         const World::Config &wc,
15         const WorldSave &save
16 )
17 : env(env)
18 , world(env.assets, wc, save)
19 , spawner(world)
20 , interface(ic, env, world) {
21
22 }
23
24
25 void WorldState::Handle(const SDL_Event &event) {
26         switch (event.type) {
27                 case SDL_KEYDOWN:
28                         interface.HandlePress(event.key);
29                         break;
30                 case SDL_KEYUP:
31                         interface.HandleRelease(event.key);
32                         break;
33                 case SDL_MOUSEBUTTONDOWN:
34                         interface.HandlePress(event.button);
35                         break;
36                 case SDL_MOUSEBUTTONUP:
37                         interface.HandleRelease(event.button);
38                         break;
39                 case SDL_MOUSEMOTION:
40                         interface.Handle(event.motion);
41                         break;
42                 case SDL_MOUSEWHEEL:
43                         interface.Handle(event.wheel);
44                         break;
45                 case SDL_QUIT:
46                         // don't care about this leak just now
47                         env.state.Switch(new UnloadState(env, world.Loader()));
48                         break;
49                 default:
50                         break;
51         }
52 }
53
54 void WorldState::Update(int dt) {
55         interface.Update(dt);
56         spawner.Update(dt);
57         world.Update(dt);
58
59         glm::mat4 trans = world.Player().Transform(Chunk::Pos(0, 0, 0));
60         glm::vec3 dir(trans * glm::vec4(0.0f, 0.0f, -1.0f, 0.0f));
61         glm::vec3 up(trans * glm::vec4(0.0f, 1.0f, 0.0f, 0.0f));
62         env.audio.Position(world.Player().Position());
63         env.audio.Velocity(world.Player().Velocity());
64         env.audio.Orientation(dir, up);
65
66 }
67
68 void WorldState::Render(Viewport &viewport) {
69         world.Render(viewport);
70         interface.Render(viewport);
71 }
72
73 }