using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
#if MM_URP
using UnityEngine.Rendering.Universal;
#endif
using MoreMountains.Feedbacks;
namespace MoreMountains.FeedbacksForThirdParty
{
///
/// This class will set the URP depth of field to focus on the set of targets specified in its inspector.
///
#if MM_URP
[RequireComponent(typeof(Volume))]
#endif
[AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMAutoFocus_URP")]
public class MMAutoFocus_URP : MonoBehaviour
{
[Header("Bindings")]
/// the position of the camera
[Tooltip("the position of the camera")]
public Transform CameraTransform;
/// a list of all possible targets
[Tooltip("a list of all possible targets")]
public Transform[] FocusTargets;
[Header("Setup")]
/// the current target of this auto focus
[Tooltip("the current target of this auto focus")]
public float FocusTargetID;
[Header("Desired Aperture")]
/// the aperture to work with
[Tooltip("the aperture to work with")]
[Range(0.1f, 20f)]
public float Aperture = 0.1f;
#if MM_URP
protected Volume _volume;
protected VolumeProfile _profile;
protected DepthOfField _depthOfField;
///
/// On Start, stores volume, profile and DoF
///
void Start()
{
_volume = GetComponent();
_profile = _volume.profile;
_profile.TryGet(out _depthOfField);
}
///
/// On update we set our focus distance and aperture
///
void Update()
{
float distance = Vector3.Distance(CameraTransform.position, FocusTargets[Mathf.FloorToInt(FocusTargetID)].position);
_depthOfField.focusDistance.Override(distance);
_depthOfField.aperture.Override(Aperture);
}
#endif
}
}