From 7754555707a6a1bf1e8f4b57788e27e57fde1cd8 Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 9 Feb 2018 04:52:54 +0000 Subject: [PATCH] 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. --- mods/boats/init.lua | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/mods/boats/init.lua b/mods/boats/init.lua index 72ca478f..9e4e5b30 100644 --- a/mods/boats/init.lua +++ b/mods/boats/init.lua @@ -172,15 +172,23 @@ function boat.on_step(self, dtime) local new_velo local new_acce = {x = 0, y = 0, z = 0} if not is_water(p) then - local nodedef = minetest.registered_nodes[minetest.get_node(p).name] - if (not nodedef) or nodedef.walkable then + local nodename = minetest.get_node(p).name + 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 new_acce = {x = 0, y = 1, z = 0} + new_velo = get_velocity(self.v, self.object:getyaw(), + self.object:getvelocity().y) else new_acce = {x = 0, y = -9.8, z = 0} + new_velo = get_velocity(self.v, self.object:getyaw(), + self.object:getvelocity().y) end - new_velo = get_velocity(self.v, self.object:getyaw(), - self.object:getvelocity().y) self.object:setpos(self.object:getpos()) else p.y = p.y + 1