diff options
author | you <ovvv@web.de> | 2017-09-11 08:20:06 +0200 |
---|---|---|
committer | Loïc Blot <nerzhul@users.noreply.github.com> | 2017-09-11 08:20:06 +0200 |
commit | bb225672f97eecc5c8e09a702d7412748bbfb37d (patch) | |
tree | 9b91ebc5ee730e9114d8947bf9b92415baf17b81 | |
parent | 5f489efc69e5e8e31891481d412ad569a6e1bcf8 (diff) | |
download | minetest-bb225672f97eecc5c8e09a702d7412748bbfb37d.tar.gz minetest-bb225672f97eecc5c8e09a702d7412748bbfb37d.tar.bz2 minetest-bb225672f97eecc5c8e09a702d7412748bbfb37d.zip |
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
-rw-r--r-- | builtin/game/item_entity.lua | 27 |
1 files 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({ |