Boats: Prevent entering 'ignore' nodes

At world edge make boat bounce back into world by inverting speed.
At world base avoid falling into ignore by setting y velocity to 0.
This commit is contained in:
paramat 2018-02-09 04:52:54 +00:00 committed by paramat
parent 1e9c61f241
commit 7754555707

@ -172,15 +172,23 @@ function boat.on_step(self, dtime)
local new_velo local new_velo
local new_acce = {x = 0, y = 0, z = 0} local new_acce = {x = 0, y = 0, z = 0}
if not is_water(p) then if not is_water(p) then
local nodedef = minetest.registered_nodes[minetest.get_node(p).name] local nodename = minetest.get_node(p).name
if (not nodedef) or nodedef.walkable then local nodedef = minetest.registered_nodes[nodename]
if nodename == "ignore" then
-- at world edge bounce boat back into world
self.v = -self.v
-- at world base avoid falling into ignore
new_velo = get_velocity(self.v, self.object:getyaw(), 0)
elseif (not nodedef) or nodedef.walkable then
self.v = 0 self.v = 0
new_acce = {x = 0, y = 1, z = 0} new_acce = {x = 0, y = 1, z = 0}
new_velo = get_velocity(self.v, self.object:getyaw(),
self.object:getvelocity().y)
else else
new_acce = {x = 0, y = -9.8, z = 0} new_acce = {x = 0, y = -9.8, z = 0}
new_velo = get_velocity(self.v, self.object:getyaw(),
self.object:getvelocity().y)
end end
new_velo = get_velocity(self.v, self.object:getyaw(),
self.object:getvelocity().y)
self.object:setpos(self.object:getpos()) self.object:setpos(self.object:getpos())
else else
p.y = p.y + 1 p.y = p.y + 1