summaryrefslogtreecommitdiff
path: root/builtin/game
diff options
context:
space:
mode:
authoryou <ovvv@web.de>2017-09-11 08:20:06 +0200
committerLoïc Blot <nerzhul@users.noreply.github.com>2017-09-11 08:20:06 +0200
commitbb225672f97eecc5c8e09a702d7412748bbfb37d (patch)
tree9b91ebc5ee730e9114d8947bf9b92415baf17b81 /builtin/game
parent5f489efc69e5e8e31891481d412ad569a6e1bcf8 (diff)
downloadminetest-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
Diffstat (limited to 'builtin/game')
-rw-r--r--builtin/game/item_entity.lua27
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({