TimeLineAlertLogic.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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(this,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.iTriggerEntity = triggerEntity;
  75. exitEventGameObject.OnCollisionExitEvent = (OnTriggerExitEvent);
  76. timeLineAlertTarget.Enter(timeLineAlertSeriailztion, collider, _gameObject);
  77. }
  78. }
  79. protected void OnTriggerExitEvent(Collider collider,ITriggerEntity triggerEntity)
  80. {
  81. TimeLineAlertSeriailztion timeLineAlertSeriailztion =
  82. mTimeLineAssetSerialization as TimeLineAlertSeriailztion;
  83. ITimeLineAlertTargetEnter timeLineAlertTarget =
  84. _timeLineTriggerEntity as ITimeLineAlertTargetEnter;
  85. if (timeLineAlertTarget != null)
  86. {
  87. ExitEventGameObject exitEventGameObject = collider.gameObject.GetOrAddComponent<ExitEventGameObject>();
  88. if (exitEventGameObject.OnCollisionExitEvent == null)
  89. {
  90. return;
  91. }
  92. exitEventGameObject.Collider = null;
  93. exitEventGameObject.OnCollisionExitEvent = null;
  94. timeLineAlertTarget.Leave(timeLineAlertSeriailztion, collider, _gameObject);
  95. }
  96. }
  97. protected override void ProLeave()
  98. {
  99. TimeLineAlertSeriailztion timeLineAlertSeriailztion =
  100. mTimeLineAssetSerialization as TimeLineAlertSeriailztion;
  101. if (timeLineAlertSeriailztion.manualClose)
  102. {
  103. return;
  104. }
  105. ClearTrigger();
  106. }
  107. protected override void ProTimeUpdate()
  108. {
  109. // if (_gameObject != null)
  110. // {
  111. // if (timeLineAlertSeriailztion.isFixedPoint)
  112. // {
  113. //
  114. // }
  115. // }
  116. }
  117. protected override void ProBreakTimeLine()
  118. {
  119. isManualClose = false;
  120. ClearTrigger();
  121. }
  122. protected void ClearTrigger()
  123. {
  124. if (_gameObject != null)
  125. {
  126. _gameObject.SetActive(false);
  127. ITimeLineAlertTargetEnter timeLineAlertTarget =
  128. _timeLineTriggerEntity as ITimeLineAlertTargetEnter;
  129. if (timeLineAlertTarget != null)
  130. {
  131. timeLineAlertTarget.LeaveAlert(timeLineAlertSeriailztion, _gameObject);
  132. }
  133. }
  134. GObjectPool.Instance.Recycle(_newGameObjectPool);
  135. _enterRegister?.UnRegister();
  136. _exitRegister?.UnRegister();
  137. _enterRegister = null;
  138. _exitRegister = null;
  139. _newGameObjectPool = null;
  140. _gameObject = null;
  141. }
  142. protected override void ProDispose()
  143. {
  144. ClearTrigger();
  145. }
  146. public string tag { get; }
  147. }
  148. }