private void UpdateVelocity(ref Vector3 direction, float elapsedTimeSec)
{
if (direction.X != 0.0f)
{
// Camera is moving along the x axis.
// Linearly accelerate up to the camera's max speed.
currentVelocity.X += direction.X * acceleration.X * elapsedTimeSec;
if (currentVelocity.X > velocity.X)
currentVelocity.X = velocity.X;
else if (currentVelocity.X < -velocity.X)
currentVelocity.X = -velocity.X;
}
else
{
// Camera is no longer moving along the x axis.
// Linearly decelerate back to stationary state.
if (currentVelocity.X > 0.0f)
{
if ((currentVelocity.X -= acceleration.X * elapsedTimeSec) < 0.0f)
currentVelocity.X = 0.0f;
}
else
{
if ((currentVelocity.X += acceleration.X * elapsedTimeSec) > 0.0f)
currentVelocity.X = 0.0f;
}
}
if (direction.Y != 0.0f)
{
// Camera is moving along the y axis.
// Linearly accelerate up to the camera's max speed.
currentVelocity.Y += direction.Y * acceleration.Y * elapsedTimeSec;
if (currentVelocity.Y > velocity.Y)
currentVelocity.Y = velocity.Y;
else if (currentVelocity.Y < -velocity.Y)
currentVelocity.Y = -velocity.Y;
}
else
{
// Camera is no longer moving along the y axis.
// Linearly decelerate back to stationary state.
if (currentVelocity.Y > 0.0f)
{
if ((currentVelocity.Y -= acceleration.Y * elapsedTimeSec) < 0.0f)
currentVelocity.Y = 0.0f;
}
else
{
if ((currentVelocity.Y += acceleration.Y * elapsedTimeSec) > 0.0f)
currentVelocity.Y = 0.0f;
}
}
if (direction.Z != 0.0f)
{
// Camera is moving along the z axis.
// Linearly accelerate up to the camera's max speed.
currentVelocity.Z += direction.Z * acceleration.Z * elapsedTimeSec;
if (currentVelocity.Z > velocity.Z)
currentVelocity.Z = velocity.Z;
else if (currentVelocity.Z < -velocity.Z)
currentVelocity.Z = -velocity.Z;
}
else
{
// Camera is no longer moving along the z axis.
// Linearly decelerate back to stationary state.
if (currentVelocity.Z > 0.0f)
{
if ((currentVelocity.Z -= acceleration.Z * elapsedTimeSec) < 0.0f)
currentVelocity.Z = 0.0f;
}
else
{
if ((currentVelocity.Z += acceleration.Z * elapsedTimeSec) > 0.0f)
currentVelocity.Z = 0.0f;
}
}
}