From a59864dd74ab104621bd55fc15256a92f2864f8e Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sat, 25 Oct 2014 18:49:28 +0200 Subject: [PATCH] Transport items; do not remove carts in walls --- init.lua | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/init.lua b/init.lua index 6c643ae..cf0ee7c 100644 --- a/init.lua +++ b/init.lua @@ -29,7 +29,8 @@ boost_cart.cart = { velocity = {x=0, y=0, z=0}, -- only used on punch old_dir = {x=0, y=0, z=0}, old_pos = nil, - old_switch = nil + old_switch = nil, + attached_items = {} } function boost_cart.cart:on_rightclick(clicker) @@ -57,12 +58,21 @@ function boost_cart.cart:on_punch(puncher, time_from_last_punch, tool_capabiliti if puncher:get_player_control().sneak then if self.driver then + if self.old_pos then + self.object:setpos(self.old_pos) + end default.player_attached[self.driver] = nil local player = minetest.get_player_by_name(self.driver) if player then player:set_detach() end end + for _,obj_ in ipairs(self.attached_items) do + if obj_ then + obj_:set_detach() + end + end + self.object:remove() puncher:get_inventory():add_item("main", "carts:cart") return @@ -143,7 +153,6 @@ function boost_cart.cart:on_step(dtime) pos = vector.new(expected_pos) self.punch = true end - --minetest.log("action", "Cart moving too fast at "..minetest.pos_to_string(expected_pos)) break end end @@ -241,7 +250,7 @@ function boost_cart.cart:on_step(dtime) if dir.x < 0 then yaw = 0.5 elseif dir.x > 0 then - yaw = 3 / 2 + yaw = 1.5 elseif dir.z < 0 then yaw = 1 end @@ -258,6 +267,16 @@ function boost_cart.cart:on_step(dtime) if self.punch then self.object:setvelocity(vel) self.object:setpos(pos) + + for _,obj_ in ipairs(minetest.get_objects_inside_radius(pos, 1)) do + if not obj_:is_player() and + obj_:get_luaentity() and + not obj_:get_luaentity().physical_state and + obj_:get_luaentity().name == "__builtin:item" then + obj_:set_attach(self.object, "", {x=0, y=0, z=0}, {x=0, y=0, z=0}) + self.attached_items[#self.attached_items + 1] = obj_ + end + end end self.punch = false end