private void UpdateSteeringAngle(float deltaTime) { // TODO: Reduce max steering angle at high speeds. const float MaxAngle = 0.5f; const float SteeringRate = 3; // We limit the amount of change per frame. float change = SteeringRate * deltaTime; float direction = 0; if (_inputService.IsDown(Keys.A)) { direction += 1; } if (_inputService.IsDown(Keys.D)) { direction -= 1; } var gamePadState = _inputService.GetGamePadState(LogicalPlayerIndex.One); direction -= gamePadState.ThumbSticks.Left.X; if (direction != 0) { // Increase steering angle. _steeringAngle = MathHelper.Clamp(_steeringAngle + direction * change, -MaxAngle, +MaxAngle); } else { // Steer back to neutral position (angle 0). if (_steeringAngle > 0) { _steeringAngle = MathHelper.Clamp(_steeringAngle - change, 0, +MaxAngle); } else if (_steeringAngle < 0) { _steeringAngle = MathHelper.Clamp(_steeringAngle + change, -MaxAngle, 0); } // TODO: Maybe we steer back with half rate? // (Pressing a button steers faster than not pressing a button?) } VehicleHelper.SetCarSteeringAngle(_steeringAngle, Vehicle.Wheels[0], Vehicle.Wheels[1], Vehicle.Wheels[2], Vehicle.Wheels[3]); }