TimeLineAlertLogic.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. using Core.Triiger;
  2. using Fort23.UTool;
  3. using UnityEngine;
  4. using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
  5. namespace UTool.CustomizeTimeLogic.FxLogic.TimeLineEventLogic
  6. {
  7. public class TimeLineAlertLogic : TimeLineEventLogicBasic,ITriggerEntity
  8. {
  9. private IUnRegister _enterRegister;
  10. private IUnRegister _exitRegister;
  11. protected GameObject _gameObject;
  12. private GameObjectPool _newGameObjectPool;
  13. private TimeLineAlertSeriailztion timeLineAlertSeriailztion;
  14. protected bool isManualClose;
  15. protected override void ProSetCombatInfo()
  16. {
  17. }
  18. protected override void ProDormancyObj()
  19. {
  20. }
  21. public override bool IsFinish()
  22. {
  23. return !isManualClose;
  24. }
  25. protected override void ProEnter()
  26. {
  27. _enterRegister?.UnRegister();
  28. _exitRegister?.UnRegister();
  29. _enterRegister = null;
  30. _exitRegister = null;
  31. timeLineAlertSeriailztion =
  32. mTimeLineAssetSerialization as TimeLineAlertSeriailztion;
  33. isManualClose = timeLineAlertSeriailztion.manualClose;
  34. if (!string.IsNullOrEmpty(timeLineAlertSeriailztion.guid))
  35. {
  36. SpecialDotInfo specialDotInfo = castEntity.GetMainHotPoin<ILifetCycleHitPoint>(true)
  37. .GetSpecialDotInfo(timeLineAlertSeriailztion.guid);
  38. GameObject gameObject = specialDotInfo.targetTran.gameObject;
  39. gameObject.SetActive(false);
  40. if (timeLineAlertSeriailztion.isNew)
  41. {
  42. string poolName = castEntity.guidName + timeLineAlertSeriailztion.groupName +
  43. timeLineAlertSeriailztion.guid;
  44. _newGameObjectPool =
  45. GObjectPool.Instance.FetchAsyncForGameObject<GameObjectPool>(gameObject, poolName);
  46. _gameObject = _newGameObjectPool.own;
  47. _gameObject.transform.position = gameObject.transform.position;
  48. }
  49. else
  50. {
  51. _gameObject = gameObject;
  52. }
  53. _enterRegister = _gameObject.OnTriggerEnterEvent(this,OnTriggerEnterEvent);
  54. _exitRegister = _gameObject.OnTriggerExitEvent(OnTriggerExitEvent);
  55. ITimeLineAlertTargetEnter timeLineAlertTarget =
  56. _timeLineTriggerEntity as ITimeLineAlertTargetEnter;
  57. if (timeLineAlertTarget != null)
  58. {
  59. timeLineAlertTarget.InitAlert(timeLineAlertSeriailztion, _gameObject);
  60. }
  61. _gameObject.SetActive(true);
  62. }
  63. }
  64. protected void OnTriggerEnterEvent(Collider collider,ITriggerEntity triggerEntity)
  65. {
  66. TimeLineAlertSeriailztion timeLineAlertSeriailztion =
  67. mTimeLineAssetSerialization as TimeLineAlertSeriailztion;
  68. ITimeLineAlertTargetEnter timeLineAlertTarget =
  69. _timeLineTriggerEntity as ITimeLineAlertTargetEnter;
  70. if (timeLineAlertTarget != null)
  71. {
  72. ExitEventGameObject exitEventGameObject = collider.gameObject.GetOrAddComponent<ExitEventGameObject>();
  73. exitEventGameObject.Collider = collider;
  74. exitEventGameObject.OnCollisionExitEvent = (OnTriggerExitEvent);
  75. timeLineAlertTarget.Enter(timeLineAlertSeriailztion, collider, _gameObject);
  76. }
  77. }
  78. protected void OnTriggerExitEvent(Collider collider)
  79. {
  80. TimeLineAlertSeriailztion timeLineAlertSeriailztion =
  81. mTimeLineAssetSerialization as TimeLineAlertSeriailztion;
  82. ITimeLineAlertTargetEnter timeLineAlertTarget =
  83. _timeLineTriggerEntity as ITimeLineAlertTargetEnter;
  84. if (timeLineAlertTarget != null)
  85. {
  86. ExitEventGameObject exitEventGameObject = collider.gameObject.GetOrAddComponent<ExitEventGameObject>();
  87. if (exitEventGameObject.OnCollisionExitEvent == null)
  88. {
  89. return;
  90. }
  91. exitEventGameObject.Collider = null;
  92. exitEventGameObject.OnCollisionExitEvent = null;
  93. timeLineAlertTarget.Leave(timeLineAlertSeriailztion, collider, _gameObject);
  94. }
  95. }
  96. protected override void ProLeave()
  97. {
  98. TimeLineAlertSeriailztion timeLineAlertSeriailztion =
  99. mTimeLineAssetSerialization as TimeLineAlertSeriailztion;
  100. if (timeLineAlertSeriailztion.manualClose)
  101. {
  102. return;
  103. }
  104. ClearTrigger();
  105. }
  106. protected override void ProTimeUpdate()
  107. {
  108. // if (_gameObject != null)
  109. // {
  110. // if (timeLineAlertSeriailztion.isFixedPoint)
  111. // {
  112. //
  113. // }
  114. // }
  115. }
  116. protected override void ProBreakTimeLine()
  117. {
  118. isManualClose = false;
  119. ClearTrigger();
  120. }
  121. protected void ClearTrigger()
  122. {
  123. if (_gameObject != null)
  124. {
  125. _gameObject.SetActive(false);
  126. ITimeLineAlertTargetEnter timeLineAlertTarget =
  127. _timeLineTriggerEntity as ITimeLineAlertTargetEnter;
  128. if (timeLineAlertTarget != null)
  129. {
  130. timeLineAlertTarget.LeaveAlert(timeLineAlertSeriailztion, _gameObject);
  131. }
  132. }
  133. GObjectPool.Instance.Recycle(_newGameObjectPool);
  134. _enterRegister?.UnRegister();
  135. _exitRegister?.UnRegister();
  136. _enterRegister = null;
  137. _exitRegister = null;
  138. _newGameObjectPool = null;
  139. _gameObject = null;
  140. }
  141. protected override void ProDispose()
  142. {
  143. ClearTrigger();
  144. }
  145. public string tag { get; }
  146. }
  147. }