show-chunk-borders is a setting now

This commit is contained in:
MihailRis 2023-11-24 19:39:45 +03:00
parent f54283cab1
commit 48b6c92472
6 changed files with 23 additions and 19 deletions

View File

@ -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;
}

View File

@ -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"));

View File

@ -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();

View File

@ -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();
}

View File

@ -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;}
};

View File

@ -45,6 +45,7 @@ struct GraphicsSettings {
struct DebugSettings {
/* Turns off chunks saving/loading */
bool generatorTestMode = false;
bool showChunkBorders = false;
};
struct EngineSettings {