forked from Mirrorlandia_minetest/minetest
item_entity: Cache collisionbox for use in on_step
I don't have absolute numbers but if calls to get_properties() take up 30%+ of on_step() execution time that's bound to matter.
This commit is contained in:
parent
f128f4cba1
commit
7fff9da71d
@ -59,17 +59,20 @@ core.register_entity(":__builtin:item", {
|
|||||||
math.floor(def.light_source / 2 + 0.5)
|
math.floor(def.light_source / 2 + 0.5)
|
||||||
|
|
||||||
local size_bias = 1e-3 * math.random() -- small random bias to counter Z-fighting
|
local size_bias = 1e-3 * math.random() -- small random bias to counter Z-fighting
|
||||||
|
local c = {-size, -size, -size, size, size, size}
|
||||||
self.object:set_properties({
|
self.object:set_properties({
|
||||||
is_visible = true,
|
is_visible = true,
|
||||||
visual = "wielditem",
|
visual = "wielditem",
|
||||||
textures = {itemname},
|
textures = {itemname},
|
||||||
visual_size = {x = size + size_bias, y = size + size_bias},
|
visual_size = {x = size + size_bias, y = size + size_bias},
|
||||||
collisionbox = {-size, -size, -size, size, size, size},
|
collisionbox = c,
|
||||||
automatic_rotate = math.pi * 0.5 * 0.2 / size,
|
automatic_rotate = math.pi * 0.5 * 0.2 / size,
|
||||||
wield_item = self.itemstring,
|
wield_item = self.itemstring,
|
||||||
glow = glow,
|
glow = glow,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- cache for usage in on_step
|
||||||
|
self._collisionbox = c
|
||||||
end,
|
end,
|
||||||
|
|
||||||
get_staticdata = function(self)
|
get_staticdata = function(self)
|
||||||
@ -94,6 +97,7 @@ core.register_entity(":__builtin:item", {
|
|||||||
self.object:set_armor_groups({immortal = 1})
|
self.object:set_armor_groups({immortal = 1})
|
||||||
self.object:set_velocity({x = 0, y = 2, z = 0})
|
self.object:set_velocity({x = 0, y = 2, z = 0})
|
||||||
self.object:set_acceleration({x = 0, y = -gravity, z = 0})
|
self.object:set_acceleration({x = 0, y = -gravity, z = 0})
|
||||||
|
self._collisionbox = self.initial_properties.collisionbox
|
||||||
self:set_item()
|
self:set_item()
|
||||||
end,
|
end,
|
||||||
|
|
||||||
@ -164,7 +168,7 @@ core.register_entity(":__builtin:item", {
|
|||||||
local pos = self.object:get_pos()
|
local pos = self.object:get_pos()
|
||||||
local node = core.get_node_or_nil({
|
local node = core.get_node_or_nil({
|
||||||
x = pos.x,
|
x = pos.x,
|
||||||
y = pos.y + self.object:get_properties().collisionbox[2] - 0.05,
|
y = pos.y + self._collisionbox[2] - 0.05,
|
||||||
z = pos.z
|
z = pos.z
|
||||||
})
|
})
|
||||||
-- Delete in 'ignore' nodes
|
-- Delete in 'ignore' nodes
|
||||||
@ -177,7 +181,7 @@ core.register_entity(":__builtin:item", {
|
|||||||
if self.force_out then
|
if self.force_out then
|
||||||
-- This code runs after the entity got a push from the is_stuck code.
|
-- This code runs after the entity got a push from the is_stuck code.
|
||||||
-- It makes sure the entity is entirely outside the solid node
|
-- It makes sure the entity is entirely outside the solid node
|
||||||
local c = self.object:get_properties().collisionbox
|
local c = self._collisionbox
|
||||||
local s = self.force_out_start
|
local s = self.force_out_start
|
||||||
local f = self.force_out
|
local f = self.force_out
|
||||||
local ok = (f.x > 0 and pos.x + c[1] > s.x + 0.5) or
|
local ok = (f.x > 0 and pos.x + c[1] > s.x + 0.5) or
|
||||||
|
Loading…
Reference in New Issue
Block a user