Here is my code:
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
- Code: Select all
pos = user:getpos()
pos.y = pos.y + 2
-- Calculate the position of the user
velocity = {x=xl, y=yl, z=zl}
acceleration = {x=0, y=-.25, z=0}
counter = 0
while true do
if(counter >= 100) then
break
end
local nn = minetest.env:get_node(pos).name
pos.x = pos.x - .5
if minetest.registered_nodes[nn].walkable then
pos.x = pos.x + .5
break
end
pos.x = pos.x + 1
if minetest.registered_nodes[nn].walkable then
pos.x = pos.x - .5
break
end
pos.x = pos.x - .5
pos.z = pos.z - .5
if minetest.registered_nodes[nn].walkable then
pos.z = pos.z + .5
break
end
pos.z = pos.z + 1
if minetest.registered_nodes[nn].walkable then
pos.z = pos.z - .5
break
end
pos.z = pos.z - .5
pos.y = pos.y - 1
if minetest.registered_nodes[nn].walkable then
pos.y = pos.y + 1
break
end
pos.x = pos.x - .5
if minetest.registered_nodes[nn].walkable then
pos.x = pos.x + .5
break
end
pos.x = pos.x + 1
if minetest.registered_nodes[nn].walkable then
pos.x = pos.x - .5
break
end
pos.x = pos.x - .5
pos.z = pos.z - .5
if minetest.registered_nodes[nn].walkable then
pos.z = pos.z + .5
break
end
pos.z = pos.z + 1
if minetest.registered_nodes[nn].walkable then
pos.z = pos.z - .5
break
end
pos.z = pos.z - .5
pos.y = pos.y + 2
if minetest.registered_nodes[nn].walkable then
pos.y = pos.y - 1
break
end
pos.y = pos.y - 1
pos.x = pos.x - .5
if minetest.registered_nodes[nn].walkable then
pos.x = pos.x + .5
break
end
pos.x = pos.x + 1
if minetest.registered_nodes[nn].walkable then
pos.x = pos.x - .5
break
end
pos.x = pos.x - .5
pos.z = pos.z - .5
if minetest.registered_nodes[nn].walkable then
pos.z = pos.z + .5
break
end
pos.z = pos.z + 1
if minetest.registered_nodes[nn].walkable then
pos.z = pos.z - .5
break
end
pos.z = pos.z - .5
pos.x = pos.x + velocity.x
pos.y = pos.y + velocity.y + .5 * acceleration.y
pos.z = pos.z + velocity.z
pos.x = pos.x - .5
if minetest.registered_nodes[nn].walkable then
pos.x = pos.x + .5 - velocity.x
break
end
pos.x = pos.x + 1
if minetest.registered_nodes[nn].walkable then
pos.x = pos.x - .5 - velocity.x
break
end
pos.x = pos.x - .5
pos.z = pos.z - .5
if minetest.registered_nodes[nn].walkable then
pos.z = pos.z + .5 - velocity.z
break
end
pos.z = pos.z + 1
if minetest.registered_nodes[nn].walkable then
pos.z = pos.z - .5 - velocity.z
break
end
pos.z = pos.z - .5
pos.y = pos.y - 1
if minetest.registered_nodes[nn].walkable then
pos.y = pos.y + 1 - velocity.y - .5 * acceleration.y
break
end
pos.x = pos.x - .5
if minetest.registered_nodes[nn].walkable then
pos.x = pos.x + .5 - velocity.x
break
end
pos.x = pos.x + 1
if minetest.registered_nodes[nn].walkable then
pos.x = pos.x - .5 - velocity.x
break
end
pos.x = pos.x - .5
pos.z = pos.z - .5
if minetest.registered_nodes[nn].walkable then
pos.z = pos.z + .5 - velocity.z
break
end
pos.z = pos.z + 1
if minetest.registered_nodes[nn].walkable then
pos.z = pos.z - .5 - velocity.z
break
end
pos.z = pos.z - .5
pos.y = pos.y + 2
if minetest.registered_nodes[nn].walkable then
pos.y = pos.y - 1 - velocity.y - .5 * acceleration.y
break
end
pos.y = pos.y - 1
pos.x = pos.x - .5
if minetest.registered_nodes[nn].walkable then
pos.x = pos.x + .5 - velocity.x
break
end
pos.x = pos.x + 1
if minetest.registered_nodes[nn].walkable then
pos.x = pos.x - .5 - velocity.x
break
end
pos.x = pos.x - .5
pos.z = pos.z - .5
if minetest.registered_nodes[nn].walkable then
pos.z = pos.z + .5 - velocity.z
break
end
pos.z = pos.z + 1
if minetest.registered_nodes[nn].walkable then
pos.z = pos.z - .5 - velocity.z
break
end
pos.z = pos.z - .5
counter = counter + 1
end
user:setpos(pos)