The game is 2D top down. I'm using the delta X movement of the mouse per frame to add a rotational force to my spaceship.
So it looks something like this:
In my input component:
void playerControl()
{
float deltaX = input->getMouseXDelta();
physics->addRotationForce(deltaX);
input->clearMouseDeltas();
...the rest of the input...
}
in my physics component.......
void addRotationForce(float amount)
{
rotationForce+=amount;
}
//then on each timestep
void onUpdate(float deltaTime)
{
//apply forces
rotationalAcceleration = rotationForce / mass;
rotationalVelocity += (rotationalAcceleration * deltaTime);
heading += rotationalVelocity * deltaTime;
//simple friction
rotationalVelocity += (rotationalFriction*-rotationalVelocity*deltaTime);
//reset forces
rotationForce=0;
rotationalAcceleration = 0;
..other physics stuff...
}
When I enable vsync or run on a slower machine, the mouse inputs seem to get massively multiplied and the ship spins too fast.
The input is coming from an Irrlicht device, which takes the windows mouse movement messages and adds them to a deltaX, then resets the cursor to screen centre. As you can see I reset the deltas every time I read them above.
It seems to me the physics isn't producing the same output when the mouse input forces are supplied in lots of small, frequent values (ie: when running at 500fps) when compared with far less, larger values (ie: running at 60fps with vsync).
I'm guessing the smaller, more frequent values may be getting 'eaten up' by the friction?
What am I doing wrong?
TIA
D