very fast and simple FPS control using Sparky collision 2 by thebulk716th Jul 2006 14:15
|
---|
Summary this source contains two gosubs that just need getting thrown into your code, along with the Sparky collision dll 2 (free and lush), and you get a sweet FPS control system up and r Description Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com rem the following code is set as two gosubs... call the "setup", before the main loop and rem the "handle_player" during the main loop. all you have to do is set the "player=X" rem to a free number (ex: player=100) and you are ready to go! full FPS physics on any geometry!!! setup: rem load land load object "media\land.x",2 MAKE MEMBLOCK 1,1000 SC_setupComplexObject 2,1,3 rem make player player=X make object sphere player,50 position object player,0,100,0 SC_setupObject player,1,1 hide object player return `-------------------------------------------------------------------------------------------- handle_player: position camera 0,curvevalue (object position x(player),camera position x(0),2),curvevalue (object position y(player)+25,camera position y(0),2),curvevalue (object position z(player),camera position z(0),5) rem FPS cam block oldcamy#=camy# oldcamx#=camx# camy#= wrapvalue(camy#+mousemoveY()*0.2) camx#= wrapvalue(camx#+mousemoveX()*0.2) if camy#>70 and camy#<180 then camy#=70 if camy#<300 and camy#>200 then camy#=299 yrotate camera curveangle(camx#,oldcamx#,25) xrotate camera curveangle(camy#,oldcamy#,25) rem record old position oldx#=object position x(player) oldy#=object position y(player) oldz#=object position z(player) rem handle forwards if keystate(17)=1 speed#=speed#+1.5 yrotate object player,camera angle y(0) endif rem handle backwards if keystate(31)=1 speed#=speed#+1.5 yrotate object player,camera angle y(0)+180 endif rem handle left if keystate(30)=1 speed#=speed#+1.5 yrotate object player,camera angle y(0)+270 endif rem handle right if keystate(32)=1 speed#=speed#+1.5 yrotate object player,camera angle y(0)+90 endif rem handle diagonals if keystate(17)=1 and keystate(32)=1 speed#=speed#+1.5 yrotate object player,camera angle y(0)+45 endif if keystate(17)=1 and keystate(30)=1 speed#=speed#+1.5 yrotate object player,camera angle y(0)+315 endif if keystate(31)=1 and keystate(30)=1 speed#=speed#+1.5 yrotate object player,camera angle y(0)+225 endif if keystate(31)=1 and keystate(32)=1 speed#=speed#+1.5 yrotate object player,camera angle y(0)+135 endif rem speed limits if speed#>10 then speed#=10 if speed#<0 then speed#=0 rem speed calculation if speed#>0 then move object player,speed# speed#=speed#-0.5 rem player new position newx#=object position x(player) newy#=object position y(player) newz#=object position z(player) rem handle jumping and gravity if spacekey()=1 and canjump=0 jump#=10 canjump=1 endif if spacekey()=0 and height#<30 then canjump=0 rem calculate height height#=SC_intersectObject ( 0,object position x(player),object position y(player),object position z(player), object position x(player),object position y(player)-100000,object position z(player)) cieling#=SC_intersectObject ( 0,object position x(player),object position y(player),object position z(player), object position x(player),object position y(player)+100,object position z(player)) IF height#<26 gravity#=0 endif IF cieling#<20 and cieling#>0 jump#=0 endif rem handle gravity if jump#>0 position object player,object position x(player),object position y(player)+jump#,object position z(player) jump#=jump#-0.5 endif if jump#<1 position object player,object position x(player),object position y(player)-gravity#,object position z(player) gravity#=gravity#+0.5 endif rem handle on ground calculation if height#<25 then position object player,object position x(player),object position y(player)+(25-height#),object position z(player) rem handle sliding using Sparky slide#=SC_sphereSlide ( 0, oldx#, oldy#, oldz#, newx#, newy#, newz#,25, player ) slidex#=SC_getCollisionSlideX () slidez#=SC_getCollisionSlideZ () if slide#>0 position object player,slidex#,object position y(player),object position z(player) endif if slide#>0 position object player,object position x(player),object position y(player),slidez# endif slidex#=0 slidey#=0 slidez#=0 return |