FxAIBeelineBulletLogic.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. using System;
  2. using Core.Audio;
  3. using Core.Triiger;
  4. using GameLogic.Combat.CombatTool;
  5. using GameLogic.Combat.Hero;
  6. using UnityEngine;
  7. using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
  8. namespace Common.Combat.FxAILogic
  9. {
  10. [AddComponentMenu("特效脚本/弹道/直线飞行弹道")]
  11. public class FxAIBeelineBulletLogic : FxAILogicBasic
  12. {
  13. public float speed;
  14. private IUnRegister UnRegister = null;
  15. [Header("释放碰撞到地面时结束")] public bool isTriggerGroundEnd;
  16. [Header("碰撞到地面时的特效")] public string GroundHitFxName;
  17. private Vector3 endPos;
  18. private Vector3 dir;
  19. public float maxDis = 20;
  20. protected float maxDisSpr;
  21. protected override void ProInit()
  22. {
  23. maxDisSpr= maxDis* maxDis;
  24. UnRegister = gameObject.OnTriggerEnterEvent(OnTriggerEnterEvent);
  25. if (isUseCustomTargetEndPos)
  26. {
  27. endPos = TimeLineEventParticleLogicBasic.customizePos[
  28. customTargetEndPosIndex];
  29. }
  30. else
  31. {
  32. endPos = AttTarget.GetSpecialDotInfo("hitpos").GetWorlPos();
  33. endPos = new Vector3(endPos.x, CurrPos.y, endPos.z);
  34. }
  35. dir = (endPos - CurrPos).normalized;
  36. gameObject.transform.rotation = Quaternion.LookRotation(dir);
  37. }
  38. void TriggerGround()
  39. {
  40. ITimeLineTriggerEvent timeLineTriggerEvent =
  41. TimeLineEventParticleLogicBasic.ITimeLineTriggerEntity as ITimeLineTriggerEvent;
  42. FinishHit(new Vector3(_currPos.x, 0.5f, _currPos.z), GroundHitFxName);
  43. AudioManager.Instance.PlayAudio(hitAudioName, false);
  44. if (timeLineTriggerEvent != null)
  45. {
  46. timeLineTriggerEvent.TimeLineTriggerGround(
  47. TimeLineEventParticleLogicBasic.TimeLineEventLogicGroup.groupName,
  48. this, triggerData);
  49. }
  50. AudioManager.Instance.PlayAudio(hitAudioName, false);
  51. Dispose();
  52. }
  53. protected void OnTriggerEnterEvent(Collider collision)
  54. {
  55. ITimeLineTriggerEvent timeLineTriggerEvent =
  56. TimeLineEventParticleLogicBasic.ITimeLineTriggerEntity as ITimeLineTriggerEvent;
  57. if (isTriggerGroundEnd)
  58. {
  59. if (collision.gameObject.CompareTag("dimian"))
  60. {
  61. TriggerGround();
  62. return;
  63. }
  64. }
  65. HeroEntityMono heroEntityMono = collision.gameObject.GetComponent<HeroEntityMono>();
  66. if (heroEntityMono == null)
  67. {
  68. return;
  69. }
  70. CombatHeroEntity target = heroEntityMono.combatHeroEntity;
  71. if (target.IsEnemy == CombatHeroEntity.IsEnemy)
  72. {
  73. return;
  74. }
  75. if (timeLineTriggerEvent != null)
  76. {
  77. timeLineTriggerEvent.TimeLineTrigger(TimeLineEventParticleLogicBasic.TimeLineEventLogicGroup.groupName,
  78. target.GetMainHotPoin<ILifetCycleHitPoint>(), this, triggerData);
  79. if (!string.IsNullOrEmpty(hitFxName))
  80. {
  81. FinishHit(collision.ClosestPoint(gameObject.transform.position), hitFxName);
  82. }
  83. AudioManager.Instance.PlayAudio(hitAudioName, false);
  84. if (!isPenetrate)
  85. {
  86. Dispose();
  87. }
  88. }
  89. }
  90. private void FinishHit(Vector3 pos, string hitFxName)
  91. {
  92. if (!string.IsNullOrEmpty(hitFxName))
  93. {
  94. CombatController.currActiveCombat.GameTimeLineParticleFactory.CreateParticle(hitFxName,
  95. pos, null, false, null, null);
  96. }
  97. }
  98. protected override void ProCombatUpdate(float time)
  99. {
  100. Vector3 lastPos = _currPos;
  101. Vector3 movePos = dir * speed * time;
  102. _currPos += movePos;
  103. gameObject.transform.position = _currPos;
  104. if (!isTriggerGroundEnd)
  105. {
  106. if (Vector3.SqrMagnitude(_currPos - startPos) >maxDisSpr)
  107. {
  108. Dispose();
  109. }
  110. }
  111. else
  112. {
  113. if (_currPos.y < 0.3f)
  114. {
  115. TriggerGround();
  116. }
  117. }
  118. }
  119. protected override void ProDispose()
  120. {
  121. if (UnRegister != null)
  122. {
  123. UnRegister.UnRegister();
  124. }
  125. UnRegister = null;
  126. }
  127. }
  128. }