From bb225672f97eecc5c8e09a702d7412748bbfb37d Mon Sep 17 00:00:00 2001 From: you Date: Mon, 11 Sep 2017 08:20:06 +0200 Subject: [PATCH] Fix dropped item look (#6370) * Abort set_item when it does nothing * Do not adjust dropped item size linearly Instead use cube root because the item count is proportional to the volume, not to the length. * Make the item rotate slower when it's bigger Bigger items chafe more on the ground, so they can't rotate as fast as small ones * Fix items flying in air --- builtin/game/item_entity.lua | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/builtin/game/item_entity.lua b/builtin/game/item_entity.lua index 0026c1387..718c94fb2 100644 --- a/builtin/game/item_entity.lua +++ b/builtin/game/item_entity.lua @@ -37,32 +37,35 @@ core.register_entity(":__builtin:item", { slippery_state = false, age = 0, - set_item = function(self, itemstring) - local stack = ItemStack(itemstring or self.itemstring) + set_item = function(self, item) + local stack = ItemStack(item or self.itemstring) self.itemstring = stack:to_string() + if self.itemstring == "" then + -- item not yet known + return + end -- Backwards compatibility: old clients use the texture -- to get the type of the item - local itemname = stack:get_name() + local itemname = stack:is_known() and stack:get_name() or "unknown" local max_count = stack:get_stack_max() local count = math.min(stack:get_count(), max_count) - local size = 0.2 + 0.1 * (count / max_count) - - if not stack:is_known() then - itemname = "unknown" - end + local size = 0.2 + 0.1 * (count / max_count) ^ (1 / 3) + local coll_height = size * 0.75 self.object:set_properties({ is_visible = true, visual = "wielditem", textures = {itemname}, visual_size = {x = size, y = size}, - collisionbox = {-size, -size, -size, size, size, size}, - automatic_rotate = math.pi * 0.5, + collisionbox = {-size, -coll_height, -size, + size, coll_height, size}, + selectionbox = {-size, -size, -size, size, size, size}, + automatic_rotate = math.pi * 0.5 * 0.2 / size, wield_item = self.itemstring, }) - + end, get_staticdata = function(self) @@ -154,7 +157,7 @@ core.register_entity(":__builtin:item", { is_slippery = slippery ~= 0 if is_slippery then is_physical = true - + -- Horizontal deceleration local slip_factor = 4.0 / (slippery + 4) self.object:set_acceleration({