diff --git a/src/frontend/WorldRenderer.cpp b/src/frontend/WorldRenderer.cpp index c562f8a4..e065542c 100644 --- a/src/frontend/WorldRenderer.cpp +++ b/src/frontend/WorldRenderer.cpp @@ -128,7 +128,7 @@ void WorldRenderer::drawChunks(Chunks* chunks, void WorldRenderer::draw(const GfxContext& pctx, Camera* camera){ EngineSettings& settings = engine->getSettings(); skybox->refresh(level->world->daytime, - fmax(1.0f, 10.0f/(settings.chunks.loadDistance-2)), 4); + fmax(1.0f, 10.0f/(settings.chunks.loadDistance-2))+fog*2.0f, 4); const Content* content = level->content; const ContentIndices* contentIds = content->indices; @@ -290,4 +290,6 @@ void WorldRenderer::drawBorders(int sx, int sy, int sz, int ex, int ey, int ez) sx, i, sz, 0, 0.8f, 0, 1); } lineBatch->render(); -} \ No newline at end of file +} + +float WorldRenderer::fog = 0.0f; \ No newline at end of file diff --git a/src/frontend/WorldRenderer.h b/src/frontend/WorldRenderer.h index fc5c4b4e..fda717b4 100644 --- a/src/frontend/WorldRenderer.h +++ b/src/frontend/WorldRenderer.h @@ -40,6 +40,8 @@ public: void draw(const GfxContext& context, Camera* camera); void drawDebug(const GfxContext& context, Camera* camera); void drawBorders(int sx, int sy, int sz, int ex, int ey, int ez); + + static float fog; }; diff --git a/src/frontend/hud.cpp b/src/frontend/hud.cpp index ef97acd2..036f4072 100644 --- a/src/frontend/hud.cpp +++ b/src/frontend/hud.cpp @@ -56,14 +56,12 @@ inline Label* create_label(gui::wstringsupplier supplier) { HudRenderer::HudRenderer(Engine* engine, Level* level, - const ContentGfxCache* cache, - WorldRenderer* renderer) + const ContentGfxCache* cache) : level(level), assets(engine->getAssets()), batch(new Batch2D(1024)), gui(engine->getGUI()), - cache(cache), - renderer(renderer) { + cache(cache) { auto menu = gui->getMenu(); blocksPreview = new BlocksPreview(assets->getShader("ui3d"), assets->getAtlas("blocks"), @@ -160,6 +158,16 @@ HudRenderer::HudRenderer(Engine* engine, }); panel->add(bar); } + { + TrackBar* bar = new TrackBar(0.0f, 1.0f, 0.0f, 0.005f, 8); + bar->supplier([=]() { + return WorldRenderer::fog; + }); + bar->consumer([=](double val) { + WorldRenderer::fog = val; + }); + panel->add(bar); + } { Panel* checkpanel = new Panel(vec2(400, 32), vec4(5.0f), 1.0f); checkpanel->color(vec4(0.0f)); diff --git a/src/frontend/hud.h b/src/frontend/hud.h index 9d2e7f2e..b7df1267 100644 --- a/src/frontend/hud.h +++ b/src/frontend/hud.h @@ -42,13 +42,10 @@ class HudRenderer { std::shared_ptr debugPanel; gui::GUI* gui; const ContentGfxCache* const cache; - WorldRenderer* renderer; - public: HudRenderer(Engine* engine, Level* level, - const ContentGfxCache* cache, - WorldRenderer* renderer); + const ContentGfxCache* cache); ~HudRenderer(); void update(); diff --git a/src/frontend/screens.cpp b/src/frontend/screens.cpp index 9855cde7..0eb07e27 100644 --- a/src/frontend/screens.cpp +++ b/src/frontend/screens.cpp @@ -96,7 +96,7 @@ LevelScreen::LevelScreen(Engine* engine, Level* level) controller = new LevelController(settings, level); cache = new ContentGfxCache(level->content, engine->getAssets()); worldRenderer = new WorldRenderer(engine, level, cache); - hud = new HudRenderer(engine, level, cache, worldRenderer); + hud = new HudRenderer(engine, level, cache); backlight = settings.graphics.backlight; } diff --git a/src/graphics/BlocksRenderer.cpp b/src/graphics/BlocksRenderer.cpp index fcd72ad8..32ed4e32 100644 --- a/src/graphics/BlocksRenderer.cpp +++ b/src/graphics/BlocksRenderer.cpp @@ -251,21 +251,18 @@ void BlocksRenderer::blockCubeShaded(const ivec3& icoord, coord += orient.fix; loff -= orient.fix; } - - vec3 fX(X); - vec3 fY(Y); vec3 fZ(Z); - vec3 local = offset.x*vec3(X)+offset.y*vec3(Y)+offset.z*vec3(-Z); - //local -= loff; + vec3 local = offset.x*vec3(X)+offset.y*vec3(Y)+offset.z*-fZ; + face(coord, X, Y, Z, Z+loff, local-size.z*fZ, size.x, size.y, size.z, texfaces[5]); face(coord+X, -X, Y, -Z, Z-Z-X+loff, local-size.z*fZ, size.x, size.y, 0.0f, texfaces[4]); - face(coord+Y, X, -Z, Y, Y-Y+loff, local, size.x, size.z, 0.0f, texfaces[3]); //; - face(coord+X, -X, -Z, -Y, -Y+Z+loff, local, size.x, size.z, 0.0f, texfaces[2]); //; + face(coord+Y, X, -Z, Y, Y-Y+loff, local, size.x, size.z, 0.0f, texfaces[3]); + face(coord+X, -X, -Z, -Y, -X-Y+loff, local, size.x, size.z, 0.0f, texfaces[2]); - face(coord+X, -Z, Y, X, X-X+loff, local, size.z, size.y, 0.0f, texfaces[1]); //; - face(coord+Y, -Z, -Y, -X, -X+Z+loff, local, size.z, size.y, 0.0f, texfaces[0]); //; + face(coord+X, -Z, Y, X, X-X+loff, local, size.z, size.y, 0.0f, texfaces[1]); + face(coord+Y, -Z, -Y, -X, -X-Y-Z+loff, local, size.z, size.y, 0.0f, texfaces[0]); } /* Fastest solid shaded blocks render method */