CombatCameraControllder.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. using System;
  2. using Common.Utility.CombatEvent;
  3. using Fort23.Core;
  4. using UnityEngine;
  5. using Utility;
  6. using Utility.CustomizeTimeLogic.FxLogic.TimeLineEvent;
  7. using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
  8. namespace GameLogic.Combat.CombatTool
  9. {
  10. public class CombatCameraControllder : IDisposable, ICameraShaking
  11. {
  12. public Transform root;
  13. public Transform root2;
  14. public Camera Camera;
  15. public CombatController combatController;
  16. public StressReceiver StressReceiver;
  17. private bool isStartShake;
  18. public int FollowHeroId
  19. {
  20. get { return _followHeroId; }
  21. }
  22. private int _followHeroId = -1;
  23. public bool isStop;
  24. private bool isUpdateCameraToPath;
  25. private float currValue;
  26. private float _cameraSelectValue;
  27. private float targetValue;
  28. private float _currTime;
  29. private bool isUpdateFieldOfView;
  30. private float FieldOfViewTime;
  31. private float FieldOfViewTargetValue;
  32. private float FieldOfViewStartValue;
  33. private float FieldOfViewSpeed;
  34. public void Init(CombatController combatController, Camera camera)
  35. {
  36. CombatEventManager.Instance.AddEventListener(CombatEventType.SencenBesselPathAlter, SencenBesselPathAlter);
  37. this.combatController = combatController;
  38. Camera = camera;
  39. root2 = Camera.transform.parent;
  40. root = Camera.transform.parent.parent;
  41. StressReceiver = camera.transform.GetComponentInParent<StressReceiver>();
  42. TimeLineSingletonEventManager.Instance.AddTimeLineBasic(this);
  43. EventManager.Instance.AddEventListener(CustomEventType.HeroClick, HeroClick);
  44. // CameraSelect_onValueChanged(0.7f);
  45. // EventManager.Instance.AddEventListener(CustomEventType.HeroClick, HeroClick);
  46. }
  47. private void SencenBesselPathAlter(IEventData eventData)
  48. {
  49. // isUpdateCameraToPath = true;
  50. // currValue = _cameraSelectValue;
  51. // if (CombatController.currActiveCombat.CombatSenceController.currBesselPath.isCentre)
  52. // {
  53. // targetValue = 0.5f;
  54. // }
  55. // else
  56. // {
  57. // targetValue = 0.7f;
  58. // }
  59. //
  60. // _currTime = 0;
  61. }
  62. protected void HeroClick(IEventData eventData)
  63. {
  64. HeroClickEventData heroClickEventData = eventData as HeroClickEventData;
  65. int heroId = heroClickEventData.heroId;
  66. if (_followHeroId == heroId)
  67. {
  68. _followHeroId = -1;
  69. }
  70. else
  71. {
  72. _followHeroId = heroId;
  73. }
  74. }
  75. public void CameraSelect_onValueChanged(float value)
  76. {
  77. _cameraSelectValue = value;
  78. Vector3 pos1 = new Vector3(0, -3, -0.7f);
  79. Vector3 e1 = new Vector3(20, 0, 0);
  80. Vector3 pos2 = new Vector3(9, -1, -1.4f);
  81. Vector3 e2 = new Vector3(17.77f, -28.25f, 1.165f);
  82. Camera.transform.localPosition =
  83. Vector3.Lerp(pos1, pos2, value);
  84. Camera.transform.localEulerAngles =
  85. Vector3.Lerp(e1, e2, value);
  86. }
  87. private void ShakeFinish()
  88. {
  89. isStartShake = false;
  90. }
  91. public void SetFieldOfView(float fieldOfView, float speed)
  92. {
  93. FieldOfViewSpeed = speed;
  94. FieldOfViewTime = 0;
  95. FieldOfViewStartValue = Camera.fieldOfView;
  96. FieldOfViewTargetValue = fieldOfView;
  97. isUpdateFieldOfView = true;
  98. }
  99. public void Update(float t)
  100. {
  101. if (isUpdateFieldOfView)
  102. {
  103. FieldOfViewTime += t * FieldOfViewSpeed;
  104. Camera.fieldOfView = Mathf.Lerp(FieldOfViewStartValue, FieldOfViewTargetValue, FieldOfViewTime);
  105. if (FieldOfViewTime >= 1)
  106. {
  107. isUpdateFieldOfView = false;
  108. }
  109. }
  110. CombatHeroEntity combatHeroEntities = combatController.playerHeroEntity;
  111. if (!isStartShake && !isStop)
  112. {
  113. if (combatHeroEntities == null)
  114. {
  115. return;
  116. }
  117. Vector3 dir = combatHeroEntities.faceDir;
  118. // CombatHeroEntity foucusTarget = combatHeroEntities.CombatAIBasic.currFocusTarget as CombatHeroEntity;
  119. // if (foucusTarget != null)
  120. // {
  121. // dir = foucusTarget.dotPos - combatHeroEntities.dotPos;
  122. // dir = dir.normalized;
  123. // }
  124. Quaternion q = Quaternion.LookRotation(dir);
  125. Vector3 myHeroTarget = new Vector3(0, 8, -10);
  126. myHeroTarget = q * myHeroTarget;
  127. Vector3 p = combatHeroEntities.GameObject.transform.TransformPoint(myHeroTarget);
  128. root.rotation = Quaternion.Lerp(root.rotation, combatHeroEntities.GameObject.transform.rotation,
  129. 1);
  130. root.position = Vector3.Lerp(root.position, p, 1);
  131. }
  132. // MoveRoot2();
  133. }
  134. private void MoveRoot2()
  135. {
  136. CombatHeroEntity combatHeroEntities = combatController.playerHeroEntity;
  137. if (combatHeroEntities == null)
  138. {
  139. return;
  140. }
  141. Vector3 dir = combatHeroEntities.faceDir;
  142. CombatHeroEntity foucusTarget = combatHeroEntities.CombatAIBasic.currFocusTarget as CombatHeroEntity;
  143. if (foucusTarget != null)
  144. {
  145. dir = foucusTarget.dotPos - combatHeroEntities.dotPos;
  146. dir = dir.normalized;
  147. }
  148. Quaternion q = Quaternion.LookRotation(dir);
  149. Vector3 myHeroTarget = new Vector3(0, 8, -10);
  150. myHeroTarget = q * myHeroTarget;
  151. Vector3 p = combatHeroEntities.GameObject.transform.TransformPoint(myHeroTarget);
  152. Vector3 newP = p - root.position;
  153. root2.rotation = Quaternion.Lerp(root2.rotation, q,
  154. 0.3f);
  155. root2.localPosition = Vector3.Lerp(root2.localPosition, newP, 0.3f);
  156. }
  157. public void SetPos(Transform target)
  158. {
  159. Vector3 p = target.TransformPoint(new Vector3(0, 8, -10));
  160. root.rotation = Quaternion.Lerp(root.rotation, target.rotation,
  161. 1);
  162. root.position = Vector3.Lerp(root.position, p, 1);
  163. }
  164. public void Dispose()
  165. {
  166. EventManager.Instance.RemoveEventListener(CustomEventType.HeroClick, HeroClick);
  167. }
  168. public void Shaking(float qiangDu)
  169. {
  170. if (StressReceiver != null)
  171. {
  172. isStartShake = true;
  173. StressReceiver.InduceStress(qiangDu, ShakeFinish);
  174. }
  175. }
  176. public void Shaking(CameraShakingSerializtion cameraShakingSerializtion)
  177. {
  178. Shaking(cameraShakingSerializtion.qiangDu);
  179. }
  180. }
  181. }