#include <acknex.h>
#include <default.c>
#include <ackphysx.h>
void main()
{
/* Init */
wait(1);
level_load(NULL);
physX_open();
camera.x = 218;
camera.y = 442;
camera.z = 81;
camera.pan = 247;
ENTITY* ground = ent_create(CUBE_MDL,vector(0,0,0),NULL);
vec_set(ground.scale_x,vector(100,100,1));
pXent_settype(ground,PH_STATIC,PH_BOX);
pXent_setfriction(ground,90);
/* Vehicle */
var motion[6] = { 0, 0, 0, NX_D6JOINT_MOTION_FREE, 0, 0};
var drive[6] = { 0, 0, 0, 0, 0, 0 };
var motionRot[6] = { 0, 0, 0, 0, 0, NX_D6JOINT_MOTION_LIMITED};
var driveRot[6] = { 0, 0, 0, 0, 0, 0 };
VECTOR pos;
vec_set(pos, vector(0,0,100));
ENTITY *chassis = ent_create(CUBE_MDL, pos, NULL);
vec_set(chassis.scale_x, vector(10,5,4));
pXent_settype(chassis, PH_RIGID, PH_BOX);
pXent_setgroup(chassis, 2);
pXent_setmass(chassis, 50);
ENTITY *wheel1Rot = ent_create(CUBE_MDL, pos, NULL);
vec_add(wheel1Rot.x, vector(60,60,0));
pXent_settype(wheel1Rot, PH_RIGID, PH_BOX);
pXent_setgroup(wheel1Rot, 2);
pXent_setmass(wheel1Rot, 30);
pXcon_add(PH_6DJOINT, wheel1Rot, chassis, 0);
pXcon_setparams1(wheel1Rot, wheel1Rot.x, NULL, vector(999,999,999));
pXcon_setparams2(wheel1Rot, vector(30,30,30), vector(0,30,0), vector(999,999,999));
pXcon_set6djoint(wheel1Rot, motionRot, driveRot);
ENTITY *wheel2Rot = ent_create(CUBE_MDL, pos, NULL);
vec_add(wheel2Rot.x, vector(60,-60,0));
pXent_settype(wheel2Rot, PH_RIGID, PH_BOX);
pXent_setgroup(wheel2Rot, 2);
pXent_setmass(wheel2Rot, 30);
pXcon_add(PH_6DJOINT, wheel2Rot, chassis, 0);
pXcon_setparams1(wheel2Rot, wheel2Rot.x, NULL, vector(999,999,999));
pXcon_setparams2(wheel2Rot, vector(30,30,30), vector(0,30,0), vector(999,999,999));
pXcon_set6djoint(wheel2Rot, motionRot, driveRot);
ENTITY *wheel1 = ent_create(CUBE_MDL, pos, NULL);
vec_fill(wheel1.scale_x, 2);
vec_add(wheel1.x, vector(60,60,-32));
pXent_settype(wheel1, PH_RIGID, PH_SPHERE);
pXent_setgroup(wheel1, 2);
pXent_setmass(wheel1, 30);
pXcon_add(PH_6DJOINT, wheel1, wheel1Rot, 0);
pXcon_setparams1(wheel1, wheel1.x, NULL, NULL);
pXcon_setparams2(wheel1, vector(30,30,30), vector(0,30,0), vector(999,999,999));
pXcon_set6djoint(wheel1, motion, drive);
ENTITY *wheel2 = ent_create(CUBE_MDL, pos, NULL);
vec_fill(wheel2.scale_x, 2);
vec_add(wheel2.x, vector(60,-60,-32));
pXent_settype(wheel2, PH_RIGID, PH_SPHERE);
pXent_setgroup(wheel2, 2);
pXent_setmass(wheel2, 30);
pXcon_add(PH_6DJOINT, wheel2, wheel2Rot, 0);
pXcon_setparams1(wheel2, wheel2.x, NULL, NULL);
pXcon_set6djoint(wheel2, motion, drive);
ENTITY *wheel3 = ent_create(CUBE_MDL, pos, NULL);
vec_fill(wheel3.scale_x, 2);
vec_add(wheel3.x, vector(-60,60,-32));
pXent_settype(wheel3, PH_RIGID, PH_SPHERE);
pXent_setgroup(wheel3, 2);
pXent_setmass(wheel3, 30);
pXcon_add(PH_6DJOINT, wheel3, chassis, 0);
pXcon_setparams1(wheel3, wheel3.x, NULL, NULL);
pXcon_set6djoint(wheel3, motion, drive);
ENTITY *wheel4 = ent_create(CUBE_MDL, pos, NULL);
vec_fill(wheel4.scale_x, 2);
vec_add(wheel4.x, vector(-60,-60,-32));
pXent_settype(wheel4, PH_RIGID, PH_SPHERE);
pXent_setgroup(wheel4, 2);
pXent_setmass(wheel4, 30);
pXcon_add(PH_6DJOINT, wheel4, chassis, 0);
pXcon_setparams1(wheel4, wheel4.x, NULL, NULL);
pXcon_set6djoint(wheel4, motion, drive);
var accel;
var steer;
while(1)
{
accel = (key_w-key_s)*500;
steer = (key_a-key_d);
if(!steer)
{
pXcon_setparams2(wheel1Rot, vector(30,30,30), vector(-0.1,0.1,0), vector(999,999,999));
pXcon_setparams2(wheel2Rot, vector(30,30,30), vector(-0.1,0.1,0), vector(999,999,999));
}
else if(sign(steer) == -1)
{
pXcon_setparams2(wheel1Rot, vector(30,30,30), vector(-0.1,30,0), vector(999,999,999));
pXcon_setparams2(wheel2Rot, vector(30,30,30), vector(-0.1,30,0), vector(999,999,999));
}
else
{
pXcon_setparams2(wheel1Rot, vector(30,30,30), vector(-30,0.1,0), vector(999,999,999));
pXcon_setparams2(wheel2Rot, vector(30,30,30), vector(-30,0.1,0), vector(999,999,999));
}
pXent_addtorquelocal(wheel1Rot, vector(0,0,steer));
pXent_addtorquelocal(wheel2Rot, vector(0,0,steer));
pXent_addtorquelocal(wheel1, vector(0,accel,0));
pXent_addtorquelocal(wheel2, vector(0,accel,0));
wait(1);
}
}