From 29021d11787119564b08d46d574118917cc86ca5 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 14 Jul 2025 00:02:29 +0300 Subject: [PATCH] refactor a bit --- src/assets/AssetsLoader.cpp | 3 ++- src/content/ContentBuilder.cpp | 6 ++++-- src/content/loading/BlockLoader.cpp | 4 +++- src/frontend/ContentGfxCache.cpp | 3 ++- src/voxels/Block.cpp | 1 + src/voxels/Block.hpp | 3 ++- 6 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/assets/AssetsLoader.cpp b/src/assets/AssetsLoader.cpp index 971e754d..8dc7c31c 100644 --- a/src/assets/AssetsLoader.cpp +++ b/src/assets/AssetsLoader.cpp @@ -272,11 +272,12 @@ void AssetsLoader::addDefaults(AssetsLoader& loader, const Content* content) { } } for (const auto& [_, def] : content->blocks.getDefs()) { - add_variant(loader, def->defaults); if (def->variants) { for (const auto& variant : def->variants->variants) { add_variant(loader, variant); } + } else { + add_variant(loader, def->defaults); } } for (const auto& [_, def] : content->items.getDefs()) { diff --git a/src/content/ContentBuilder.cpp b/src/content/ContentBuilder.cpp index 6f4b02a2..5c802030 100644 --- a/src/content/ContentBuilder.cpp +++ b/src/content/ContentBuilder.cpp @@ -29,13 +29,15 @@ std::unique_ptr ContentBuilder::build() { def.rt.id = blockDefsIndices.size(); def.rt.emissive = *reinterpret_cast(def.emission); - // TODO: refactor - def.defaults.rt.solid = def.defaults.model.type == BlockModelType::BLOCK; if (def.variants) { for (auto& variant : def.variants->variants) { variant.rt.solid = variant.model.type == BlockModelType::BLOCK; } + def.defaults = def.variants->variants.at(0); + } else { + def.defaults.rt.solid = def.defaults.model.type == BlockModelType::BLOCK; } + const float EPSILON = 0.01f; def.rt.solid = glm::i8vec3(def.hitboxes[0].size() + EPSILON) == def.size; def.rt.extended = def.size.x > 1 || def.size.y > 1 || def.size.z > 1; diff --git a/src/content/loading/BlockLoader.cpp b/src/content/loading/BlockLoader.cpp index 4d13c4c0..ebe1fe60 100644 --- a/src/content/loading/BlockLoader.cpp +++ b/src/content/loading/BlockLoader.cpp @@ -122,6 +122,7 @@ template<> void ContentUnitLoader::loadUnit( if (stateBased.has("variants")) { const auto& variants = stateBased["variants"]; def.variants = std::make_unique(); + def.variants->variants.push_back(def.defaults); for (int i = 0; i < variants.size(); i++) { Variant variant = def.defaults; load_variant(variant, variants[i], name); @@ -198,7 +199,8 @@ template<> void ContentUnitLoader::loadUnit( "block " + util::quote(def.name) + ": invalid block size" ); } - // FIXME + + // should variant modify hitbox? if (def.defaults.model.type == BlockModelType::BLOCK && (def.size.x != 1 || def.size.y != 1 || def.size.z != 1)) { def.defaults.model.type = BlockModelType::AABB; diff --git a/src/frontend/ContentGfxCache.cpp b/src/frontend/ContentGfxCache.cpp index 85d484ba..18645259 100644 --- a/src/frontend/ContentGfxCache.cpp +++ b/src/frontend/ContentGfxCache.cpp @@ -66,9 +66,10 @@ void ContentGfxCache::refresh(const Block& def, const Atlas& atlas) { refresh_variant(assets, def, def.defaults, 0, sideregions, atlas, settings, models); if (def.variants) { const auto& variants = def.variants->variants; - for (int i = 0; i < variants.size() - 1; i++) { + for (int i = 1; i < variants.size() - 1; i++) { refresh_variant(assets, def, variants[i], i + 1, sideregions, atlas, settings, models); } + def.variants->variants.at(0) = def.defaults; } } diff --git a/src/voxels/Block.cpp b/src/voxels/Block.cpp index 559dd3c2..4685dfb6 100644 --- a/src/voxels/Block.cpp +++ b/src/voxels/Block.cpp @@ -128,6 +128,7 @@ void Block::cloneTo(Block& dst) { for (int i = 0; i < 6; i++) { dst.defaults = defaults; } + dst.defaults = defaults; if (variants) { dst.variants = std::make_unique(*variants); } diff --git a/src/voxels/Block.hpp b/src/voxels/Block.hpp index 37dc2156..f5a467c3 100644 --- a/src/voxels/Block.hpp +++ b/src/voxels/Block.hpp @@ -161,6 +161,7 @@ struct Variant { }; struct Variants { + /// First variant is copy of Block::defaults util::stack_vector variants {}; }; @@ -294,7 +295,7 @@ public: constexpr const Variant& getVariant(uint8_t bits) const { if (bits == 0 || variants == nullptr) return defaults; - return variants->variants[(bits - 1) % BLOCK_MAX_VARIANTS]; + return variants->variants[bits % BLOCK_MAX_VARIANTS]; } constexpr const BlockModel& getModel(uint8_t bits) const {