#include "Environment.hpp"
#include "../world/ChunkLoader.hpp"
-
-#include <iostream>
+#include "../world/ChunkRenderer.hpp"
namespace blank {
-PreloadState::PreloadState(Environment &env, ChunkLoader &loader)
+PreloadState::PreloadState(Environment &env, ChunkLoader &loader, ChunkRenderer &render)
: env(env)
, loader(loader)
-, per_update(256) {
-
+, render(render)
+, progress(env.assets.large_ui_font)
+, total(loader.ToLoad())
+, per_update(64) {
+ progress.Position(glm::vec3(0.0f), Gravity::CENTER);
+ progress.Template("Preloading chunks: %d/%d (%d%%)");
}
-void PreloadState::Handle(const SDL_Event &) {
+void PreloadState::Handle(const SDL_Event &e) {
+ if (e.type == SDL_QUIT) {
+ env.state.PopAll();
+ }
}
void PreloadState::Update(int dt) {
loader.LoadN(per_update);
- if (loader.ToLoad() == 0) {
- std::cout << "preload: populating VBOs" << std::endl;
- for (auto &chunk : loader.Loaded()) {
- chunk.CheckUpdate();
- }
- std::cout << "preload: complete" << std::endl;
+ if (loader.ToLoad() <= 0) {
env.state.Pop();
+ render.Update(render.MissingChunks());
+ } else {
+ progress.Update(total - loader.ToLoad(), total);
}
}
-void PreloadState::Render(Viewport &) {
- // TODO: make a nice progress bar or some other fancy shit
- std::cout << "preload: " << loader.ToLoad() << " chunks remaining" << std::endl;
+void PreloadState::Render(Viewport &viewport) {
+ progress.Render(viewport);
}
}