mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 10:03:45 +01:00
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
This commit is contained in:
parent
5f489efc69
commit
bb225672f9
@ -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({
|
||||
|
Loading…
Reference in New Issue
Block a user