diff --git a/src/files/settings_io.cpp b/src/files/settings_io.cpp index 27cf59c3..32002988 100644 --- a/src/files/settings_io.cpp +++ b/src/files/settings_io.cpp @@ -32,6 +32,7 @@ toml::Wrapper create_wrapper(EngineSettings& settings) { toml::Section& debug = wrapper.add("debug"); debug.add("generator-test-mode", &settings.debug.generatorTestMode); + debug.add("show-chunk-borders", &settings.debug.showChunkBorders); return wrapper; } diff --git a/src/frontend/hud.cpp b/src/frontend/hud.cpp index f6d47dd3..b7e1c656 100644 --- a/src/frontend/hud.cpp +++ b/src/frontend/hud.cpp @@ -51,7 +51,10 @@ inline Label* create_label(gui::wstringsupplier supplier) { return label; } -HudRenderer::HudRenderer(Engine* engine, Level* level, const ContentGfxCache* cache, WorldRenderer* renderer) +HudRenderer::HudRenderer(Engine* engine, + Level* level, + const ContentGfxCache* cache, + WorldRenderer* renderer) : level(level), assets(engine->getAssets()), gui(engine->getGUI()), @@ -143,10 +146,10 @@ HudRenderer::HudRenderer(Engine* engine, Level* level, const ContentGfxCache* ca CheckBox* checkbox = new CheckBox(); checkbox->margin(vec4(0.0f, 0.0f, 5.0f, 0.0f)); checkbox->supplier([=]() { - return renderer->isChunkBordersOn(); + return engine->getSettings().debug.showChunkBorders; }); checkbox->consumer([=](bool checked) { - renderer->setChunkBorders(checked); + engine->getSettings().debug.showChunkBorders = checked; }); checkpanel->add(checkbox); checkpanel->add(new Label(L"Show Chunk Borders")); diff --git a/src/frontend/hud.h b/src/frontend/hud.h index cf727adf..b0608f08 100644 --- a/src/frontend/hud.h +++ b/src/frontend/hud.h @@ -40,7 +40,10 @@ class HudRenderer { const ContentGfxCache* const cache; WorldRenderer* renderer; public: - HudRenderer(Engine* engine, Level* level, const ContentGfxCache* cache, WorldRenderer* renderer); + HudRenderer(Engine* engine, + Level* level, + const ContentGfxCache* cache, + WorldRenderer* renderer); ~HudRenderer(); void update(); diff --git a/src/frontend/world_render.cpp b/src/frontend/world_render.cpp index d2654388..dd2bdddd 100644 --- a/src/frontend/world_render.cpp +++ b/src/frontend/world_render.cpp @@ -174,23 +174,23 @@ void WorldRenderer::draw(const GfxContext& pctx, Camera* camera, bool occlusion) float length = 40.f; linesShader->use(); - if (chunkBorders){ + if (engine->getSettings().debug.showChunkBorders){ linesShader->uniformMatrix("u_projview", camera->getProjView()); GfxContext ctx = pctx.sub(); ctx.depthTest(true); vec3 coord = level->player->camera->position; int cx = floordiv((int)coord.x, CHUNK_W); int cz = floordiv((int)coord.z, CHUNK_D); - for (int xx = 0; xx < CHUNK_W; xx++) { - lineBatch->line(cx * CHUNK_W + xx, 0, cz * CHUNK_D, - cx * CHUNK_W + xx, CHUNK_H, cz * CHUNK_D, 0,0,1,0.5f); - lineBatch->line(cx * CHUNK_W + xx, 0, (cz+1) * CHUNK_D, - cx * CHUNK_W + xx, CHUNK_H, (cz+1) * CHUNK_D, 0,0,1,0.5f); + for (int i = 0; i < CHUNK_W; i++) { + lineBatch->line(cx * CHUNK_W + i, 0, cz * CHUNK_D, + cx * CHUNK_W + i, CHUNK_H, cz * CHUNK_D, 0,0,1,0.5f); + lineBatch->line(cx * CHUNK_W + i, 0, (cz+1) * CHUNK_D, + cx * CHUNK_W + i, CHUNK_H, (cz+1) * CHUNK_D, 0,0,1,0.5f); - lineBatch->line(cx * CHUNK_W, 0, cz * CHUNK_D+xx, - cx * CHUNK_W, CHUNK_H, cz * CHUNK_D+xx, 1,0,0,0.5f); - lineBatch->line((cx+1) * CHUNK_W, 0, cz * CHUNK_D+xx, - (cx+1) * CHUNK_W, CHUNK_H, cz * CHUNK_D+xx, 1,0,0,0.5f); + lineBatch->line(cx * CHUNK_W, 0, cz * CHUNK_D+i, + cx * CHUNK_W, CHUNK_H, cz * CHUNK_D+i, 1,0,0,0.5f); + lineBatch->line((cx+1) * CHUNK_W, 0, cz * CHUNK_D+i, + (cx+1) * CHUNK_W, CHUNK_H, cz * CHUNK_D+i, 1,0,0,0.5f); } lineBatch->render(); } diff --git a/src/frontend/world_render.h b/src/frontend/world_render.h index 2dd75e73..44f72c9b 100644 --- a/src/frontend/world_render.h +++ b/src/frontend/world_render.h @@ -29,20 +29,16 @@ class WorldRenderer { Frustum* frustumCulling; LineBatch* lineBatch; ChunksRenderer* renderer; - bool chunkBorders = false; bool drawChunk(size_t index, Camera* camera, Shader* shader, bool occlusion); void drawChunks(Chunks* chunks, Camera* camera, Shader* shader, bool occlusion); public: float skyLightMutliplier = 1.0f; // will be replaced with day-night cycle - + WorldRenderer(Engine* engine, Level* level, const ContentGfxCache* cache); ~WorldRenderer(); void draw(const GfxContext& context, Camera* camera, bool occlusion); void drawDebug(const GfxContext& context, Camera* camera); - - inline bool isChunkBordersOn() {return chunkBorders;} - inline void setChunkBorders(bool flag) {chunkBorders = flag;} }; diff --git a/src/settings.h b/src/settings.h index f683b30d..0d8f4de3 100644 --- a/src/settings.h +++ b/src/settings.h @@ -45,6 +45,7 @@ struct GraphicsSettings { struct DebugSettings { /* Turns off chunks saving/loading */ bool generatorTestMode = false; + bool showChunkBorders = false; }; struct EngineSettings {