Add in manual interpolation into the item magnet

This commit is contained in:
jordan4ibanez 2021-04-02 21:40:04 -04:00
parent b83b4c55fa
commit 61e812e40a
1 changed files with 20 additions and 7 deletions

View File

@ -9,7 +9,7 @@ item_drop_settings.age = 1.0 --how old a dropped item (_insta_
item_drop_settings.radius_magnet = 2.0 --radius of item magnet. MUST BE LARGER THAN radius_collect! item_drop_settings.radius_magnet = 2.0 --radius of item magnet. MUST BE LARGER THAN radius_collect!
item_drop_settings.xp_radius_magnet = 7.25 --radius of xp magnet. MUST BE LARGER THAN radius_collect! item_drop_settings.xp_radius_magnet = 7.25 --radius of xp magnet. MUST BE LARGER THAN radius_collect!
item_drop_settings.radius_collect = 0.2 --radius of collection item_drop_settings.radius_collect = 0.2 --radius of collection
item_drop_settings.player_collect_height = 1.0 --added to their pos y value item_drop_settings.player_collect_height = 1.1 --added to their pos y value
item_drop_settings.collection_safety = false --do this to prevent items from flying away on laggy servers item_drop_settings.collection_safety = false --do this to prevent items from flying away on laggy servers
item_drop_settings.random_item_velocity = true --this sets random item velocity if velocity is 0 item_drop_settings.random_item_velocity = true --this sets random item velocity if velocity is 0
item_drop_settings.drop_single_item = false --if true, the drop control drops 1 item instead of the entire stack, and sneak+drop drops the stack item_drop_settings.drop_single_item = false --if true, the drop control drops 1 item instead of the entire stack, and sneak+drop drops the stack
@ -101,12 +101,13 @@ minetest.register_globalstep(function(dtime)
}, true) }, true)
check_pickup_achievements(object, player) check_pickup_achievements(object, player)
object:move_to(checkpos, true)
-- Destroy entity -- Destroy entity
-- This just prevents this section to be run again because object:remove() doesn't remove the item immediately. -- This just prevents this section to be run again because object:remove() doesn't remove the item immediately.
object:get_luaentity().target = checkpos
object:get_luaentity()._removed = true object:get_luaentity()._removed = true
object:set_velocity(vector.multiply(vector.subtract(checkpos, object:get_pos()), 10))
object:set_acceleration(vector.multiply(vector.subtract(checkpos, object:get_pos()), 20))
end end
end end
end end
@ -513,12 +514,24 @@ minetest.register_entity(":__builtin:item", {
on_step = function(self, dtime) on_step = function(self, dtime)
if self._removed then if self._removed then
self.object:set_acceleration({x=0,y=0,z=0})
self.object:set_velocity({x=0,y=0,z=0}) self.object:set_properties({
physical = false
})
self.collection_age = self.collection_age + dtime self.collection_age = self.collection_age + dtime
if self.collection_age > 0.15 then if not self.target then
self.object:remove() self.object:remove()
else
local pos = self.object:get_pos()
self.object:set_acceleration(vector.multiply(vector.subtract(self.target, pos), 20))
self.object:set_velocity(vector.multiply(vector.subtract(self.target, pos), 10))
if self.collection_age >= 0.3 or vector.distance(pos, self.target) <= 0.08 then
self.object:remove()
end
end end
return return
end end
self.age = self.age + dtime self.age = self.age + dtime