Skip to content

Commit

Permalink
Fix dropped item look (#6370)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
HybridDog authored and nerzhul committed Sep 11, 2017
1 parent 5f489ef commit bb22567
Showing 1 changed file with 15 additions and 12 deletions.
27 changes: 15 additions & 12 deletions builtin/game/item_entity.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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({
Expand Down

0 comments on commit bb22567

Please sign in to comment.