diff --git a/res/content/base/scripts/world.lua b/res/content/base/scripts/world.lua index 4b78a3f1..7f468c29 100644 --- a/res/content/base/scripts/world.lua +++ b/res/content/base/scripts/world.lua @@ -1,6 +1,11 @@ function on_block_broken(id, x, y, z, playerid) if gfx then - gfx.particles.emit({x+0.5, y+0.5, z+0.5}, 64, { + local size = {block.get_size(id)} + gfx.particles.emit({ + x + size[1] * 0.5, + y + size[1] * 0.5, + z + size[1] * 0.5 + }, 64, { lifetime=1.0, spawn_interval=0.0001, explosion={4, 4, 4}, @@ -8,7 +13,7 @@ function on_block_broken(id, x, y, z, playerid) random_sub_uv=0.1, size={0.1, 0.1, 0.1}, spawn_shape="box", - spawn_spread={0.4, 0.4, 0.4} + spawn_spread=vec3.mul(size, 0.4) }) end diff --git a/src/graphics/render/ModelsGenerator.cpp b/src/graphics/render/ModelsGenerator.cpp index a5782f95..b4f42348 100644 --- a/src/graphics/render/ModelsGenerator.cpp +++ b/src/graphics/render/ModelsGenerator.cpp @@ -6,6 +6,7 @@ #include "voxels/Block.hpp" #include "content/Content.hpp" #include "debug/Logger.hpp" +#include "core_defs.hpp" static debug::Logger logger("models-generator"); @@ -67,11 +68,18 @@ void ModelsGenerator::prepareModel( } else { auto srcModel = assets.get(blockModel.name); if (srcModel) { + bool defaultAssigned = variant.textureFaces[0] != TEXTURE_NOTFOUND; auto model = std::make_unique(*srcModel); for (auto& mesh : model->meshes) { if (mesh.texture.length() && mesh.texture[0] == '$') { int index = std::stoll(mesh.texture.substr(1)); mesh.texture = "blocks:" + variant.textureFaces[index]; + } else if (!defaultAssigned && !mesh.texture.empty()) { + size_t sepPos = mesh.texture.find(':'); + if (sepPos == std::string::npos) + continue; + variant.textureFaces[0] = mesh.texture.substr(sepPos + 1); + defaultAssigned = true; } } blockModel.name = modelName;