I have added more realistic acceleration to the car, and have added "brakes" with the following code. To use the brakes, just tap the 'x' key while the car is moving and it will feel like you are tapping the brakes - to slam the brakes on, just hold down the 'x' key and watch the car skid to a stop. Replace the NewtonVehicle action in your vehicle_playground.wdl file with this:

Code:

action NewtonVehicle
{
var car;
var forward_flag;
var reverse_flag;
var engine_torque;

// save the pointer to the entity as the player
p_vehicle = my;

// create the vehicle
NewtonCreateVehicle (wood_material, VehicleTireEvent, VehicleBeginEvent, VehicleEndEvent);

dll_handle = newtonHandle;
car = NewtonGetBody (my);

// make the car always active
NewtonSetBodyAutoActiveState (car, 0);
NewtonSetBodyActiveState (car, 1);

// asign a special force event to the rover
NewtonSetBodyForceAndTorque (car, VehicleForceEvent);

my.carSteerTorque = 0.0;
my.carEngineTorque = 0.0;
forward_flag = 0.0;
reverse_flag = 0.0;

// this is the vehicle control loop;
while (1) {

// read wheel controls
if(key_a)
{
my.carSteerTorque += .15 * time; // smoothly turn wheels left
if(my.carSteerTorque > 1.0) // clamp
{ my.carSteerTorque = 1.0; }
}
if(key_d)
{
my.carSteerTorque -= .15 * time; // smoothly turn wheels right
if(my.carSteerTorque < -1.0) // clamp
{ my.carSteerTorque = -1.0; }
}
if(key_w)
{
if(forward_flag == 1.0)
{ engine_torque = 0.0;
forward_flag = 0.0;
}
reverse_flag = 1.0;

engine_torque += 10.0 * time;
if(engine_torque >= my.car_maxToque)
{ engine_torque = my.car_maxToque; }
my.carEngineTorque = engine_torque;
my.car_topSpeed = engine_torque * 4;
}
if(key_s)
{
if(reverse_flag == 1.0)
{ engine_torque = 0.0;
reverse_flag = 0.0;
}
forward_flag = 1.0;

engine_torque += 10.0 * time;
if(engine_torque >= my.car_maxToque) // clamp
{ engine_torque = my.car_maxToque; }
my.carEngineTorque = -engine_torque; // transfer calculation
my.car_topSpeed = engine_torque * 4; // Calc topSpeed based on torque level
}
if(key_x) // Apply brakes
{ engine_torque -= 10.0 * time;
if(engine_torque <= 0.0)
{ engine_torque = 0.0; }

if(forward_flag == 0.0) // Car is moving forward
{ my.carEngineTorque = engine_torque; }
if(reverse_flag == 0.0) // Car is moving in reverse
{ my.carEngineTorque = -engine_torque; }
}

// Return turned wheels to straight
if(my.carSteerTorque > 0.0)
{ my.carSteerTorque -= .05 * time; }
if(my.carSteerTorque < 0.0)
{ my.carSteerTorque += .05 * time; }

wait(1);
}
}



Regards, Ron