summaryrefslogtreecommitdiff
path: root/UnitySA.Utility/FOVZoom.cs
diff options
context:
space:
mode:
Diffstat (limited to 'UnitySA.Utility/FOVZoom.cs')
-rw-r--r--UnitySA.Utility/FOVZoom.cs69
1 files changed, 69 insertions, 0 deletions
diff --git a/UnitySA.Utility/FOVZoom.cs b/UnitySA.Utility/FOVZoom.cs
new file mode 100644
index 0000000..555f205
--- /dev/null
+++ b/UnitySA.Utility/FOVZoom.cs
@@ -0,0 +1,69 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+namespace UnitySA.Utility;
+
+[Serializable]
+public class FOVZoom
+{
+ public Camera Camera;
+
+ [HideInInspector]
+ public float originalFov;
+
+ public float FOVIncrease = 3f;
+
+ public float TimeToIncrease = 1f;
+
+ public float TimeToDecrease = 1f;
+
+ public AnimationCurve IncreaseCurve;
+
+ public void Setup(Camera camera)
+ {
+ CheckStatus(camera);
+ Camera = camera;
+ originalFov = camera.fieldOfView;
+ }
+
+ private void CheckStatus(Camera camera)
+ {
+ if (camera == null)
+ {
+ throw new Exception("FOVKick camera is null, please supply the camera to the constructor");
+ }
+ if (IncreaseCurve == null)
+ {
+ throw new Exception("FOVKick Increase curve is null, please define the curve for the field of view kicks");
+ }
+ }
+
+ public void ChangeCamera(Camera camera)
+ {
+ Camera = camera;
+ }
+
+ public IEnumerator FOVKickUp()
+ {
+ float t = Mathf.Abs((Camera.fieldOfView - originalFov) / FOVIncrease);
+ while (t < TimeToIncrease)
+ {
+ Camera.fieldOfView = originalFov + IncreaseCurve.Evaluate(t / TimeToIncrease) * FOVIncrease;
+ t += Time.deltaTime;
+ yield return new WaitForEndOfFrame();
+ }
+ }
+
+ public IEnumerator FOVKickDown()
+ {
+ float t = Mathf.Abs((Camera.fieldOfView - originalFov) / FOVIncrease);
+ while (t > 0f)
+ {
+ Camera.fieldOfView = originalFov + IncreaseCurve.Evaluate(t / TimeToDecrease) * FOVIncrease;
+ t -= Time.deltaTime;
+ yield return new WaitForEndOfFrame();
+ }
+ Camera.fieldOfView = originalFov;
+ }
+}