Files
BABA_YAGA/Assets/Scripts/Camera Controller/CameraDynamicFOV.cs
2026-03-27 12:27:50 +07:00

41 lines
1.5 KiB
C#

using UnityEngine;
using static OnlyScove.Scripts.CameraController; // Need to add this to access CameraController.CameraViewMode
namespace OnlyScove.Scripts
{
[System.Serializable]
public class CameraDynamicFOV
{
[Header("Dynamic FOV")]
[SerializeField] private bool useDynamicFOV = true;
[SerializeField] private float tpvSprintFOV = 70f; // Renamed from sprintFOV for clarity
[SerializeField] private float fovSmoothTime = 5f;
private float _currentTpvBaseFOV; // Stored from CameraController
private float _currentFpvFOV; // Stored from CameraController
public float CurrentTpvBaseFOV => _currentTpvBaseFOV; // Expose for CameraController transitions
public void Initialize(float tpvBaseFOV, float fpvFOV)
{
_currentTpvBaseFOV = tpvBaseFOV;
_currentFpvFOV = fpvFOV;
}
public void HandleDynamicFOV(Camera cam, InputReader inputReader, CameraViewMode viewMode)
{
if (!useDynamicFOV || cam == null || inputReader == null) return;
float targetFOV = (viewMode == CameraViewMode.ThirdPerson) ? _currentTpvBaseFOV : _currentFpvFOV;
// Apply sprint FOV only in TPV
if (viewMode == CameraViewMode.ThirdPerson && inputReader.MoveInput.magnitude > 0.1f && inputReader.IsSprintHeld)
{
targetFOV = tpvSprintFOV;
}
cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, targetFOV, fovSmoothTime * Time.deltaTime);
}
}
}