S3201.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. /// 被影响的功法强度降低20%
  12. /// </summary>
  13. public class S3201 : MagicSkillBasic, ITriggerEntity
  14. {
  15. private List<FxAILogicBasic> _fxAILogicBasics = new List<FxAILogicBasic>();
  16. private float _currTime;
  17. private bool _update;
  18. private IUnRegister _unRegister;
  19. private IUnRegister _unRegisterExitEvent;
  20. private CombatHeroEntity target;
  21. protected Vector3 fxPlayPos;
  22. protected Vector3 dir;
  23. private TimeLineEventLogicGroupBasic loopFx;
  24. // protected Vector3 startEulerAngles;
  25. protected Quaternion endEulerAngles;
  26. private SpecialDotInfo specialDotInfo;
  27. // private List<FxAILogicBasic>
  28. protected override void ProMagicUseSkill()
  29. {
  30. target= CombatMagicWeaponEntity.RootMagicWeaponControl.combatHeroEntity.CombatAIBasic.currFocusTarget;
  31. if (target == null)
  32. {
  33. SkillPlayFinish();
  34. return;
  35. }
  36. Vector3 rootPos = CombatMagicWeaponEntity.RootMagicWeaponControl.combatHeroEntity.dotPos;
  37. Vector3 targetPos = target.dotPos;
  38. dir = (targetPos - rootPos);
  39. fxPlayPos = dir * 0.5f + rootPos;
  40. dir = dir.normalized;
  41. Vector3 newTargetPos = fxPlayPos + new Vector3(1, 5, 0);
  42. endEulerAngles = Quaternion.LookRotation((fxPlayPos - newTargetPos).normalized) *
  43. 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. if (SelfSkillConfig.level > 5)
  72. {
  73. SkillFeaturesData skillFeaturesData = fxAILogicBasic.SkillFeaturesData;
  74. long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(skillFeaturesData.hp, effectValue[2]);
  75. skillFeaturesData.hp -= v;
  76. }
  77. }
  78. }
  79. protected override void ProBreakMagicSkill()
  80. {
  81. AllFinish();
  82. }
  83. protected override void MagicSkillUpdate(float time)
  84. {
  85. if (_update)
  86. {
  87. _currTime += time;
  88. CombatHeroEntity.GameObject.transform.rotation =
  89. Quaternion.Lerp(CombatHeroEntity.GameObject.transform.rotation, endEulerAngles, _currTime * 2);
  90. specialDotInfo.targetTran.position = fxPlayPos;
  91. specialDotInfo.targetTran.forward = dir;
  92. if (_currTime >= SelfSkillConfig.effectValue[1])
  93. {
  94. AllFinish();
  95. }
  96. }
  97. }
  98. private void AllFinish()
  99. {
  100. loopFx.CloseLoopFx();
  101. ActivationTimeLineData("sk1_xiaoshi");
  102. _unRegister?.UnRegister();
  103. _unRegisterExitEvent?.UnRegister();
  104. _unRegisterExitEvent = null;
  105. _unRegister = null;
  106. _update = false;
  107. SkillPlayFinish();
  108. for (int i = 0; i < _fxAILogicBasics.Count; i++)
  109. {
  110. _fxAILogicBasics[i].extraMoveSpeed += SelfSkillConfig.effectValue[0];
  111. }
  112. _fxAILogicBasics.Clear();
  113. }
  114. private void Finish()
  115. {
  116. loopFx = ActivationTimeLineData("sk1", customizePos: new Vector3[] { fxPlayPos });
  117. // timeLineEventLogicGroupBasic.TimeLineUpdateEnd = () => { };
  118. specialDotInfo = CombatHeroEntity.GetSpecialDotInfo("lingyu");
  119. specialDotInfo.targetTran.position = fxPlayPos;
  120. specialDotInfo.targetTran.forward = dir;
  121. _unRegister = specialDotInfo.targetTran.gameObject.OnTriggerEnterEvent(this, OnTriggerEnter);
  122. _currTime = 0;
  123. _update = true;
  124. _unRegisterExitEvent = specialDotInfo.targetTran.gameObject.OnTriggerExitEvent(this, OnTriggerExitEvent);
  125. }
  126. public string tag { get; }
  127. }
  128. }