make vehicle freecam work better at high fps
Fixes FOV, Angle limit, and rotation speed at high FPS to more closely match behavior at 30fps locked.
This commit is contained in:
parent
bb300a96b5
commit
2b7f8ebfcc
|
@ -4892,12 +4892,12 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation,
|
|||
if (isCar || isBike) {
|
||||
// 0.4f: CAR_FOV_START_SPEED
|
||||
if (DotProduct(car->GetForward(), car->m_vecMoveSpeed) > 0.4f)
|
||||
FOV += (DotProduct(car->GetForward(), car->m_vecMoveSpeed) - 0.4f) * CTimer::GetTimeStep();
|
||||
FOV += (DotProduct(car->GetForward(), car->m_vecMoveSpeed) - 0.4f) * (CTimer::GetTimeStep() / CTimer::GetTimeStepFix());
|
||||
}
|
||||
|
||||
if (FOV > DefaultFOV)
|
||||
// 0.98f: CAR_FOV_FADE_MULT
|
||||
FOV = Pow(0.98f, CTimer::GetTimeStep()) * (FOV - DefaultFOV) + DefaultFOV;
|
||||
FOV = Pow(0.98f, CTimer::GetTimeStep() / CTimer::GetTimeStepFix()) * (FOV - DefaultFOV) + DefaultFOV;
|
||||
|
||||
FOV = Clamp(FOV, DefaultFOV, DefaultFOV + 30.0f);
|
||||
}
|
||||
|
@ -4965,8 +4965,8 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation,
|
|||
else if (velocityRightHeading > camRightHeading + PI)
|
||||
velocityRightHeading = velocityRightHeading - TWOPI;
|
||||
|
||||
float betaChangeMult1 = CTimer::GetTimeStep() * CARCAM_SET[camSetArrPos][10];
|
||||
float betaChangeLimit = CTimer::GetTimeStep() * CARCAM_SET[camSetArrPos][11];
|
||||
float betaChangeMult1 = (CTimer::GetTimeStep() / CTimer::GetTimeStepFix()) * CARCAM_SET[camSetArrPos][10];
|
||||
float betaChangeLimit = (CTimer::GetTimeStep() / CTimer::GetTimeStepFix()) * CARCAM_SET[camSetArrPos][11];
|
||||
|
||||
float betaChangeMult2 = (car->m_vecMoveSpeed - DotProduct(car->m_vecMoveSpeed, Front) * Front).Magnitude();
|
||||
|
||||
|
@ -5028,8 +5028,8 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation,
|
|||
} else {
|
||||
targetAlpha = maxAlphaAllowed;
|
||||
}
|
||||
float maxAlphaBlendAmount = CTimer::GetTimeStep() * CARCAM_SET[camSetArrPos][6];
|
||||
float targetAlphaBlendAmount = (1.0f - Pow(CARCAM_SET[camSetArrPos][5], CTimer::GetTimeStep())) * (targetAlpha - Alpha);
|
||||
float maxAlphaBlendAmount = (CTimer::GetTimeStep() / CTimer::GetTimeStepFix()) * CARCAM_SET[camSetArrPos][6];
|
||||
float targetAlphaBlendAmount = (1.0f - Pow(CARCAM_SET[camSetArrPos][5], CTimer::GetTimeStep() / CTimer::GetTimeStepFix())) * (targetAlpha - Alpha);
|
||||
if (targetAlphaBlendAmount <= maxAlphaBlendAmount) {
|
||||
if (targetAlphaBlendAmount < -maxAlphaBlendAmount)
|
||||
targetAlphaBlendAmount = -maxAlphaBlendAmount;
|
||||
|
@ -5038,7 +5038,7 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation,
|
|||
}
|
||||
|
||||
// Using GetCarGun(LR/UD) will give us same unprocessed RightStick value as SA
|
||||
float stickX = -(pad->GetCarGunLeftRight());
|
||||
float stickX = -pad->GetCarGunLeftRight();
|
||||
float stickY = -pad->GetCarGunUpDown();
|
||||
|
||||
// In SA this is for not let num2/num8 move camera when Keyboard & Mouse controls are used.
|
||||
|
@ -5125,7 +5125,7 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation,
|
|||
float betaSpeedFromStickX = xMovement * CARCAM_SET[camSetArrPos][12];
|
||||
|
||||
float newAngleSpeedMaxBlendAmount = CARCAM_SET[camSetArrPos][9];
|
||||
float angleChangeStep = Pow(CARCAM_SET[camSetArrPos][8], CTimer::GetTimeStep());
|
||||
float angleChangeStep = Pow(CARCAM_SET[camSetArrPos][8], CTimer::GetTimeStepFix());
|
||||
float targetBetaWithStickBlendAmount = betaSpeedFromStickX + (targetBeta - Beta) / Max(CTimer::GetTimeStep(), 1.0f);
|
||||
|
||||
if (targetBetaWithStickBlendAmount < -newAngleSpeedMaxBlendAmount)
|
||||
|
@ -5135,7 +5135,7 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation,
|
|||
|
||||
float angleChangeStepLeft = 1.0f - angleChangeStep;
|
||||
BetaSpeed = targetBetaWithStickBlendAmount * angleChangeStepLeft + angleChangeStep * BetaSpeed;
|
||||
if (Abs(BetaSpeed) < 0.0001f)
|
||||
if (Abs(BetaSpeed) < 0.0001f * CTimer::GetTimeStepFix())
|
||||
BetaSpeed = 0.0f;
|
||||
|
||||
float betaChangePerFrame;
|
||||
|
@ -5176,7 +5176,7 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation,
|
|||
AlphaSpeed = maxAlphaSpeed;
|
||||
}
|
||||
|
||||
if (Abs(AlphaSpeed) < 0.0001f)
|
||||
if (Abs(AlphaSpeed) < 0.0001f * CTimer::GetTimeStepFix())
|
||||
AlphaSpeed = 0.0f;
|
||||
|
||||
float alphaWithSpeedAccounted;
|
||||
|
@ -5200,12 +5200,12 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation,
|
|||
}
|
||||
|
||||
// Prevent unsignificant angle changes
|
||||
if (Abs(lastAlpha - Alpha) < 0.0001f)
|
||||
if (Abs(lastAlpha - Alpha) < 0.0001f * CTimer::GetTimeStepFix())
|
||||
Alpha = lastAlpha;
|
||||
|
||||
lastAlpha = Alpha;
|
||||
|
||||
if (Abs(lastBeta - Beta) < 0.0001f)
|
||||
if (Abs(lastBeta - Beta) < 0.0001f * CTimer::GetTimeStepFix())
|
||||
Beta = lastBeta;
|
||||
|
||||
lastBeta = Beta;
|
||||
|
|
Loading…
Reference in New Issue