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 fpvSprintFOV = 95f; // Target FOV for sprinting in FPV [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; bool isSprinting = inputReader.MoveInput.magnitude > 0.1f && inputReader.IsSprintHeld; float targetFOV; if (viewMode == CameraViewMode.ThirdPerson) { targetFOV = isSprinting ? tpvSprintFOV : _currentTpvBaseFOV; } else // FirstPerson { targetFOV = isSprinting ? fpvSprintFOV : _currentFpvFOV; } cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, targetFOV, fovSmoothTime * Time.deltaTime); } } }