Collision Detection

lkjoel
Member
 
Posts: 778
Joined: Wed Feb 29, 2012 19:27

Collision Detection

by lkjoel » Sun Jul 01, 2012 15:31

I'm trying to write player collision detection (I'm making a teleporter that works like a nether pearl), but I can't seem to figure out how.
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)
My mods: The Nether | Doctor Who (WIP)

I have quit minetest ... again. I am heavily unimpressed by both the game and the community.
 

Keriz
Member
 
Posts: 20
Joined: Mon Jul 02, 2012 16:04

by Keriz » Sat Jul 07, 2012 11:35

Can you explain me how do you do that ?

thank you
 

User avatar
Calinou
Member
 
Posts: 3124
Joined: Mon Aug 01, 2011 14:26
GitHub: Calinou
IRC: Calinou
In-game: Calinou

by Calinou » Sat Jul 07, 2012 12:49

Proper player collision detection would have to be done in C++, client-side.
._.
 


Return to WIP Mods

Who is online

Users browsing this forum: No registered users and 18 guests

cron