S901002.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using System.Collections.Generic;
  2. using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
  3. using Common.Combat.FxAILogic;
  4. using Core.Triiger;
  5. using GameLogic.Combat.CombatTool;
  6. using UnityEngine;
  7. namespace GameLogic.Combat.Skill.MagicSkill
  8. {
  9. /// <summary>
  10. /// 法宝技能 翡翠葫芦 战场区域形成一个域。敌人的功法弹道进入域后将降低敌人的功法弹道速度
  11. /// </summary>
  12. public class S901002 : MagicSkillBasic, ITriggerEntity
  13. {
  14. private List<FxAILogicBasic> _fxAILogicBasics = new List<FxAILogicBasic>();
  15. private float _currTime;
  16. private bool _update;
  17. private IUnRegister _unRegister;
  18. private IUnRegister _unRegisterExitEvent;
  19. private CombatHeroEntity target;
  20. protected Vector3 fxPlayPos;
  21. protected Vector3 dir;
  22. private TimeLineEventLogicGroupBasic loopFx;
  23. // protected Vector3 startEulerAngles;
  24. protected Quaternion endEulerAngles;
  25. private SpecialDotInfo specialDotInfo;
  26. // private List<FxAILogicBasic>
  27. protected override void ProMagicUseSkill()
  28. {
  29. CombatHeroEntity[] allHero =
  30. CombatController.currActiveCombat.CombatHeroController.GetHero(!CombatHeroEntity.IsEnemy);
  31. if (allHero == null || allHero.Length <= 0)
  32. {
  33. SkillPlayFinish();
  34. return;
  35. }
  36. target = allHero[0];
  37. Vector3 rootPos = CombatMagicWeaponEntity.RootMagicWeaponControl.combatHeroEntity.dotPos;
  38. Vector3 targetPos = target.dotPos;
  39. dir = (targetPos - rootPos);
  40. fxPlayPos =dir * 0.5f + rootPos;
  41. dir= dir.normalized;
  42. Vector3 newTargetPos = fxPlayPos + new Vector3(1, 5, 0);
  43. endEulerAngles= Quaternion.LookRotation((fxPlayPos-newTargetPos).normalized)*Quaternion.Euler(new Vector3(80,0,0));
  44. MoveToTargetPosShow magicAttShowBasic = InitMoveToTargetPosShow(newTargetPos, Finish);
  45. SetMagicAttShowBasic(magicAttShowBasic);
  46. }
  47. private void OnTriggerExitEvent(Collider collider, ITriggerEntity triggerEntity)
  48. {
  49. if (triggerEntity == null)
  50. {
  51. return;
  52. }
  53. FxAILogicBasic fxAILogicBasic = triggerEntity as FxAILogicBasic;
  54. if (fxAILogicBasic != null && fxAILogicBasic.CombatHeroEntity.IsEnemy != CombatHeroEntity.IsEnemy)
  55. {
  56. fxAILogicBasic.extraMoveSpeed += SelfSkillConfig.effectValue[0];
  57. _fxAILogicBasics.Remove(fxAILogicBasic);
  58. }
  59. }
  60. private void OnTriggerEnter(Collider collider, ITriggerEntity triggerEntity)
  61. {
  62. if (triggerEntity == null)
  63. {
  64. return;
  65. }
  66. FxAILogicBasic fxAILogicBasic = triggerEntity as FxAILogicBasic;
  67. if (fxAILogicBasic != null && fxAILogicBasic.CombatHeroEntity.IsEnemy != CombatHeroEntity.IsEnemy)
  68. {
  69. fxAILogicBasic.extraMoveSpeed -= SelfSkillConfig.effectValue[0];
  70. _fxAILogicBasics.Add(fxAILogicBasic);
  71. }
  72. }
  73. protected override void MagicSkillUpdate(float time)
  74. {
  75. if (_update)
  76. {
  77. _currTime += time;
  78. CombatHeroEntity.GameObject.transform.rotation =
  79. Quaternion.Lerp(CombatHeroEntity.GameObject.transform.rotation, endEulerAngles, _currTime*2);
  80. specialDotInfo.targetTran.position= fxPlayPos;
  81. specialDotInfo.targetTran.forward = dir;
  82. if (_currTime >= SelfSkillConfig.effectValue[1])
  83. {
  84. AllFinish();
  85. }
  86. }
  87. }
  88. private void AllFinish()
  89. {
  90. loopFx.CloseLoopFx();
  91. ActivationTimeLineData("sk1_xiaoshi");
  92. _unRegister?.UnRegister();
  93. _unRegisterExitEvent?.UnRegister();
  94. _unRegisterExitEvent = null;
  95. _unRegister = null;
  96. _update = false;
  97. SkillPlayFinish();
  98. for (int i = 0; i < _fxAILogicBasics.Count; i++)
  99. {
  100. _fxAILogicBasics[i].extraMoveSpeed += SelfSkillConfig.effectValue[0];
  101. }
  102. _fxAILogicBasics.Clear();
  103. }
  104. private void Finish()
  105. {
  106. loopFx = ActivationTimeLineData("sk1",customizePos: new Vector3[]{fxPlayPos});
  107. // timeLineEventLogicGroupBasic.TimeLineUpdateEnd = () => { };
  108. specialDotInfo = CombatHeroEntity.GetSpecialDotInfo("lingyu");
  109. specialDotInfo.targetTran.position= fxPlayPos;
  110. specialDotInfo.targetTran.forward = dir;
  111. _unRegister = specialDotInfo.targetTran.gameObject.OnTriggerEnterEvent(this, OnTriggerEnter);
  112. _currTime = 0;
  113. _update = true;
  114. _unRegisterExitEvent = specialDotInfo.targetTran.gameObject.OnTriggerExitEvent(this, OnTriggerExitEvent);
  115. }
  116. public string tag { get; }
  117. }
  118. }