From e451a4f3a3dcc16f8377f1b2a0098436463ac5bb Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 8 Jan 2026 22:43:20 +0300 Subject: [PATCH] add explicit 'solid' block property --- res/scripts/post_content.lua | 2 +- src/content/ContentBuilder.cpp | 8 ++++++-- src/content/loading/BlockLoader.cpp | 1 + src/graphics/render/BlocksRenderer.cpp | 2 +- src/voxels/Block.hpp | 3 +++ 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/res/scripts/post_content.lua b/res/scripts/post_content.lua index b512882d7..b6ca05598 100644 --- a/res/scripts/post_content.lua +++ b/res/scripts/post_content.lua @@ -7,7 +7,7 @@ local names = { "hidden", "draw-group", "picking-item", "surface-replacement", "script-name", "ui-layout", "inventory-size", "tick-interval", "overlay-texture", "translucent", "fields", "particles", "icon-type", "icon", "placing-block", - "stack-size", "name", "script-file", "culling" + "stack-size", "name", "script-file", "culling", "solid" } for name, _ in pairs(user_props) do table.insert(names, name) diff --git a/src/content/ContentBuilder.cpp b/src/content/ContentBuilder.cpp index 5eb639b1a..d32cb2860 100644 --- a/src/content/ContentBuilder.cpp +++ b/src/content/ContentBuilder.cpp @@ -34,11 +34,15 @@ std::unique_ptr ContentBuilder::build() { if (def.variants) { for (auto& variant : def.variants->variants) { - variant.rt.solid = variant.model.type == BlockModelType::BLOCK; + variant.rt.solid = + variant.model.type == BlockModelType::BLOCK || + def.explictlySolid; } def.defaults = def.variants->variants.at(0); } else { - def.defaults.rt.solid = def.defaults.model.type == BlockModelType::BLOCK; + def.defaults.rt.solid = + def.defaults.model.type == BlockModelType::BLOCK || + def.explictlySolid; } const float EPSILON = 0.01f; diff --git a/src/content/loading/BlockLoader.cpp b/src/content/loading/BlockLoader.cpp index 6866443bc..87c10fa67 100644 --- a/src/content/loading/BlockLoader.cpp +++ b/src/content/loading/BlockLoader.cpp @@ -227,6 +227,7 @@ template<> void ContentUnitLoader::loadUnit( root.at("tick-interval").get(def.tickInterval); root.at("overlay-texture").get(def.overlayTexture); root.at("translucent").get(def.translucent); + root.at("solid").get(def.explictlySolid); if (root.has("fields")) { def.dataStruct = std::make_unique(); diff --git a/src/graphics/render/BlocksRenderer.cpp b/src/graphics/render/BlocksRenderer.cpp index 5cc0bb525..1980a5d97 100644 --- a/src/graphics/render/BlocksRenderer.cpp +++ b/src/graphics/render/BlocksRenderer.cpp @@ -331,7 +331,7 @@ void BlocksRenderer::blockCustomModel( if (!block.rt.extended && !isOpen(glm::floor(coord + vp + 0.5f + n * 1e-3f), block, variant) - && is_aligned(n)) { + /*&& is_aligned(n)*/) { continue; } diff --git a/src/voxels/Block.hpp b/src/voxels/Block.hpp index 29eda2494..96620c8f9 100644 --- a/src/voxels/Block.hpp +++ b/src/voxels/Block.hpp @@ -230,6 +230,9 @@ public: /// @brief Block has semi-transparent texture bool translucent = false; + /// @brief Explicitly overriding 'solid' property if true assigned + bool explictlySolid = false; + /// @brief Set of block physical hitboxes std::vector hitboxes {AABB()};