Page 1 of 1

Vehicle not driving forward

Posted: Sat Sep 29, 2012 1:03 pm
by CrazyXBMax
Hi everyone,

I have a problem with the Vehicles in BepuPhysics. I'm using the Vehicle class from the demos but my vehicle is only driving backwards and not forward.

This is the code for taking input and applying it to the car. ForwardSpeed is 30 and BackwardSpeed -13.

Code: Select all

if (keyboardInput.IsKeyDown(MOIS.KeyCode.KC_UP))
{
         //Drive
         //Vehicle.Wheels[1].DrivingMotor.MaximumForwardForce = 100000;
         //Vehicle.Wheels[3].DrivingMotor.MaximumForwardForce = 100000;
         Vehicle.Wheels[1].DrivingMotor.TargetSpeed = ForwardSpeed;
         Vehicle.Wheels[3].DrivingMotor.TargetSpeed = ForwardSpeed;
}

if (keyboardInput.IsKeyDown(MOIS.KeyCode.KC_DOWN))
{
    //Reverse
    //Vehicle.Wheels[1].DrivingMotor.MaximumBackwardForce = 100000;
    //Vehicle.Wheels[3].DrivingMotor.MaximumBackwardForce = 100000;
    Vehicle.Wheels[1].DrivingMotor.TargetSpeed = BackwardSpeed;
    Vehicle.Wheels[3].DrivingMotor.TargetSpeed = BackwardSpeed;
}
else
{
    //Idle
    Vehicle.Wheels[1].DrivingMotor.TargetSpeed = 0;
    Vehicle.Wheels[3].DrivingMotor.TargetSpeed = 0;
}
if (keyboardInput.IsKeyDown(MOIS.KeyCode.KC_SPACE))
{
    //Brake
    foreach (Wheel wheel in Vehicle.Wheels)
    {
        wheel.Brake.IsBraking = true;
    }
}
else
{
    //Release brake
    foreach (Wheel wheel in Vehicle.Wheels)
    {
        wheel.Brake.IsBraking = false;
    }
}
The rest of the code including the steering is directly taken from the VehicleDemo code. Is there anything wrong with this code?

Re: Vehicle not driving forward

Posted: Sat Sep 29, 2012 2:02 pm
by 6thVenom

Code: Select all

if (keyboardInput.IsKeyDown(MOIS.KeyCode.KC_UP))
{
         //Drive
         Vehicle.Wheels[1].DrivingMotor.TargetSpeed = ForwardSpeed;
         Vehicle.Wheels[3].DrivingMotor.TargetSpeed = ForwardSpeed;
}

if (keyboardInput.IsKeyDown(MOIS.KeyCode.KC_DOWN))
{
    //Reverse
    Vehicle.Wheels[1].DrivingMotor.TargetSpeed = BackwardSpeed;
    Vehicle.Wheels[3].DrivingMotor.TargetSpeed = BackwardSpeed;
}
else
{
    //Idle
    Vehicle.Wheels[1].DrivingMotor.TargetSpeed = 0;
    Vehicle.Wheels[3].DrivingMotor.TargetSpeed = 0;
}
With that, if you're not pressing KC_DOWN the last TargetSpeed set is 0, even if you're pressing KC_UP.


You should try:

Code: Select all

if (keyboardInput.IsKeyDown(MOIS.KeyCode.KC_DOWN))
{
    //Reverse
    Vehicle.Wheels[1].DrivingMotor.TargetSpeed = BackwardSpeed;
    Vehicle.Wheels[3].DrivingMotor.TargetSpeed = BackwardSpeed;
}
else if (keyboardInput.IsKeyDown(MOIS.KeyCode.KC_UP))
{
         //Drive
         Vehicle.Wheels[1].DrivingMotor.TargetSpeed = ForwardSpeed;
         Vehicle.Wheels[3].DrivingMotor.TargetSpeed = ForwardSpeed;
}
else
{
    //Idle
    Vehicle.Wheels[1].DrivingMotor.TargetSpeed = 0;
    Vehicle.Wheels[3].DrivingMotor.TargetSpeed = 0;
}
So that KC_DOWN always prior on KC_UP (for braking), then only if none, TargetSpeed = 0.

Re: Vehicle not driving forward

Posted: Sat Sep 29, 2012 6:15 pm
by CrazyXBMax
Thank you! I can't believe I didn't see that.