I kinda stopped using DarkPhysics, but here was my code.
// Dark GDK - The Game Creators - www.thegamecreators.com
// the wizard has created a very simple project that uses Dark GDK
// it contains the basic code for a GDK application
// whenever using Dark GDK you must ensure you include the header file
#include "DarkGDK.h"
#include "DarkPhysics.h"
void MakeLevel();
void MakePlayer();
void MovePlayer();
// the main entry point for the application is this function
void DarkGDK ( void )
{
// turn on sync rate and set maximum rate to 60 fps
dbSyncOn ( );
dbSyncRate ( 60 );
dbSetDir("Files");
// Setup Physx
dbPhyStart();
MakeLevel();
MakePlayer();
// our main loop
while ( LoopGDK ( ) )
{
dbPhyUpdate();
MovePlayer();
dbText(0,0,dbStr(dbObjectPositionY(2)));
// update the screen
dbSync ( );
}
// return back to windows
return;
}
void MakeLevel()
{
//dbLoadObject("level1.dbo",1);
dbLoadObject("double_dual/double_dual.dbo",1);
dbScaleObject(1,50,50,50);
dbPositionObject(1,0,0,0);
dbPhyMakeRigidBodyStaticMesh(1);
dbSetObjectCollisionToPolygons(1);
}
void MakePlayer()
{
dbMakeObjectBox(2,5,5,5);
dbPositionObject(2,0,740,0);
dbPhyMakeBoxCharacterController(2, dbObjectPositionX(2), dbObjectPositionY(2), dbObjectPositionZ(2), 2.5, 2.5, 2.5, 1, 1.5, 45.0);
dbSetObjectCollisionToPolygons(2);
//dbHideObject(2);
}
float fCameraAngleX = 0.0f;
float fCameraAngleY = 0.0f;
int jumptimer = 0;
float jumpspeed = -250;
float jumptime = 31;
float jump = 0;
float startgy= 0;
float oldgy = 0;
float jgy = 0;
float oldjgy = 0;
void MovePlayer()
{
// Position Camera
dbPositionCamera(dbObjectPositionX(2),dbObjectPositionY(2)+20,dbObjectPositionZ(2));
dbRotateCamera(dbObjectAngleX(2),dbObjectAngleY(2),dbObjectAngleZ(2));
dbYRotateObject( 2,dbObjectAngleY(2) + dbMouseMoveX()/3.0f );
//dbXRotateObject( 2,dbObjectAngleX(2) + dbMouseMoveY()/3.0f );
// create a rotation axis based on mouse movement
fCameraAngleX = dbWrapValue ( fCameraAngleX + dbMouseMoveY ( ) * 0.4f );
fCameraAngleY = dbWrapValue ( fCameraAngleY + dbMouseMoveX ( ) * 0.4f );
// rotate camera
dbXRotateCamera ( fCameraAngleX );
//dbYRotateCamera ( fCameraAngleY );
if(fCameraAngleX > 80 && fCameraAngleX < 180)
{
fCameraAngleX = 80;
}
if(fCameraAngleX < 270 && fCameraAngleX > 180)
{
fCameraAngleX = 270;
}
//Fixes gravity
dbPhyMoveCharacterController(2,1);
dbPhyMoveCharacterController(2,-1);
dbPhyRayCastAllShapes(dbObjectPositionX(2),dbObjectPositionY(2),dbObjectPositionZ(2),0,-1,0);
int colliding;
int jumptimer;
int jumping;
//colliding = dbObjectCollision(1,2);
/*
if(dbPhyGetRayCastDistance() < 50)
{
colliding = 1;
}
else
{
colliding = 0;
}
dbText(0,50,dbStr(float(colliding)));
dbText(0,63,dbStr(float(jumptimer)));
if ( colliding = 1 )
{
if ( dbSpaceKey() == 1 && jumptimer == 0 )
{
jumping = 1;
dbXRotateObject(2,dbObjectAngleX(2)-(90));
//dbPhyMoveCharacterController(2,500.0);
dbPhySetCharacterControllerDisplacement(2,0,-500);
dbXRotateObject(2,dbObjectAngleX(2)+(90));
jumptimer = 50;
}
else
}
if( colliding == 1 && jumptimer > 0 )
{
jumptimer--;
}
*/
oldjgy = dbObjectPositionY(2);
dbPhySetCharacterControllerDisplacement(2,98,0);
dbText(0,50,dbStr(jump));
if ( dbSpaceKey() == 1 && jump == 0 )
{
startgy = dbObjectPositionY( 2 );
jump = 1;
oldgy = 0;
}
if ( jump > 0 )
{
//this checks to see if characher has a restricted jump ( platform above the head )
if ( dbObjectPositionY( 2 ) == oldgy )
{
jump = jumptime - 1;
}
oldgy = dbObjectPositionY( 2 );
//move charachter up
dbPhySetCharacterControllerDisplacement(2,0,jumpspeed);
//displacement only seems to work when characher is moving - so move it a wee bit then back a wee bit
dbPhyMoveCharacterController(2,0.1);
dbPhyMoveCharacterController(2,-0.1);
jump = jump + 1; //incrament timer
if ( jump == jumptime )
{
jump = -1;
}
}
if( jump < 0 )
{
jump = jump - 1;
if ( jump < ( 0 - jumptime ) )
{
jgy = dbObjectPositionY( 2 );
if ( jgy == oldjgy )
{
jump = 0;
}
}
}
if(dbKeyState(17) == 1)
{
dbPhyMoveCharacterController(2, 200.0);
}
if(dbKeyState(31) == 1)
{
dbPhyMoveCharacterController(2, -200.0);
}
if(dbKeyState(30) == 1)
{
dbPhySetCharacterControllerDisplacement(2,0,0);
dbYRotateObject(2,dbObjectAngleY(2)-(90.0));
dbPhyMoveCharacterController(2,200.0);
dbYRotateObject(2,dbObjectAngleY(2)+(90.0));
}
if(dbKeyState(32) == 1)
{
dbPhySetCharacterControllerDisplacement(2,0,0);
dbYRotateObject(2,dbObjectAngleY(2)+(90.0));
dbPhyMoveCharacterController(2,200.0);
dbYRotateObject(2,dbObjectAngleY(2)-(90.0));
}
dbXRotateObject(2,dbObjectAngleX(2)+(90));
dbPhyMoveCharacterController(2,200.0);
dbXRotateObject(2,dbObjectAngleX(2)-(90));
}