Merge pull request #551 from MihailRis/fix-zoom

fix player camera zoom (fix #550)
This commit is contained in:
MihailRis 2025-07-14 23:40:16 +03:00 committed by GitHub
commit a8e521c780
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 12 deletions

View File

@ -125,18 +125,21 @@ glm::vec3 CameraControl::updateCameraShaking(
return offset;
}
void CameraControl::updateFovEffects(
const Hitbox& hitbox, PlayerInput input, float delta
void CameraControl::updateFov(
const Hitbox& hitbox, PlayerInput input, float delta, bool effects
) {
bool crouch = input.shift && hitbox.grounded && !input.sprint;
float dt = fmin(1.0f, delta * ZOOM_SPEED);
float zoomValue = 1.0f;
if (crouch) {
offset += glm::vec3(0.f, CROUCH_SHIFT_Y, 0.f);
zoomValue = CROUCH_ZOOM;
} else if (input.sprint && (input.moveForward || input.moveBack || input.moveLeft || input.moveRight)) {
zoomValue = RUN_ZOOM;
if (effects) {
if (crouch) {
offset += glm::vec3(0.f, CROUCH_SHIFT_Y, 0.f);
zoomValue = CROUCH_ZOOM;
} else if (input.sprint && (input.moveForward || input.moveBack ||
input.moveLeft || input.moveRight)) {
zoomValue = RUN_ZOOM;
}
}
if (input.zoom) zoomValue *= C_ZOOM;
camera->zoom = zoomValue * dt + camera->zoom * (1.0f - dt);
@ -176,9 +179,7 @@ void CameraControl::update(
if (!input.cheat) {
offset += updateCameraShaking(*hitbox, delta);
}
if (settings.fovEffects.get()) {
updateFovEffects(*hitbox, input, delta);
}
updateFov(*hitbox, input, delta, settings.fovEffects.get());
}
if (input.cameraMode) {
switchCamera();

View File

@ -32,10 +32,13 @@ class CameraControl {
/// @return camera offset
glm::vec3 updateCameraShaking(const Hitbox& hitbox, float delta);
/// @brief Update field-of-view effects
/// @brief Update field-of-view
/// @param input player inputs
/// @param delta delta time
void updateFovEffects(const Hitbox& hitbox, PlayerInput input, float delta);
/// @param effects movement-related effects
void updateFov(
const Hitbox& hitbox, PlayerInput input, float delta, bool effects
);
/// @brief Switch active player camera
void switchCamera();