forked from minetest/minetest_game
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:
parent
1e9c61f241
commit
7754555707
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user