summaryrefslogtreecommitdiff
path: root/builtin/game
diff options
context:
space:
mode:
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({