#include "DarkGDK.h"
#include "physics.h"
physics myPhysics;
int Square = 1000;
void SetupWorld();
void displayData();
void Create_Character ( unsigned int ModelNumber, unsigned int CameraModel );
void Camera_Control ( unsigned int ModelNumber, unsigned int CameraModel );
void KeyControl();
void DarkGDK ( void )
{
myPhysics.start(true, 0.5, 0.5, 0.5);
myPhysics.setGravity(0, -9.8, 0);
dbSyncOn ( );
dbSyncRate ( 60 );
dbRandomize ( dbTimer ( ) );
SetupWorld ( );
Create_Character ( 99, 98 );
myPhysics.simulate();
while ( LoopGDK ( ) )
{
myPhysics.update();
KeyControl ( );
Camera_Control ( 99, 98 );
displayData();
dbSync ( );
dbWait ( 1 );
}
myPhysics.stop();
return;
}
void SetupWorld ( )
{
dbMakeObjectBox ( 100, 250, 1, 250 );
myPhysics.makeBox ( 100, true, 1 );
myPhysics.kinematicOn ( 100 );
dbColorObject ( 100, dbRgb ( dbRnd ( 255 ), dbRnd ( 255 ), dbRnd ( 255 ) ) );
dbPositionObject ( 100, 0, -10, 0 );
for ( int a = 0; a < 8; a++ )
{
for ( int b = 0; b < 8; b++ )
{
for ( int c = 0; c < 8; c++ )
{
dbMakeObjectBox ( Square, 1, 1, 1 );
dbPositionObject ( Square, a, b, c );
myPhysics.makeBox ( Square, true, 1.0f );
dbColorObject ( Square, dbRgb ( dbRnd ( 255 ), dbRnd ( 255 ), dbRnd ( 255 ) ) );
Square = Square + 1;
}
}
}
}
void displayData()
{
dbText(0, 0, dbStr(dbObjectPositionX(99)));
dbText(0, 10, dbStr(dbObjectPositionY(99)));
dbText(0, 20, dbStr(dbObjectPositionZ(99)));
dbText(0, 60, "FPS: ");
dbText(150, 60, dbStr(dbScreenFPS()));
dbText(0, 75, "Poly Count: ");
dbText(150, 75, dbStr(dbStatistic(1)));
}
void Create_Character ( unsigned int ModelNumber, unsigned int CameraModel )
{
dbMakeObjectBox ( ModelNumber, 1, 1, 1 );
dbPositionObject ( ModelNumber, 30, 1, 30 );
myPhysics.makeCharacterController ( ModelNumber, 1, 45 );
dbRotateObject ( ModelNumber, 0, 0, 0 );
dbMakeObjectSphere ( CameraModel, 1 );
dbScaleObject ( CameraModel, 0.0001f, 0.0001f, 0.0001f );
dbPositionObject ( CameraModel, dbObjectPositionX(ModelNumber),
dbObjectPositionY(ModelNumber) + 500,
dbObjectPositionZ(ModelNumber) );
}
void Camera_Control ( unsigned int ModelNumber, unsigned int CameraModel )
{
int beforeclick1 = dbMouseMoveX();
int beforeclick2 = dbMouseMoveY();
if ( dbMouseClick() == 2 )
{
dbHideMouse();
dbXRotateObject ( CameraModel, dbObjectAngleX(CameraModel) - (dbMouseMoveY() - beforeclick2)/4.0f );
dbYRotateObject ( ModelNumber, dbObjectAngleY(ModelNumber) - (dbMouseMoveX() - beforeclick1)/4.0f );
} else {
dbShowMouse();
}
dbPositionObject ( CameraModel, dbObjectPositionX(ModelNumber), dbObjectPositionY(ModelNumber) + 2, dbObjectPositionZ(ModelNumber) );
dbPositionCamera ( dbObjectPositionX(CameraModel), dbObjectPositionY(CameraModel), dbObjectPositionZ(CameraModel) );
dbRotateCamera ( dbObjectAngleX(CameraModel), dbObjectAngleY(ModelNumber), dbObjectAngleZ(CameraModel) );
dbMoveCamera ( -5 );
}
void KeyControl()
{
float speed = 0;
// KEYS
if (dbUpKey())
{
speed = 0.2;
}
if (dbDownKey())
{
speed = -0.2;
}
float gravity = -0.5;
float angleY = dbObjectAngleY(99);
float moveX = dbSin(angleY); // Calculate X component
float moveZ = dbCos(angleY); // Calculate Z component
myPhysics.moveCharacterController(99, moveX * speed, gravity, moveZ * speed);
}
If you use that code there and exit the game it throws an exception, for me at least.