From cd630463b3ad1f6a02691fd3a48426bbd52c328f Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 22 Nov 2024 11:08:36 +0300 Subject: [PATCH 01/17] add block.properties, item.properties (experimental) --- src/content/ContentLoader.cpp | 2 ++ src/items/ItemDef.hpp | 3 +++ src/logic/scripting/scripting.cpp | 24 ++++++++++++++++++++++++ src/voxels/Block.hpp | 2 ++ 4 files changed, 31 insertions(+) diff --git a/src/content/ContentLoader.cpp b/src/content/ContentLoader.cpp index 0f8bf6a2..1e954a55 100644 --- a/src/content/ContentLoader.cpp +++ b/src/content/ContentLoader.cpp @@ -191,6 +191,7 @@ void ContentLoader::loadBlock( Block& def, const std::string& name, const fs::path& file ) { auto root = files::read_json(file); + def.properties = root; if (root.has("parent")) { const auto& parentName = root["parent"].asString(); @@ -360,6 +361,7 @@ void ContentLoader::loadItem( ItemDef& def, const std::string& name, const fs::path& file ) { auto root = files::read_json(file); + def.properties = root; if (root.has("parent")) { const auto& parentName = root["parent"].asString(); diff --git a/src/items/ItemDef.hpp b/src/items/ItemDef.hpp index 999b190f..7a2ef8d1 100644 --- a/src/items/ItemDef.hpp +++ b/src/items/ItemDef.hpp @@ -3,6 +3,7 @@ #include #include +#include "data/dv.hpp" #include "typedefs.hpp" struct item_funcs_set { @@ -25,6 +26,8 @@ struct ItemDef { /// @brief Item name will shown in inventory std::string caption; + dv::value properties = nullptr; + itemcount_t stackSize = 64; bool generated = false; uint8_t emission[4] {0, 0, 0, 0}; diff --git a/src/logic/scripting/scripting.cpp b/src/logic/scripting/scripting.cpp index 0778fd45..99be18c4 100644 --- a/src/logic/scripting/scripting.cpp +++ b/src/logic/scripting/scripting.cpp @@ -157,10 +157,26 @@ void scripting::process_post_runnables() { } } +template +static int push_properties_tables( + lua::State* L, const ContentUnitIndices& indices +) { + const auto units = indices.getDefs(); + size_t size = indices.count(); + lua::createtable(L, size, 0); + for (size_t i = 0; i < size; i++) { + lua::pushvalue(L, units[i]->properties); + lua::rawseti(L, i); + } + return 1; +} + void scripting::on_content_load(Content* content) { scripting::content = content; scripting::indices = content->getIndices(); + const auto& indices = *content->getIndices(); + auto L = lua::get_main_state(); if (lua::getglobal(L, "block")) { const auto& materials = content->getBlockMaterials(); @@ -170,6 +186,14 @@ void scripting::on_content_load(Content* content) { lua::setfield(L, name); } lua::setfield(L, "materials"); + + push_properties_tables(L, indices.blocks); + lua::setfield(L, "properties"); + lua::pop(L); + } + if (lua::getglobal(L, "item")) { + push_properties_tables(L, indices.blocks); + lua::setfield(L, "properties"); lua::pop(L); } } diff --git a/src/voxels/Block.hpp b/src/voxels/Block.hpp index 4fe51b0d..79b739e5 100644 --- a/src/voxels/Block.hpp +++ b/src/voxels/Block.hpp @@ -119,6 +119,8 @@ public: /// @brief Textures set applied to block sides std::array textureFaces; // -x,x, -y,y, -z,z + dv::value properties = nullptr; + /// @brief id of used BlockMaterial, may specify non-existing material std::string material = DEFAULT_MATERIAL; From bc17abc8b3ee7ff9027f7e3c375ca0330bb8e7bc Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 24 Nov 2024 15:02:17 +0300 Subject: [PATCH 02/17] add module 'base:util' & fix attack --- res/content/base/modules/util.lua | 10 ++++++++++ res/content/base/scripts/hud.lua | 7 +++---- src/logic/PlayerController.cpp | 3 +-- 3 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 res/content/base/modules/util.lua diff --git a/res/content/base/modules/util.lua b/res/content/base/modules/util.lua new file mode 100644 index 00000000..75679073 --- /dev/null +++ b/res/content/base/modules/util.lua @@ -0,0 +1,10 @@ +local base_entities = {} + +function base_entities.drop(ppos, itemid, count) + return entities.spawn("base:drop", ppos, {base__drop={ + id=itemid, + count=count + }}) +end + +return base_entities diff --git a/res/content/base/scripts/hud.lua b/res/content/base/scripts/hud.lua index 694ff847..de600599 100644 --- a/res/content/base/scripts/hud.lua +++ b/res/content/base/scripts/hud.lua @@ -1,3 +1,5 @@ +local base_util = require "util" + local DROP_FORCE = 8 local DROP_INIT_VEL = {0, 3, 0} @@ -17,10 +19,7 @@ function on_hud_open() local pvel = {player.get_vel(pid)} local ppos = vec3.add({player.get_pos(pid)}, {0, 0.7, 0}) local throw_force = vec3.mul(player.get_dir(pid), DROP_FORCE) - local drop = entities.spawn("base:drop", ppos, {base__drop={ - id=itemid, - count=1 - }}) + local drop = base_util.drop(ppos, itemid, 1) local velocity = vec3.add(throw_force, vec3.add(pvel, DROP_INIT_VEL)) drop.rigidbody:set_vel(velocity) end) diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index 0b23942e..6f701346 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -509,8 +509,7 @@ void PlayerController::updateInteraction(float delta) { bool longInteraction = interactionTimer <= 0 || xkey; bool lclick = Events::jactive(BIND_PLAYER_DESTROY) || (longInteraction && Events::active(BIND_PLAYER_DESTROY)); - bool lattack = Events::jactive(BIND_PLAYER_ATTACK) || - (longInteraction && Events::active(BIND_PLAYER_ATTACK)); + bool lattack = Events::jactive(BIND_PLAYER_ATTACK); bool rclick = Events::jactive(BIND_PLAYER_BUILD) || (longInteraction && Events::active(BIND_PLAYER_BUILD)); if (lclick || rclick) { From 81775f3304f72273584f9f5fdfc8b16cd38d7a3f Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 24 Nov 2024 17:21:19 +0300 Subject: [PATCH 03/17] update base:drop component --- res/content/base/modules/util.lua | 5 +++-- res/content/base/scripts/components/drop.lua | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/res/content/base/modules/util.lua b/res/content/base/modules/util.lua index 75679073..6982780b 100644 --- a/res/content/base/modules/util.lua +++ b/res/content/base/modules/util.lua @@ -1,9 +1,10 @@ local base_entities = {} -function base_entities.drop(ppos, itemid, count) +function base_entities.drop(ppos, itemid, count, ready) return entities.spawn("base:drop", ppos, {base__drop={ id=itemid, - count=count + count=count, + ready=ready }}) end diff --git a/res/content/base/scripts/components/drop.lua b/res/content/base/scripts/components/drop.lua index 195c5270..9de9bdf7 100644 --- a/res/content/base/scripts/components/drop.lua +++ b/res/content/base/scripts/components/drop.lua @@ -3,10 +3,13 @@ local body = entity.rigidbody local rig = entity.skeleton inair = true -ready = false target = -1 +ready = false local dropitem = ARGS +if dropitem then + ready = dropitem.ready +end if SAVED_DATA.item then dropitem.id = item.index(SAVED_DATA.item) dropitem.count = SAVED_DATA.count From ea295e3d43b550f29cc0fea8ea100aa6fd8becbe Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 25 Nov 2024 08:24:00 +0300 Subject: [PATCH 04/17] reduce drop model sizes --- src/graphics/render/ModelsGenerator.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/graphics/render/ModelsGenerator.cpp b/src/graphics/render/ModelsGenerator.cpp index c629661d..30b6a7aa 100644 --- a/src/graphics/render/ModelsGenerator.cpp +++ b/src/graphics/render/ModelsGenerator.cpp @@ -114,7 +114,7 @@ model::Model ModelsGenerator::generate( } else if (blockDef.model == BlockModel::custom) { model = assets.require(blockDef.modelName); for (auto& mesh : model.meshes) { - mesh.scale(glm::vec3(0.3f)); + mesh.scale(glm::vec3(0.2f)); } return model; } @@ -130,7 +130,7 @@ model::Model ModelsGenerator::generate( } default: break; } - mesh.scale(glm::vec3(0.3f)); + mesh.scale(glm::vec3(0.2f)); } configure_textures(model, blockDef, assets); return model; From b7b11d9b2ab045e2dfb17433722a6b2219d36338 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 25 Nov 2024 08:38:32 +0300 Subject: [PATCH 05/17] set player tick rate to 60 --- src/logic/PlayerController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index 6f701346..96fed03a 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -197,7 +197,7 @@ PlayerController::PlayerController( player(level->players->get(0)), camControl(player, settings.camera), blocksController(blocksController), - playerTickClock(20, 3) { + playerTickClock(60, 1) { } void PlayerController::onFootstep(const Hitbox& hitbox) { From 97cf597a01719f87f6ffe7583881ac488b23b6f2 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 25 Nov 2024 12:31:10 +0300 Subject: [PATCH 06/17] update WorldRenderer::renderHands --- src/graphics/render/WorldRenderer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index 7084d2de..19d6d232 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -247,12 +247,12 @@ void WorldRenderer::renderHands( // prepare modified HUD camera Camera hudcam = camera; - hudcam.far = 100.0f; - hudcam.setFov(1.2f); + hudcam.far = 10.0f; + hudcam.setFov(0.9f); hudcam.position = {}; // configure model matrix - const glm::vec3 itemOffset(0.08f, 0.035f, -0.1); + const glm::vec3 itemOffset(0.06f, 0.035f, -0.1); static glm::mat4 prevRotation(1.0f); From 7ddf3f7537ae8115a07d46a0a5206bb127bae27e Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 25 Nov 2024 13:12:47 +0300 Subject: [PATCH 07/17] minimize chunks overdraw --- src/graphics/render/ChunksRenderer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graphics/render/ChunksRenderer.cpp b/src/graphics/render/ChunksRenderer.cpp index 9a72916c..60a09eb0 100644 --- a/src/graphics/render/ChunksRenderer.cpp +++ b/src/graphics/render/ChunksRenderer.cpp @@ -196,7 +196,7 @@ void ChunksRenderer::drawChunks( shader.uniform1i("u_alphaClip", true); // TODO: minimize draw calls number - for (size_t i = 0; i < indices.size(); i++) { + for (int i = indices.size()-1; i >= 0; i--) { auto chunk = chunks.getChunks()[indices[i].index]; auto mesh = retrieveChunk(indices[i].index, camera, shader, culling); From d9277e1b31714632bd7f5f601b8362a9e7cb8819 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 25 Nov 2024 15:39:34 +0300 Subject: [PATCH 08/17] mip-mapping related fixes --- res/shaders/main.glslf | 7 +++-- src/graphics/core/GLTexture.cpp | 2 +- src/graphics/core/ImageData.cpp | 38 ++++++++++++++++++-------- src/graphics/render/ChunksRenderer.cpp | 2 +- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/res/shaders/main.glslf b/res/shaders/main.glslf index 7db1a544..4992c36b 100644 --- a/res/shaders/main.glslf +++ b/res/shaders/main.glslf @@ -16,8 +16,11 @@ void main() { vec4 tex_color = texture(u_texture0, a_texCoord); float depth = (a_distance/256.0); float alpha = a_color.a * tex_color.a; - if (u_alphaClip && alpha < 0.9f) - discard; + if (u_alphaClip) { + if (alpha < 0.2f) + discard; + alpha = 1.0; + } f_color = mix(a_color * tex_color, vec4(fogColor,1.0), min(1.0, pow(depth*u_fogFactor, u_fogCurve))); f_color.a = alpha; diff --git a/src/graphics/core/GLTexture.cpp b/src/graphics/core/GLTexture.cpp index 3756d758..c5a918ed 100644 --- a/src/graphics/core/GLTexture.cpp +++ b/src/graphics/core/GLTexture.cpp @@ -25,7 +25,7 @@ GLTexture::GLTexture(const ubyte* data, uint width, uint height, ImageFormat ima glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glGenerateMipmap(GL_TEXTURE_2D); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 1); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 2); glBindTexture(GL_TEXTURE_2D, 0); } diff --git a/src/graphics/core/ImageData.cpp b/src/graphics/core/ImageData.cpp index ccf9f908..d6617c57 100644 --- a/src/graphics/core/ImageData.cpp +++ b/src/graphics/core/ImageData.cpp @@ -242,18 +242,34 @@ void ImageData::extrude(int x, int y, int w, int h) { } } +// Fixing black transparent pixels for Mip-Mapping void ImageData::fixAlphaColor() { - // Fixing black transparent pixels for Mip-Mapping - for (uint ly = 0; ly < height-1; ly++) { - for (uint lx = 0; lx < width-1; lx++) { - if (data[((ly) * width + lx) * 4 + 3]) { - for (int c = 0; c < 3; c++) { - int val = data[((ly) + + lx) * 4 + c]; - if (data[((ly) * width + lx + 1) * 4 + 3] == 0) - data[((ly) * width + lx + 1) * 4 + c] = val; - if (data[((ly + 1) * width + lx) * 4 + 3] == 0) - data[((ly + 1) * width + lx) * 4 + c] = val; - } + int samples = 0; + int sums[3] {}; + for (uint ly = 0; ly < height; ly++) { + for (uint lx = 0; lx < width; lx++) { + if (data[(ly * width + lx) * 4 + 3] == 0) { + continue; + } + samples++; + for (int c = 0; c < 3; c++) { + sums[c] += data[(ly * width + lx) * 4 + c]; + } + } + } + if (samples == 0) { + return; + } + for (int i = 0; i < 3; i++) { + sums[i] /= samples; + } + for (uint ly = 0; ly < height; ly++) { + for (uint lx = 0; lx < width; lx++) { + if (data[(ly * width + lx) * 4 + 3] != 0) { + continue; + } + for (int i = 0; i < 3; i++) { + data[(ly * width + lx) * 4 + i] = sums[i]; } } } diff --git a/src/graphics/render/ChunksRenderer.cpp b/src/graphics/render/ChunksRenderer.cpp index 60a09eb0..f669cfea 100644 --- a/src/graphics/render/ChunksRenderer.cpp +++ b/src/graphics/render/ChunksRenderer.cpp @@ -197,7 +197,7 @@ void ChunksRenderer::drawChunks( // TODO: minimize draw calls number for (int i = indices.size()-1; i >= 0; i--) { - auto chunk = chunks.getChunks()[indices[i].index]; + auto& chunk = chunks.getChunks()[indices[i].index]; auto mesh = retrieveChunk(indices[i].index, camera, shader, culling); if (mesh) { From a5a9a4b9cea73c5ce28412e10d26ff44483cd527 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 26 Nov 2024 08:40:15 +0300 Subject: [PATCH 09/17] update base pack --- res/content/base/entities/drop.json | 2 +- res/content/base/textures/blocks/grass.png | Bin 6400 -> 6960 bytes res/layouts/inventory.xml.lua | 4 +++- res/shaders/skybox_gen.glslf | 4 ++-- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/res/content/base/entities/drop.json b/res/content/base/entities/drop.json index 9577eb7e..4c5e064f 100644 --- a/res/content/base/entities/drop.json +++ b/res/content/base/entities/drop.json @@ -4,7 +4,7 @@ ], "hitbox": [0.4, 0.25, 0.4], "sensors": [ - ["aabb", -0.2, -0.2, -0.2, 0.2, 0.2, 0.2], + ["radius", 0.3], ["radius", 1.6] ], "blocking": false diff --git a/res/content/base/textures/blocks/grass.png b/res/content/base/textures/blocks/grass.png index d43769ca196e37736be9a3d409206a092f7c2ee4..98dbda01f8728bbc84c0967ec9627fc5c56754d4 100644 GIT binary patch delta 2338 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 Si?dn)0000 Date: Tue, 26 Nov 2024 08:53:14 +0300 Subject: [PATCH 10/17] update cracks --- res/content/base/textures/cracks/cracks_0.png | Bin 4757 -> 5003 bytes res/content/base/textures/cracks/cracks_1.png | Bin 4768 -> 5021 bytes .../base/textures/cracks/cracks_10.png | Bin 4904 -> 5277 bytes res/content/base/textures/cracks/cracks_2.png | Bin 5018 -> 5294 bytes res/content/base/textures/cracks/cracks_3.png | Bin 4798 -> 5083 bytes res/content/base/textures/cracks/cracks_4.png | Bin 5050 -> 5359 bytes res/content/base/textures/cracks/cracks_5.png | Bin 5062 -> 5378 bytes res/content/base/textures/cracks/cracks_6.png | Bin 4846 -> 5195 bytes res/content/base/textures/cracks/cracks_7.png | Bin 4847 -> 5215 bytes res/content/base/textures/cracks/cracks_8.png | Bin 4872 -> 5235 bytes res/content/base/textures/cracks/cracks_9.png | Bin 4877 -> 5255 bytes src/graphics/render/BlockWrapsRenderer.cpp | 4 ++-- 12 files changed, 2 insertions(+), 2 deletions(-) diff --git a/res/content/base/textures/cracks/cracks_0.png b/res/content/base/textures/cracks/cracks_0.png index 84d56c433a4d837eb460db23a805ea5121f65e58..b8dd094e8bed5b8e41dd46cc357030af1ead3054 100644 GIT binary patch delta 1416 zcmV;31$X+DC5tDJBmp^*B_DrVmfR=|hTmC5mVhKcVmX-0IkSUVets}^b*0lMJ(*6P z%5)hl%aYJ1xvE|N_n+au;b5P<3sEiQlst}*L*{~o`SUo|nS5C1ec`Xglib}m7$U(e z=Vj(C?~r3n`#NtYbm?D)ZchcP__$HZmLJdZV;f}q(a?@S==AK{eqeta65bJo^SbVc zQZ{|sTC3Z0*dlv;f+(k$NCVD+y=ux>8~dQhXPbeJ%6S=zXF_kmb$zKaV&X0&9%qpq zrOZ!|0y*K#k{lGh7%qZDoTG%5cn_2a0g>kIsQ5dXZ*%j=(Fez8w&meu^r`%Y+M__8 z>*HS02l8D8H#JN9hCF{`_355}DyMiEx^Bqrhu?a(dV7A7Yrb9V9KFFkMzgUtja`(G zkc+f8b!}y>pm)qHuBQ@)`s7fxhQ%Bi!+h}-HPw7YryW>lVz3_+s8OLoea)3BLJZtl zF*8@kvV;amnJY?xPzV?_SS3qCX|U8)LqYhCg_hgA+*LB)oNs>wRVElCJo4MaeO7Ud z*-J#;?pz@*p52KkJOTflpavo|c2eU?@HKusCRYK$xYBIcVDX1LO&pOP#U%^0Krv!I zyPmXd14t2EM+AdD3*-|?q=bl+S&5KH1E7M?(T#k70L91+L2?jDfP?OUZ#<*4R5|h~ z##>c_Lz^a1u*rW?04s!u`q5yhp%NvA7-NbWE#_E~q}h2XX_~L+qM|{gCRH`3S&NAU zidzU@koarc4T*yit?$U#+s^DtGSlO zO&S`!rKZhVZlzO4DfQ4}PhGq9+{-|z4H;p?k%qcqBaeS_Q`=bIjsHN6HZ@+PrlQ`| zAXU9g(0rZ5$qd9e5P&PFffx#VGV?|u@FX{x;rj?(5g9?o38&E{27;jz$3Zu{P0n%o z8g5Q)apV6>&P{ZmB=?@%NeEm0S-vkhlby`cMsj>3jNeEohryI(1Mc77Rp8G0G| zbB3fpmaZs|@dfb|cE9KUy?f`sB%YU{m!X%Tzivnden{XyLiZit49N6~P|%T+Py-x) zKpe$iQ%glF4t9{@kfAzRC@SKpRVYG*P%E_RU~=gfG-*guTpR`0f`cE6RRNqOOPN!K@DY8U{haZ=%iRk(|*FkA94K>xfF7h!N{?IDm2KhAN&u0es^mX zCMQ}+p#%_kah#7)Ah-)O>yGn%>^RL6!2b+f=^cNy0nB`oUhinpBVceFxVY|U${ujJ z0}MYIvMIZgpQcbK0Pkn?O*vrb7U)}R_150U=>w3Vu2MI^!67hKr0jK%clUPp_V1Z? ze?P^Da>(;pH^u+}4gG0USaevk=>&xWBx7SZF=RJ3F)dLM~V=`kfW-((oG%`3ilRpVd3N}nIyE%2lnHJK7IDv1lK=n!24YJ` zL;xoM4gf91<2e+Q7!n`|8U-yjm+ZJWlRy$EDiujYK~y-)V_+BsBLvhAnC4M1WB>sE WcmVs<$YB%!0000 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 P00000NkvXXu0mjfRAZpm delta 1379 zcmV-p1)TbwC!i&eB!44%R9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}?U!AW?I;Mx z-(AHlK|lnTV>DLH4rclD*O+vldvDkDd_2s!BJC4YMx8Z z5l1SiaK*yobsXzVF|G5yi1*?}9-bQvkzkhVvhbFlkYi2zx_@jZbnD-S9#0i3{kT!< zmLIS3V;f}u(a?@S=<*!0GBac1APEcinF~TGNc!cjNjxl?QDEgBt#Kp5a5k(~6pA*zTgvL&)t_0uX z$76C85Y&}s#|CRW!e!!6`Y0}0paqJG`RaPIz6~HnaIFXieU>O@5~YlYjM<2gNC%*b z(9w;2fPVm~az~Jy(1w76?tpJRW3*IR`4Z!;Dk-2%vl!SEseqM|qJAtnYN)DcQq`=c zu0?B>JUcIE%k%YIO)QyOHZu=ath#t|_3Y;E#cSarcztU@pB68r)C#8+mMfmFP^k6b zLymOlkqGh-&rF5oK&wSeHXF2OYsSO!v z=*Yvu@KHv6sBNr2jlV&SHZ@+PrlLL6AT_&9(0rZfWCmiK2*3^0Kn#UFnMJ3Rc#@mU z@I69TC?iOna5_z5Aec^K9rUo<TCPb{*Mq7k1H zk6Ls=;zzElKEH7;dMxlv(aNOfh(%(l*v4ubvy!C~PZGy8-JpCS>$Apri?d#-vgSSc z3!`~sd5P<^hLFSp79m4|iYm&ez(JgLgA^NSI!^@n2R*+`E|pwmFmlXe13DDX5B>+g ze`jkKCdU1wXaeYbaovw$AhHWIYOecz?7EE;Ap8tm87==t9hm+kz1GrVM?l{;aB4>G%zt@En+b= zIW03`VKHSmHf1s~Wi^wq2dE4%Ha0dfFgZ0iGc`H0WC&aVv!e=N2o^uX6uAHZ00v@9 zM??Vs0RI60puMM)lNl2r2owP%GNzRnhm%1QC^#cYL_t(I%VS^|1w#P*|Np-hpF9&0 l8XYLHeJ{h&})S diff --git a/res/content/base/textures/cracks/cracks_10.png b/res/content/base/textures/cracks/cracks_10.png index 8253dd6d988a667399ed4839beb2f3fe2a7dd218..3fccd3a2191ce39048d672dc801b05767231d1f5 100644 GIT binary patch delta 1719 zcmV;o21xm+CY>peB!9trR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}#a3IAMXH&<5VMt{}WY_O9BJwGQo2}I{Jli3Pm!H)j-gyodZ!0DQpD>PMY(PG1 z5406Yiy^lrbQf&jo2notnU&SxtvaIA{ zDX6pwu- z6$rW|%@G^SW}?-^7`NlxWHY^eMKu;!7y8q>`&tt$!%+>T9U6rkZD-L8aNwZuWDSdzxP8ZUja=-C?j zWYIGzedhmh4INr^V8fqo?O~RF1NyE_-(}`El6^OOF4;fu$o!a&0~w=}vAncI=kYnj zqti#qyNHe@`F@HHZ0Jx=$Nau$f1jmq`B8H)qT?q3eY*G~_`fRJv$Uj>n7vE^eZt~r z#{Qq{=-n(GP3uom`YN6)EovWMKrjD^_$Ho*>*yQ}&FL%q07dRE$cBFc6a54BUs=Jw zjeTE}Py-x)Kpe$iQ;VV%5j#k6$WWau6cusQDionYs1;guFuC*#nlvOSE{=k0!NHHk zs)LKOt`4q(Aou~|?BJy6A|?JWDYS_7;J6>}?mh0_0YbgZG^;BHXu55t5^*t;T@|}u z(T6Ysh+$A>mN6$uNpu`v_we!cF3PhypZjz4t2v8*0X~st?1$8VeqE(<&}WTsQ|#35p_(8fv|v!baHPZ38{O{aVz&xWBsViNGcaQ@Gc7S@WMnNgV>e?h zIc76vEj2JSGB-CeIXO8pVv~{ws0=nRFflhXG&3rIx{n~lnHJK7IUc~ zd;kCd24YJ`L;xoM4gf91<2e+Q7!n`|8U-;S@{8v{)}$NZHDiiSWUUV6Ytq(GfefMz704fRarsO#__BAWG%ZY}h7IHMKGr=ORnGtb N002ovPDHLkV1jD%7R&$u delta 1516 zcmVq@2|3oZuYb#SLYMw!==M~x(&vp@ zxBPgOAKM`NXG1#zp@-+#_XFFI@Qx@wuG@|%7q^$K^|n2yE%N6tiE-9UmT*oS&2quo zIVM9s`wVn6F3XTU5_$`+>r0gp6Q4p7aTeK8%KRm%kQ2_h4p59sB;xB#EAbI15dtDD z+fj{oGC$_#nSY}%j_+(M!pS(N@&{_q0(q^EdqrQ!cNyH&JntLwiZ$kY{-vDsGIZUL z+Yf*A?CtjaA~(5R>>Pc-Jx2GjHjQ1>l#z?PH+5}gt)O?zEUu?AhQ%CEwT{Ic1;b;F z4K>wcL#G{B7hWW&td0?QIQAb%BZCV9;QbA{|A+(pC*6 z;X4*uZp(7l$YT$&6I7XCjPS_69^t!+W6WM6ihkz`aq;XpCyW!L@6U8V>Tir(gCO< zbaW#hAb&ur+z})vkqkKK4*141MoX2IA7Z>!B?VE*VqjCG0#-_j`myAwp{k-uRkND9 z7Oh$G?7W;U&)0J`v1Dr5%sg1J>f*`OvzxmYuZ4@?^{oYcTD+7}E1XtXu6Vjaq1J;B zIntp=KJ4(Lgrhc;PfJZ(Zq~e&Ry%j;Xz-r9b${=r*ON|^(wR;@^J%A_<*WmxHe{rs zBM%G1M;Y~|wz2*+{sA@G)OeAaigr_j)a)`r^L3(=8HjNr05?zrF%7M)V!Np3R3 z_Xu5~j39Nw=`@LfU^3&`UC!Y!CDZv0=#g^BK)f!DTCPb{*Mq7k1H zk6Ls=;zzElKEH7;dMxlv(aNOfh(%(l*v4ubvy!C~PZGy8-JpCS>$Apri?d#-vgSSc z3!`~sd5P<^hLFSp79m4|iYm&ez(JgLgA^NSI!^@n2R*+`E|pwmFmlXe13DDX5B>+g ze`jkKCdU1wXaeYbaovw$AhHWIYOecz?7EE;Ap8tm87==t9hm+kz1GrVM?l{;aBG%+nXFl0F`G&f=}EjVI0 zVl6UdVr4QoVL3T4WH*yA2&fD&Ha0ggF*qtLO7rSYshy&r{02=^z--&O;*`LL_gQNWwTPFTRvT9?@32f6g0$a8P z-T@R~lk{|V3)_gUc=%@{kaPejGfFzDXT|~1=WLDZKuntl9%`X&WpUO2H*oBUSrqP Sl&g~f0000>5eOZgeOnJKL&AS6qHtW-6;aBj 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 diff --git a/res/content/base/textures/cracks/cracks_3.png b/res/content/base/textures/cracks/cracks_3.png index 40275992bb1f1b460471b9e1aa6ecb463378cfe3..cfb98594d0c861aef857b31d42bc5d877e0deb30 100644 GIT binary patch delta 1537 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 diff --git a/res/content/base/textures/cracks/cracks_5.png b/res/content/base/textures/cracks/cracks_5.png index 3db95bf439c3f5699f39408d3de3994d8af2e8c3..bbe1a6c6a7b7df4a6e1f912695c2b53d9ede676e 100644 GIT binary patch delta 1592 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 MNks-uM6N<$f}y~xUjP6A diff --git a/res/content/base/textures/cracks/cracks_7.png b/res/content/base/textures/cracks/cracks_7.png index a9b9092d9e3dc79d14b565778a1965bfbb6b7aac..0b3ca2d1b1e143eab109fbbdcbbade833baafdf3 100644 GIT binary patch delta 1657 zcmV-<28Q|XCEqBJB!91ZR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}tyXPz<0=gO z&njjKNCE`Q!C=mLJ9x{V3&Bp(X6t$u(#KGkN4i_9v5iCH6xjvDBFsY_M;SBdZ9R(Pt$?OB7-Vh4q_>0?ZMFqDRc%3~ zZI~xwaNo#LrA&?XF%~L-=y+$v$XpD|5Jr%cxF8h>iGP4bja8CVBn3+uIpl;-EHvDv z;jU1$)!0fI4c)puZ1L10&RCQ2hw-(LO$%R{?{5 zggN4X*>2`$V)JxQE*V4%6g|dU)sxm~03m{F4=|`RM>ddn3P7aHN`yd05R?HO)yNwd zAn&;XB!4@R0CG?r@QrtrhAMl$iE*onGbqy_3T~2Qkma05{-}${q3p#w?|tyy2UM-Ef=IuamANVw8WB1u3V*}z-y>lV}DIG@3bS8cDMUI?7GK2?YSYVz32X1x+b<>Lj}1w~e^$x-1*@DQ3@RMBe3MWE9DhI@#a~m4q7@N4 zNO8zeoh%d;anvdlp+cw?T6HkF^b49aBq=VAf@{ISkHxBki?gl{u7V)=0pjf7r060g z{x2!Ci1pyOAMfrx?%n}Hz05SLD+Xw~ZKe`&F_T>tyI;|VFan5SP-d1fCrL?k9AEeF z@%1jsvpS#qbM&h@i+=$=k$9FFrcJy-JiTcfocD=CtSGC*=fvYCU6A;Z>x##3oC_`s zJTqjbQ}e_jVzJQ1N*lAHsS!^RM^sIxd?Dkp%6W^kR<5$oiA@z#^6) zL4<-TN+`odlvbS-3n|)=bb;{@U#SB#pQP7XTI2{A*aj}HTbi;5TgF z|*Sy}E`#607($rP*1~@nb#tM|Z-r?On?Y;ebrrF;Qf8uhi^nWqr z000gBX;fHrShMK_g#sirG&wP3GB+|UGGR0~Ei^SUVJ%@}H8w3bFl03_WnyJ8IAuAL zk_V^^HZU+TGdD3fI5{yevqlJ90h7N7TqHO-WM(xqHexL`V`MokG&VC~Ejc-5HZ5Ue zIXPr8H)dimIboAO2}=q#R4_O?G&njnH?x!pZU`2z(blp6000JJOGiWiCjbrrEyd$G z6q6VdAP5=-Fgf@?$+eR}5-5LjNklxYjbfD&W~oORx?pqkazkwb{$+CnrCfahoWR}p2WZ`< zMUlUHs*xTw<}gv3J~_^mVIdlzQe-VAvs99{eAyS$6C)IR`#d@T000R9NkvXXu0mjf DC~Ej2 delta 1459 zcmV;k1x)(iDDNeZB!44%R9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}?UzfEq@2|3oZuYb#SLYMw!==M~x(&vp@ zxBPgOAKM`NXG1#zp@-+#_XFFI@Qx@wuG@|%7q^$K^|n2yE%N6tiE-9UmT*oS&2quo zIVM9s`wVn6F3XTU5_$`+>r0gp6Q4p7aTeK8%KRm%kQ2_h4p59sBw{$LV99eu0YP19c5JZ5BRotTO3&hw1zMn}m>*qF*0%wq2(A^upwAM;Orn$#kue()66pX` z5jwh&4}TCKRqhCqlSl>}bO(In8Kb4j$`3K#s*=KNQ?#ptPz9`%6!l}tQA1Tlld5Jl zbuC)6JZSY5W6fw5jnTH5Kiq2C3O)g68W)Co>S^L;!A}24X1e$t*gh#FN}) zhVK!&LK#8ogwtsf1Hp6>>!6$6CKtH=Kiq=(;>Q1#T$t#-N$zKEzoORXSE4Oqk2ai1 zjWUAn8#XFC{_y$zdJcc5@ZI@s=xyk2=xyk2=xyk2=(jf{V~o)8UtstP*w4iB(7AN^ zliULwe^3;KPgA9$6$dkjIAo|!7DPoHwF*V35Nd^19ZX*O2Tcq~ii@M*T5#}ZvFhOB ztgC~oAPD||I6F8gx=4xlC509-UUTCPb{*Mq7k1H zk6Ls=;zzElKEH7;dMxlv(aNOfh(%(l*v4ubvy!C~PZGy8-JpCS>$Apri?d#-vgSSc z3!`~sd5P<^hLFSp79m4|iYm&ez(JgLgA^NSI!^@n2R*+`E|pwmFmlXe13DDX5B>+g ze`jkKCdU1wXaeYbaovw$AhHWIYOecz?7EE;Ap8tm87==t9hm+kz1GrVM?l{;aBegsYDGNQvr#h2 zbGX)LFI9al$MmqXv-3qpr!io(gVOhTCZ!*UPRTx#c4o!eBej4X*|bE~W-!U<=l}o! N00>D%PDHLkV1l|buD<{P diff --git a/res/content/base/textures/cracks/cracks_8.png b/res/content/base/textures/cracks/cracks_8.png index 79669ab131e86074456f240d204a4c5479e004e8..cb22e5060d8851297a6edf330b16c3ccd88d8e74 100644 GIT binary patch delta 1676 zcmV;726Op{Ci5teB!9koR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}wO4Jr;w%jP zpH<8fNcadWheCOt*}=Q~IZ&)Rw`$dS%e6oV$ss2}FRlOmZuAR}h;`(=#*jiVcwBNx zG6vCX&obU@+<4E4xeV^)v@Zxm7QNl3Nv3>-9AlpIG@bB8|9@g=_mna6*M*#?e7Tn| z)1bt^4NU}=H_xWd4bza7iO6m9G7*Io_3mi3OwVqL;`QUKO7MZz;qAnzhJ4MRozP2=h>vql^*smLA2iE1;v({+^F~$^gl4Nmx`-D18F{P9@+NAYIdxJHetjS=iE9%Y~q^cJa+^-YgIRj(j7=$ZW17k?+&Y6kq zoOI?oXZSusRd@kN-^r=m83TiEW$}%7?k01DDE<@PNaNs5zGaR&btjqo$=eZYwSP;L z!GG9RhCQgpqWYS)ED?YB`hDEf(SltMMD3BeO`Be+J#lig%dT`Reum_Dm7Z@hr*Xc4 z=($Te7X$Os1-)kHoN0R3^CQRfF42#)>64fot`KoZ~LnA-%(YICq;y(HxtN%?z zpIrM7s{hlA?v0{-j+Xuno~M`pdj(A2U;EoCeS_uY@1wU5*IJ{Bf4S)o>uNkmY;?<- zlTZU3e?T0?UsH>s6%ji~amY}eEEE-S)G8FALZ}s5buhW~3z{?}DK3tJYr(;f#j1mg zv#t)Vf*|+-;_Tq0=prTlFDbN$_29T4@9sVB-T^|r%rvVj257o%rV?>6lU)_NU(ts! z0*GNyW|lE0NlA1ZU-$6w^)AY@I-mP<^s70Ge*r#`c$OKaO}s%oy=fbq_lZNSD67Qh z#N#Gikob}7ipOu93oZ*hGi0Vy^TZ)yvCzg!8?&OR5l<0ER86ORA>*;id5g1FuCnGm z`3r+NePx;JG)IuYB9j(dX zf8X6&`N;_{DHsO=FOKsu3Uu!Rjhf?pA3ILt1n@rtS9;4|sRJ{gq}N(nrIx#Y{lnHJK7Ij!pegFUf z24YJ`L;xoM4gf91<2e+Q7!n`|8U-;7x0gKElRy$Ee|SkmK~y-)rBmAt03itLZFYzdfFQR;=ukHZ@OEch=M4TXM;1T zc9ZTEPwJk4`CYKuu?nCJc}2+|V|jix8ak6mU8EONJnt!)$){|Y&d0*+-}pr$tpNgI WE*L934$q@2|3oZuYb#SLYMw!==M~x(&vp@ zxBPgOAKM`NXG1#zp@-+#_XFFI@Qx@wuG@|%7q^$K^|n2yE%N6tiE-9UmT*oS&2quo zIVM9s`wVn6F3XTU5_$`+>r0gp6Q4p7aTeK8%KRm%kQ2_h4p59sB;q(nv6c7;ln4Ql zmhGsV99ek+=IIL7QHqUd+75EswxL==&Le@;*X5gI$Gx)OYi z&&T8{AgC+Njt$m$golYk=~-N|KnoNV^P}s@`ZjN;qmm`Lxuu4X3;4np5!Jo ze2>r-$_P>?oKBM%2&R)*2i@#8xqvMGFWiFp;>Q1#T$t#-N$zKEzoORXSE4Oqk2ai1 zjWUAn8#XFC{_y$zdJcc5@ZI@s=xyk2=xyk2=xyk2=(jf{V~o)8UtstPtxm-6;q{1( zlj{QTCPb{*Mq7k1H zk6Ls=;zzElKEH7;dMxlv(aNOfh(%(l*v4ubvy!C~PZGy8-JpCS>$Apri?d#-vgSSc z3!`~sd5P<^hLFSp79m4|iYm&ez(JgLgA^NSI!^@n2R*+`E|pwmFmlXe13DDX5B>+g ze`jkKCdU1wXaeYbaovw$AhHWIYOecz?7EE;Ap8tm87==t9hm+kz1GrVM?l{;aBy{D6tmJ=Wd6agj&!VtbDlfDxue~U>(K~y-)rBXo-z#s^tKQr-No_rUH zKVuhNkN~=ji%_9dgeWl)X(G}r7AAXVgncIQ6uiEbdh%yJQ^u|^zV2>1=wyzFpg{nA zUKS!6N=N}vty%y*8z_5kwdxSep%{29Rjcc!z)shRIUIEMH7oYM%w4K%Z53Hdi*;hQ lA<7#`)cII=vYYk(Z4d5w4en>d3oZZv002ovPDHLkV1nmismcHV diff --git a/res/content/base/textures/cracks/cracks_9.png b/res/content/base/textures/cracks/cracks_9.png index 18eb1a5364c961a4be3d103f711e13b7e64f8317..5ff395d616ec93c9276b95bb2ce76e8db59134d8 100644 GIT binary patch delta 1696 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 KMNUMnLSTY2D!Xm~ diff --git a/src/graphics/render/BlockWrapsRenderer.cpp b/src/graphics/render/BlockWrapsRenderer.cpp index ddb93d3a..3ad30ad8 100644 --- a/src/graphics/render/BlockWrapsRenderer.cpp +++ b/src/graphics/render/BlockWrapsRenderer.cpp @@ -49,7 +49,7 @@ void BlockWrapsRenderer::draw(const BlockWrapper& wrapper) { glm::vec3(wrapper.position) + glm::vec3(0.5f), glm::vec3(1.01f), regions, - glm::vec4(0), + glm::vec4(1,1,1,0), false ); break; @@ -66,7 +66,7 @@ void BlockWrapsRenderer::draw(const BlockWrapper& wrapper) { glm::vec3(wrapper.position) + aabb.center(), size * glm::vec3(1.01f), regions, - glm::vec4(0), + glm::vec4(1,1,1,0), false ); break; From f6ab0de5af54fac36a6f67a83b02ec809988c554 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 26 Nov 2024 08:53:32 +0300 Subject: [PATCH 11/17] update Inventory::move --- src/items/Inventory.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/items/Inventory.cpp b/src/items/Inventory.cpp index 282f361f..00d74e53 100644 --- a/src/items/Inventory.cpp +++ b/src/items/Inventory.cpp @@ -37,6 +37,12 @@ void Inventory::move( ItemStack& item, const ContentIndices* indices, size_t begin, size_t end ) { end = std::min(slots.size(), end); + for (size_t i = begin; i < end && !item.isEmpty(); i++) { + ItemStack& slot = slots[i]; + if (!slot.isEmpty() && slot.accepts(item)) { + slot.move(item, indices); + } + } for (size_t i = begin; i < end && !item.isEmpty(); i++) { ItemStack& slot = slots[i]; if (slot.accepts(item)) { From 0ba0584c5d59d706182bb91d969101bffb93256c Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 26 Nov 2024 09:32:53 +0300 Subject: [PATCH 12/17] add function inventory.move_range --- doc/en/scripting/builtins/libinventory.md | 15 +++++++++++++- doc/ru/scripting/builtins/libinventory.md | 15 ++++++++++++++ res/layouts/inventory.xml.lua | 4 +++- src/logic/scripting/lua/libs/libinventory.cpp | 20 +++++++++++++++++++ 4 files changed, 52 insertions(+), 2 deletions(-) diff --git a/doc/en/scripting/builtins/libinventory.md b/doc/en/scripting/builtins/libinventory.md index 344840f1..ccb7be20 100644 --- a/doc/en/scripting/builtins/libinventory.md +++ b/doc/en/scripting/builtins/libinventory.md @@ -55,8 +55,21 @@ inventory.create(size: int) -> int -- Create inventory copy. Returns the created copy ID. inventory.clone(invid: int) -> int --- Move item from slotA of invA to slotB of invB. +-- Move an item from slotA of invA to slotB of invB. -- invA may be the same as invB. -- If slotB will be chosen automaticly if argument is not specified. +-- The move may be incomplete if the available slot has no enough stack space. inventory.move(invA: int, slotA: int, invB: int, slotB: int) + +-- Moves an item from slotA of inventory invA to a suitable slot(s) +-- in the specified range of inventory invB. +-- invA may be the same as invB. +-- The move may be incomplete if the available slots are filled. +inventory.move( + invA: int, + slotA: int, + invB: int, + rangeBegin: int, + [optional] rangeEnd: int +) ``` diff --git a/doc/ru/scripting/builtins/libinventory.md b/doc/ru/scripting/builtins/libinventory.md index 01ecc5cc..7f3cf26e 100644 --- a/doc/ru/scripting/builtins/libinventory.md +++ b/doc/ru/scripting/builtins/libinventory.md @@ -66,5 +66,20 @@ inventory.clone(invid: int) -> int -- Перемещает предмет из slotA инвентаря invA в slotB инвентаря invB. -- invA и invB могут указывать на один инвентарь. -- slotB будет выбран автоматически, если не указывать явно. +-- Перемещение может быть неполным, если стек слота заполнится. inventory.move(invA: int, slotA: int, invB: int, slotB: int) + +-- Перемещает предмет из slotA инвентаря invA в подходящий слот, находящийся в +-- указанном отрезке инвентаря invB. +-- invA и invB могут указывать на один инвентарь. +-- rangeBegin - начало отрезка. +-- rangeEnd - конец отрезка. +-- Перемещение может быть неполным, если доступные слоты будут заполнены. +inventory.move_range( + invA: int, + slotA: int, + invB: int, + rangeBegin: int, + [опционально] rangeEnd: int +) ``` diff --git a/res/layouts/inventory.xml.lua b/res/layouts/inventory.xml.lua index 589e5e44..9f836223 100644 --- a/res/layouts/inventory.xml.lua +++ b/res/layouts/inventory.xml.lua @@ -4,7 +4,9 @@ function inventory_share_func(invid, slotid) inventory.move(invid, slotid, blockinv) elseif rules.get("allow-content-access") then inventory.set(invid, slotid, 0, 0) + elseif slotid < 10 then + inventory.move_range(invid, slotid, invid, 10) else - inventory.move(invid, slotid, invid) + inventory.move_range(invid, slotid, invid, 0, 9) end end diff --git a/src/logic/scripting/lua/libs/libinventory.cpp b/src/logic/scripting/lua/libs/libinventory.cpp index a705c48b..bcdc9056 100644 --- a/src/logic/scripting/lua/libs/libinventory.cpp +++ b/src/logic/scripting/lua/libs/libinventory.cpp @@ -156,12 +156,32 @@ static int l_inventory_move(lua::State* L) { return 0; } +static int l_inventory_move_range(lua::State* L) { + auto invAid = lua::tointeger(L, 1); + auto slotAid = lua::tointeger(L, 2); + auto invA = get_inventory(invAid, 1); + validate_slotid(slotAid, invA.get()); + + auto invBid = lua::tointeger(L, 3); + auto slotBegin = lua::isnoneornil(L, 4) ? -1 : lua::tointeger(L, 4); + auto slotEnd = lua::isnoneornil(L, 5) ? -1 : lua::tointeger(L, 5); + auto invB = get_inventory(invBid, 3); + auto& slot = invA->getSlot(slotAid); + if (slotBegin == -1) { + invB->move(slot, content->getIndices()); + } else { + invB->move(slot, content->getIndices(), slotBegin, slotEnd); + } + return 0; +} + const luaL_Reg inventorylib[] = { {"get", lua::wrap}, {"set", lua::wrap}, {"size", lua::wrap}, {"add", lua::wrap}, {"move", lua::wrap}, + {"move_range", lua::wrap}, {"get_block", lua::wrap}, {"bind_block", lua::wrap}, {"unbind_block", lua::wrap}, From c97f26b06e0dfc9e893f15cdaca997f80d43bea1 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 26 Nov 2024 09:43:27 +0300 Subject: [PATCH 13/17] introduce 'base:durability' property --- res/content/base/blocks/bazalt.json | 2 +- res/content/base/blocks/blue_lamp.json | 3 ++- res/content/base/blocks/brick.json | 5 +++-- res/content/base/blocks/coal_ore.json | 3 ++- res/content/base/blocks/dirt.json | 3 ++- res/content/base/blocks/flower.json | 3 ++- res/content/base/blocks/glass.json | 3 ++- res/content/base/blocks/grass.json | 3 ++- res/content/base/blocks/grass_block.json | 5 +++-- res/content/base/blocks/green_lamp.json | 3 ++- res/content/base/blocks/ice.json | 3 ++- res/content/base/blocks/lamp.json | 3 ++- res/content/base/blocks/leaves.json | 5 +++-- res/content/base/blocks/lightbulb.json | 3 ++- res/content/base/blocks/metal.json | 3 ++- res/content/base/blocks/pane.json | 3 ++- res/content/base/blocks/pipe.json | 3 ++- res/content/base/blocks/planks.json | 5 +++-- res/content/base/blocks/red_lamp.json | 3 ++- res/content/base/blocks/rust.json | 3 ++- res/content/base/blocks/sand.json | 5 +++-- res/content/base/blocks/stone.json | 5 +++-- res/content/base/blocks/torch.json | 3 ++- res/content/base/blocks/wood.json | 5 +++-- res/content/base/blocks/wooden_door.json | 3 ++- 25 files changed, 56 insertions(+), 32 deletions(-) diff --git a/res/content/base/blocks/bazalt.json b/res/content/base/blocks/bazalt.json index 94afd36e..bb941a81 100644 --- a/res/content/base/blocks/bazalt.json +++ b/res/content/base/blocks/bazalt.json @@ -1,4 +1,4 @@ { "texture": "bazalt", "breakable": false -} \ No newline at end of file +} diff --git a/res/content/base/blocks/blue_lamp.json b/res/content/base/blocks/blue_lamp.json index cfded63b..88437145 100644 --- a/res/content/base/blocks/blue_lamp.json +++ b/res/content/base/blocks/blue_lamp.json @@ -2,5 +2,6 @@ "texture": "blue_lamp", "emission": [0, 0, 15], "shadeless": true, - "material": "base:glass" + "material": "base:glass", + "base:durability": 0.3 } diff --git a/res/content/base/blocks/brick.json b/res/content/base/blocks/brick.json index e20d9e1d..3b4ecabf 100644 --- a/res/content/base/blocks/brick.json +++ b/res/content/base/blocks/brick.json @@ -1,3 +1,4 @@ { - "texture": "brick" -} \ No newline at end of file + "texture": "brick", + "base:durability": 10.5 +} diff --git a/res/content/base/blocks/coal_ore.json b/res/content/base/blocks/coal_ore.json index 23c050c6..c73998ec 100644 --- a/res/content/base/blocks/coal_ore.json +++ b/res/content/base/blocks/coal_ore.json @@ -1,3 +1,4 @@ { - "texture": "coal_ore" + "texture": "coal_ore", + "base:durability": 16.0 } diff --git a/res/content/base/blocks/dirt.json b/res/content/base/blocks/dirt.json index 81453c4b..ff512254 100644 --- a/res/content/base/blocks/dirt.json +++ b/res/content/base/blocks/dirt.json @@ -1,5 +1,6 @@ { "texture": "dirt", "material": "base:ground", - "surface-replacement": "base:grass_block" + "surface-replacement": "base:grass_block", + "base:durability": 1.0 } diff --git a/res/content/base/blocks/flower.json b/res/content/base/blocks/flower.json index db0609f8..94c06903 100644 --- a/res/content/base/blocks/flower.json +++ b/res/content/base/blocks/flower.json @@ -7,5 +7,6 @@ "replaceable": true, "grounded": true, "model": "X", - "hitbox": [0.15, 0.0, 0.15, 0.7, 0.7, 0.7] + "hitbox": [0.15, 0.0, 0.15, 0.7, 0.7, 0.7], + "base:durability": 0.0 } diff --git a/res/content/base/blocks/glass.json b/res/content/base/blocks/glass.json index 9bd4f021..77f1e3f7 100644 --- a/res/content/base/blocks/glass.json +++ b/res/content/base/blocks/glass.json @@ -4,5 +4,6 @@ "draw-group": 2, "light-passing": true, "sky-light-passing": true, - "translucent": true + "translucent": true, + "base:durability": 0.36 } diff --git a/res/content/base/blocks/grass.json b/res/content/base/blocks/grass.json index 59388ee5..7308d1a1 100644 --- a/res/content/base/blocks/grass.json +++ b/res/content/base/blocks/grass.json @@ -8,5 +8,6 @@ "replaceable": true, "grounded": true, "model": "X", - "hitbox": [0.15, 0.0, 0.15, 0.7, 0.7, 0.7] + "hitbox": [0.15, 0.0, 0.15, 0.7, 0.7, 0.7], + "base:durability": 0.0 } diff --git a/res/content/base/blocks/grass_block.json b/res/content/base/blocks/grass_block.json index c0f6fa48..a6087afc 100644 --- a/res/content/base/blocks/grass_block.json +++ b/res/content/base/blocks/grass_block.json @@ -7,5 +7,6 @@ "grass_top", "grass_side", "grass_side" - ] -} \ No newline at end of file + ], + "base:durability": 1.3 +} diff --git a/res/content/base/blocks/green_lamp.json b/res/content/base/blocks/green_lamp.json index 55264976..b28cae0d 100644 --- a/res/content/base/blocks/green_lamp.json +++ b/res/content/base/blocks/green_lamp.json @@ -2,5 +2,6 @@ "texture": "green_lamp", "emission": [0, 15, 0], "shadeless": true, - "material": "base:glass" + "material": "base:glass", + "base:durability": 0.3 } diff --git a/res/content/base/blocks/ice.json b/res/content/base/blocks/ice.json index 19d9af12..c25c12d3 100644 --- a/res/content/base/blocks/ice.json +++ b/res/content/base/blocks/ice.json @@ -3,5 +3,6 @@ "material": "base:glass", "draw-group": 4, "light-passing": true, - "translucent": true + "translucent": true, + "base:durability": 0.3 } diff --git a/res/content/base/blocks/lamp.json b/res/content/base/blocks/lamp.json index 7d79c1a1..4a1f1ce7 100644 --- a/res/content/base/blocks/lamp.json +++ b/res/content/base/blocks/lamp.json @@ -1,5 +1,6 @@ { "texture": "lamp", "emission": [15, 14, 13], - "shadeless": true + "shadeless": true, + "base:durability": 0.3 } diff --git a/res/content/base/blocks/leaves.json b/res/content/base/blocks/leaves.json index d8731480..cdf9f014 100644 --- a/res/content/base/blocks/leaves.json +++ b/res/content/base/blocks/leaves.json @@ -1,4 +1,5 @@ { "texture": "leaves", - "material": "base:grass" -} \ No newline at end of file + "material": "base:grass", + "base:durability": 0.7 +} diff --git a/res/content/base/blocks/lightbulb.json b/res/content/base/blocks/lightbulb.json index 7a1ca235..ae06aeab 100644 --- a/res/content/base/blocks/lightbulb.json +++ b/res/content/base/blocks/lightbulb.json @@ -8,5 +8,6 @@ "light-passing": true, "sky-light-passing": true, "shadeless": true, - "material": "base:glass" + "material": "base:glass", + "base:durability": 0.2 } diff --git a/res/content/base/blocks/metal.json b/res/content/base/blocks/metal.json index c52d79a2..40542be1 100644 --- a/res/content/base/blocks/metal.json +++ b/res/content/base/blocks/metal.json @@ -1,4 +1,5 @@ { "texture": "metal", - "material": "base:metal" + "material": "base:metal", + "base:durability": 10.0 } diff --git a/res/content/base/blocks/pane.json b/res/content/base/blocks/pane.json index 0eebec49..f3dcf93a 100644 --- a/res/content/base/blocks/pane.json +++ b/res/content/base/blocks/pane.json @@ -12,5 +12,6 @@ "hitbox": [0.0, 0.0, 0.0, 1.0, 1.0, 0.2], "light-passing": true, "sky-light-passing": true, - "rotation": "pane" + "rotation": "pane", + "base:durability": 2.5 } diff --git a/res/content/base/blocks/pipe.json b/res/content/base/blocks/pipe.json index ad297987..b3eb2f25 100644 --- a/res/content/base/blocks/pipe.json +++ b/res/content/base/blocks/pipe.json @@ -11,5 +11,6 @@ "hitbox": [0.25, 0.0, 0.25, 0.5, 1.0, 0.5], "light-passing": true, "rotation": "pipe", - "material": "base:metal" + "material": "base:metal", + "base:durability": 4.7 } diff --git a/res/content/base/blocks/planks.json b/res/content/base/blocks/planks.json index 508fac23..28e80486 100644 --- a/res/content/base/blocks/planks.json +++ b/res/content/base/blocks/planks.json @@ -1,4 +1,5 @@ { "texture": "planks", - "material": "base:wood" -} \ No newline at end of file + "material": "base:wood", + "base:durability": 5.0 +} diff --git a/res/content/base/blocks/red_lamp.json b/res/content/base/blocks/red_lamp.json index 06617a21..ab1a6d15 100644 --- a/res/content/base/blocks/red_lamp.json +++ b/res/content/base/blocks/red_lamp.json @@ -2,5 +2,6 @@ "texture": "red_lamp", "emission": [15, 0, 0], "shadeless": true, - "material": "base:glass" + "material": "base:glass", + "base:durability": 0.3 } diff --git a/res/content/base/blocks/rust.json b/res/content/base/blocks/rust.json index 90e19363..20a8e684 100644 --- a/res/content/base/blocks/rust.json +++ b/res/content/base/blocks/rust.json @@ -1,4 +1,5 @@ { "texture": "rust", - "material": "base:metal" + "material": "base:metal", + "base:durability": 6.6 } diff --git a/res/content/base/blocks/sand.json b/res/content/base/blocks/sand.json index 08a7d4f4..97b4cd02 100644 --- a/res/content/base/blocks/sand.json +++ b/res/content/base/blocks/sand.json @@ -1,4 +1,5 @@ { "texture": "sand", - "material": "base:sand" -} \ No newline at end of file + "material": "base:sand", + "base:durability": 0.7 +} diff --git a/res/content/base/blocks/stone.json b/res/content/base/blocks/stone.json index 3fab36ef..3bd8f6c8 100644 --- a/res/content/base/blocks/stone.json +++ b/res/content/base/blocks/stone.json @@ -1,3 +1,4 @@ { - "texture": "stone" -} \ No newline at end of file + "texture": "stone", + "base:durability": 12.0 +} diff --git a/res/content/base/blocks/torch.json b/res/content/base/blocks/torch.json index 47f02790..cf26bfec 100644 --- a/res/content/base/blocks/torch.json +++ b/res/content/base/blocks/torch.json @@ -31,5 +31,6 @@ "particles:smoke_0", "particles:smoke_1" ] - } + }, + "base:durability": 0.1 } diff --git a/res/content/base/blocks/wood.json b/res/content/base/blocks/wood.json index db77a6bc..0719e060 100644 --- a/res/content/base/blocks/wood.json +++ b/res/content/base/blocks/wood.json @@ -8,5 +8,6 @@ "wood", "wood" ], - "rotation": "pipe" -} \ No newline at end of file + "rotation": "pipe", + "base:durability": 6.0 +} diff --git a/res/content/base/blocks/wooden_door.json b/res/content/base/blocks/wooden_door.json index 59d192b5..8b2103bc 100644 --- a/res/content/base/blocks/wooden_door.json +++ b/res/content/base/blocks/wooden_door.json @@ -14,5 +14,6 @@ "rotation": "pane", "model": "aabb", "hitbox": [0.0, 0.0, 0.8, 1.0, 2.0, 0.2], - "ambient-occlusion": false + "ambient-occlusion": false, + "base:durability": 5.9 } From 51eadd397c091fca8b151b6a7a14f660d56777db Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 26 Nov 2024 09:44:17 +0300 Subject: [PATCH 14/17] fix --- src/logic/scripting/lua/libs/libinventory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/logic/scripting/lua/libs/libinventory.cpp b/src/logic/scripting/lua/libs/libinventory.cpp index bcdc9056..8f1f5385 100644 --- a/src/logic/scripting/lua/libs/libinventory.cpp +++ b/src/logic/scripting/lua/libs/libinventory.cpp @@ -164,7 +164,7 @@ static int l_inventory_move_range(lua::State* L) { auto invBid = lua::tointeger(L, 3); auto slotBegin = lua::isnoneornil(L, 4) ? -1 : lua::tointeger(L, 4); - auto slotEnd = lua::isnoneornil(L, 5) ? -1 : lua::tointeger(L, 5); + auto slotEnd = lua::isnoneornil(L, 5) ? -1 : lua::tointeger(L, 5) + 1; auto invB = get_inventory(invBid, 3); auto& slot = invA->getSlot(slotAid); if (slotBegin == -1) { From b3ac1bd8f4f2838c3a303f17a7ee0a3bffb32521 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 26 Nov 2024 11:01:29 +0300 Subject: [PATCH 15/17] update base:drop component --- res/content/base/modules/util.lua | 4 ++-- res/content/base/scripts/components/drop.lua | 15 +++++++++------ res/content/base/scripts/hud.lua | 2 +- res/scripts/post_content.lua | 12 ++++++++++++ src/logic/scripting/scripting.cpp | 1 + 5 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 res/scripts/post_content.lua diff --git a/res/content/base/modules/util.lua b/res/content/base/modules/util.lua index 6982780b..a4519b53 100644 --- a/res/content/base/modules/util.lua +++ b/res/content/base/modules/util.lua @@ -1,10 +1,10 @@ local base_entities = {} -function base_entities.drop(ppos, itemid, count, ready) +function base_entities.drop(ppos, itemid, count, pickup_delay) return entities.spawn("base:drop", ppos, {base__drop={ id=itemid, count=count, - ready=ready + pickup_delay=pickup_delay }}) end diff --git a/res/content/base/scripts/components/drop.lua b/res/content/base/scripts/components/drop.lua index 9de9bdf7..12e16265 100644 --- a/res/content/base/scripts/components/drop.lua +++ b/res/content/base/scripts/components/drop.lua @@ -4,11 +4,11 @@ local rig = entity.skeleton inair = true target = -1 -ready = false +timer = 0.3 local dropitem = ARGS if dropitem then - ready = dropitem.ready + timer = dropitem.pickup_delay or timer end if SAVED_DATA.item then dropitem.id = item.index(SAVED_DATA.item) @@ -43,7 +43,6 @@ function on_grounded(force) mat4.scale(matrix, scale, matrix) rig:set_matrix(0, matrix) inair = false - ready = true end function on_fall() @@ -53,12 +52,12 @@ end function on_sensor_enter(index, oid) local playerid = hud.get_player() local playerentity = player.get_entity(playerid) - if ready and oid == playerentity and index == 0 then + if timer < 0.0 and oid == playerentity and index == 0 then entity:despawn() inventory.add(player.get_inventory(playerid), dropitem.id, dropitem.count) audio.play_sound_2d("events/pickup", 0.5, 0.8+math.random()*0.4, "regular") end - if index == 1 and ready and oid == playerentity then + if index == 1 and oid == playerentity then target = oid end end @@ -83,8 +82,12 @@ function on_render() end end -function on_update() +function on_update(tps) + timer = timer - 1.0/tps if target ~= -1 then + if timer > 0.0 then + return + end local dir = vec3.sub(entities.get(target).transform:get_pos(), tsf:get_pos()) vec3.normalize(dir, dir) vec3.mul(dir, 10.0, dir) diff --git a/res/content/base/scripts/hud.lua b/res/content/base/scripts/hud.lua index de600599..31125631 100644 --- a/res/content/base/scripts/hud.lua +++ b/res/content/base/scripts/hud.lua @@ -19,7 +19,7 @@ function on_hud_open() local pvel = {player.get_vel(pid)} local ppos = vec3.add({player.get_pos(pid)}, {0, 0.7, 0}) local throw_force = vec3.mul(player.get_dir(pid), DROP_FORCE) - local drop = base_util.drop(ppos, itemid, 1) + local drop = base_util.drop(ppos, itemid, 1, 1.5) local velocity = vec3.add(throw_force, vec3.add(pvel, DROP_INIT_VEL)) drop.rigidbody:set_vel(velocity) end) diff --git a/res/scripts/post_content.lua b/res/scripts/post_content.lua new file mode 100644 index 00000000..3d1ffa33 --- /dev/null +++ b/res/scripts/post_content.lua @@ -0,0 +1,12 @@ +function make_read_only(t) + setmetatable(t, { + __newindex = function() + error("table is read-only") + end + }) +end + +make_read_only(block.properties) +for k,v in pairs(block.properties) do + make_read_only(v) +end diff --git a/src/logic/scripting/scripting.cpp b/src/logic/scripting/scripting.cpp index 543b2732..8fd9b231 100644 --- a/src/logic/scripting/scripting.cpp +++ b/src/logic/scripting/scripting.cpp @@ -195,6 +195,7 @@ void scripting::on_content_load(Content* content) { lua::setfield(L, "properties"); lua::pop(L); } + load_script(fs::path("post_content.lua"), true); load_script(fs::path("stdcmd.lua"), true); } From 1cd890ff8839cca7c0e1110da8d1a569bf57cb89 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 26 Nov 2024 11:21:04 +0300 Subject: [PATCH 16/17] add config/user-props.toml combined object --- res/content/base/config/user-props.toml | 1 + res/scripts/post_content.lua | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 res/content/base/config/user-props.toml diff --git a/res/content/base/config/user-props.toml b/res/content/base/config/user-props.toml new file mode 100644 index 00000000..b7306ba1 --- /dev/null +++ b/res/content/base/config/user-props.toml @@ -0,0 +1 @@ +"base:durability" = {} diff --git a/res/scripts/post_content.lua b/res/scripts/post_content.lua index 3d1ffa33..56d66a5c 100644 --- a/res/scripts/post_content.lua +++ b/res/scripts/post_content.lua @@ -1,4 +1,19 @@ -function make_read_only(t) +local user_props = file.read_combined_object("config/user-props.toml") +local names = {} +for name, _ in pairs(user_props) do + table.insert(names, name) +end +-- remove undefined properties +for id, blockprops in pairs(block.properties) do + for propname, value in pairs(blockprops) do + if propname:find(':') and not table.has(names, propname) then + print("erase property", propname) + blockprops[propname] = nil + end + end +end + +local function make_read_only(t) setmetatable(t, { __newindex = function() error("table is read-only") From b74b280009bb81d70c5b79cfcd73c233e3f60115 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 26 Nov 2024 11:27:52 +0300 Subject: [PATCH 17/17] add ui 'id' read-only property --- src/logic/scripting/lua/libs/libgui.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/logic/scripting/lua/libs/libgui.cpp b/src/logic/scripting/lua/libs/libgui.cpp index c83e7410..56239fac 100644 --- a/src/logic/scripting/lua/libs/libgui.cpp +++ b/src/logic/scripting/lua/libs/libgui.cpp @@ -334,7 +334,9 @@ static int p_set_interval(UINode* node, lua::State* L) { static int p_get_content_offset(UINode* node, lua::State* L) { return lua::pushvec(L, node->getContentOffset()); } - +static int p_get_id(UINode* node, lua::State* L) { + return lua::pushstring(L, node->getId()); +} static int p_get_color(UINode* node, lua::State* L) { return lua::pushcolor(L, node->getColor()); } @@ -390,6 +392,7 @@ static int l_gui_getattr(lua::State* L) { std::string_view, std::function> getters { + {"id", p_get_id}, {"color", p_get_color}, {"hoverColor", p_get_hover_color}, {"pressedColor", p_get_pressed_color},