46 lines
1.7 KiB
C#
46 lines
1.7 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 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);
|
|
}
|
|
}
|
|
}
|