private void processCameraCommon(Ped player, Vehicle veh) { smoothIsInAir = Mathr.Lerp(smoothIsInAir, veh.IsInAir ? 1f : 0f, 1.3f * getDeltaTime()); smoothIsRearGear = Mathr.Lerp(smoothIsRearGear, veh.CurrentGear == 0 ? 1f : 0f, 1.3f * getDeltaTime()); speedCoeff = Mathr.Max(veh.Speed, veh.Velocity.Magnitude() / 22f); pointAt = veh.Position + fullHeightOffset + (veh.ForwardVector * computeLookFrontOffset(veh, speedCoeff, smoothIsInAir)); finalDummyOffset = Mathr.Lerp(vehDummyOffset, vehDummyOffsetHighSpeed, speedCoeff / (maxHighSpeed * 1.6f)); // no offset if car is in the air finalDummyOffset = Mathr.Lerp(finalDummyOffset, 0f, smoothIsInAir); if (veh.TowedVehicle != null) { towedVehicleLongitude = veh.TowedVehicle.Model.GetDimensions().Y; } else { towedVehicleLongitude = 0f; } fullLongitudeOffset = (distanceOffset + currentVehicleLongitude / 2f) /* + vehDummyOffset*/ + towedVehicleLongitude; currentDistanceIncrement = 0f; if (increaseDistanceAtHighSpeed) { var factor = veh.Speed / maxHighSpeed; currentDistanceIncrement = Mathr.Lerp(0f, maxHighSpeedDistanceIncrement, Easing.EaseOut(factor, useEasingForCamDistance ? EasingType.Cubic : EasingType.Linear)); } if (accelerationAffectsCamDistance) { var factor = getVehicleAcceleration(veh) / (maxHighSpeed * 10f); currentDistanceIncrement += Mathr.Lerp(0f, accelerationCamDistanceMultiplier, Easing.EaseOut(factor, useEasingForCamDistance ? EasingType.Quadratic : EasingType.Linear)); } }