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:
Zach Charo 2021-08-07 00:06:01 -05:00 committed by GitHub
parent bb300a96b5
commit 2b7f8ebfcc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 12 deletions

View File

@ -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;