CameraFVController.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System;
  2. using System.Collections.Generic;
  3. using GameWorld;
  4. using UnityEngine;
  5. [ExecuteInEditMode]
  6. public class CameraFVController : BaseBehaviour
  7. {
  8. private void Awake()
  9. {
  10. this.InitCameraFVList();
  11. }
  12. private void Update()
  13. {
  14. this.UpdateFVAndOffset();
  15. }
  16. private void InitCameraFVList()
  17. {
  18. if (base.transform.childCount != this._cameraFV.Count)
  19. {
  20. this._cameraFV.Clear();
  21. for (int i = 0; i < base.transform.childCount; i++)
  22. {
  23. this._cameraFV.Add(base.transform.GetChild(i).GetComponent<CameraFV>());
  24. }
  25. this._cameraFV.Sort((CameraFV l1, CameraFV l2) => l1.transform.position.x.CompareTo(l2.transform.position.x));
  26. }
  27. }
  28. private void UpdateFVAndOffset()
  29. {
  30. PlayerManager player = R.Player;
  31. if (player != null)
  32. {
  33. float x = player.Transform.position.x;
  34. int num = this.PlayerAt(x);
  35. if (num == 0)
  36. {
  37. CameraFV cameraFV = this._cameraFV[0];
  38. float fv = cameraFV.fv;
  39. float offsetY = cameraFV.offsetY;
  40. SingletonMono<CameraController>.Instance.FieldOfView = fv;
  41. SingletonMono<CameraController>.Instance.ManualOffsetY = offsetY;
  42. }
  43. else if (num == this._cameraFV.Count)
  44. {
  45. CameraFV cameraFV2 = this._cameraFV[num - 1];
  46. float fv2 = cameraFV2.fv;
  47. float offsetY2 = cameraFV2.offsetY;
  48. SingletonMono<CameraController>.Instance.FieldOfView = fv2;
  49. SingletonMono<CameraController>.Instance.ManualOffsetY = offsetY2;
  50. }
  51. else
  52. {
  53. CameraFV cameraFV3 = this._cameraFV[num - 1];
  54. CameraFV cameraFV4 = this._cameraFV[num];
  55. float fv3 = cameraFV3.fv;
  56. float fv4 = cameraFV4.fv;
  57. float offsetY3 = cameraFV3.offsetY;
  58. float offsetY4 = cameraFV4.offsetY;
  59. SingletonMono<CameraController>.Instance.FieldOfView = Mathf.Lerp(fv4, fv3, this.getLerpPercent(cameraFV4.Position.x, cameraFV3.Position.x, x));
  60. SingletonMono<CameraController>.Instance.ManualOffsetY = Mathf.Lerp(offsetY4, offsetY3, this.getLerpPercent(cameraFV4.Position.x, cameraFV3.Position.x, x));
  61. }
  62. }
  63. else
  64. {
  65. CameraFV cameraFV5 = this._cameraFV[0];
  66. float fv5 = cameraFV5.fv;
  67. SingletonMono<CameraController>.Instance.FieldOfView = fv5;
  68. }
  69. }
  70. private int PlayerAt(float playerPositionX)
  71. {
  72. for (int i = 0; i < this._cameraFV.Count; i++)
  73. {
  74. if (playerPositionX < this._cameraFV[i].Position.x)
  75. {
  76. return i;
  77. }
  78. }
  79. return this._cameraFV.Count;
  80. }
  81. private float getLerpPercent(float x1, float x2, float current)
  82. {
  83. return (current - x1) / (x2 - x1);
  84. }
  85. [SerializeField]
  86. private List<CameraFV> _cameraFV = new List<CameraFV>();
  87. }