]> git.localhorst.tv Git - blank.git/blob - src/app/PreloadState.cpp
try to get every chunk change saved to disk
[blank.git] / src / app / PreloadState.cpp
1 #include "PreloadState.hpp"
2
3 #include "Environment.hpp"
4 #include "../world/ChunkLoader.hpp"
5
6
7 namespace blank {
8
9 PreloadState::PreloadState(Environment &env, ChunkLoader &loader)
10 : env(env)
11 , loader(loader)
12 , font(env.assets.LoadFont("DejaVuSans", 24))
13 , progress(font)
14 , total(loader.ToLoad())
15 , per_update(64) {
16         progress.Position(glm::vec3(0.0f), Gravity::CENTER);
17         progress.Template("Preloading chunks: %d/%d (%d%%)");
18 }
19
20
21 void PreloadState::Handle(const SDL_Event &e) {
22         if (e.type == SDL_QUIT) {
23                 env.state.PopAll();
24         }
25 }
26
27 void PreloadState::Update(int dt) {
28         loader.LoadN(per_update);
29         if (loader.ToLoad() == 0) {
30                 for (auto &chunk : loader.Loaded()) {
31                         chunk.CheckUpdate();
32                 }
33                 env.state.Pop();
34         } else {
35                 progress.Update(total - loader.ToLoad(), total);
36         }
37 }
38
39 void PreloadState::Render(Viewport &viewport) {
40         progress.Render(viewport);
41 }
42
43 }