S30001.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. using System.Linq;
  2. using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
  3. using GameLogic.Combat.Buff;
  4. using GameLogic.Combat.CombatTool;
  5. using GameLogic.Combat.Hero;
  6. using UnityEngine;
  7. using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
  8. namespace GameLogic.Combat.Skill
  9. {
  10. /// <summary>
  11. /// 火烧
  12. /// </summary>
  13. public class S30001 : SkillBasic
  14. {
  15. protected float _harm;
  16. protected float _maxTime;
  17. protected float _currTime;
  18. // private BetterList<ILifetCycleHitPoint> _currTrigger = new BetterList<ILifetCycleHitPoint>();
  19. protected TimeLineEventLogicGroupBasic loopGroupBasic;
  20. protected TimeLineEventLogicGroupBasic currMyLoopGroupBasic;
  21. protected bool _isUpdate;
  22. protected float _currAllTime;
  23. private BetterList<ILifetCycleHitPoint> _diffusionBuff = new BetterList<ILifetCycleHitPoint>();
  24. private BetterList<ILifetCycleHitPoint> _triggerDiffusion = new BetterList<ILifetCycleHitPoint>();
  25. protected override void ProInitSkillConfig()
  26. {
  27. _harm = SelfSkillConfig.effectValue[0];
  28. _maxTime = SelfSkillConfig.effectValue[1];
  29. }
  30. protected override void ProInitSkill()
  31. {
  32. SkillBasic skillBasic = CombatHeroEntity.CombatHeroSkillControl.GetSkillBasic(30004);
  33. if (skillBasic != null)
  34. {
  35. _maxTime += skillBasic.SelfSkillConfig.effectValue[0];
  36. }
  37. }
  38. // protected override ILifetCycleHitPoint[] ProGetTineLineTargetEntity(
  39. // TimeLineEventLogicBasic timeLineEventLogicBasic)
  40. // {
  41. // ILifetCycleHitPoint[] allHero = new ILifetCycleHitPoint[_enterAlertTarget.Count];
  42. // for (int i = 0; i < _enterAlertTarget.Count; i++)
  43. // {
  44. // allHero[i] = _enterAlertTarget[i].GetMainHotPoin<ILifetCycleHitPoint>();
  45. // }
  46. //
  47. // return allHero;
  48. // }
  49. protected override void ProUseSkill()
  50. {
  51. _finishTimeLineGroupName = "-1";
  52. currMyLoopGroupBasic = ActivationTimeLineData("sk1");
  53. _isUpdate = true;
  54. _currTime = 0;
  55. _currAllTime = 0;
  56. _triggerDiffusion.Clear();
  57. _diffusionBuff.Clear();
  58. }
  59. protected override void ProBreakSkill()
  60. {
  61. Finish();
  62. }
  63. protected void Finish()
  64. {
  65. currMyLoopGroupBasic?.BreakTimeLine(CombatHeroEntity);
  66. if (loopGroupBasic != null)
  67. {
  68. loopGroupBasic.BreakTimeLine(CombatHeroEntity);
  69. }
  70. loopGroupBasic = null;
  71. _isUpdate = false;
  72. SpecialDotInfo specialDotInfo = CombatHeroEntity.GetMainHotPoin<ILifetCycleHitPoint>(true)
  73. .GetSpecialDotInfo("sk1_trigger");
  74. specialDotInfo.targetTran.gameObject.SetActive(false);
  75. }
  76. protected override void ProSkillPlayFinish()
  77. {
  78. Finish();
  79. }
  80. protected override void ProCombatUpdate(float time)
  81. {
  82. if (!_isUpdate)
  83. {
  84. return;
  85. }
  86. if (CombatHeroEntity.CombatAIBasic.currFocusTarget != null
  87. && !CombatHeroEntity.isDie)
  88. {
  89. Vector3 nextPos = CombatHeroEntity.CombatAIBasic.currFocusTarget.dotPos;
  90. Vector3 p = nextPos - CombatHeroEntity.dotPos;
  91. if (p.sqrMagnitude > 0.00001)
  92. {
  93. CombatHeroEntity.combatHeroGameObject.rotation = Quaternion.Lerp(
  94. CombatHeroEntity.combatHeroGameObject.rotation, Quaternion.LookRotation(p.normalized), 0.02f);
  95. }
  96. }
  97. _currTime += time;
  98. _currAllTime += time;
  99. if (_currTime > 0.2f)
  100. {
  101. _currTime -= 0.2f;
  102. long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(
  103. CombatHeroEntity.CurrCombatHeroInfo.attack.Value,
  104. _harm);
  105. if (loopGroupBasic != null)
  106. {
  107. loopGroupBasic.BreakTimeLine(CombatHeroEntity);
  108. }
  109. // _currTrigger.Clear();
  110. for (int i = 0; i < _enterAlertTarget.Count; i++)
  111. {
  112. ILifetCycleHitPoint targetEntity = _enterAlertTarget[i].GetMainHotPoin<ILifetCycleHitPoint>();
  113. // _currTrigger.Add(targetEntity);
  114. HarmReturnInfo harmReturnInfo = Harm(CombatHeroEntity, targetEntity as CombatHeroHitPoint,
  115. v, AttType.Skill, triggerData);
  116. DiffusionBuff(targetEntity);
  117. }
  118. for (int i = 0; i < _diffusionBuff.Count; i++)
  119. {
  120. DiffusionBuff(_diffusionBuff[i]);
  121. }
  122. // "sk1_hit"
  123. // string hitName = "sk1_hit_lv4";
  124. // loopGroupBasic = ActivationTimeLineData(hitName, _currTrigger);
  125. }
  126. if (_currAllTime > _maxTime)
  127. {
  128. SkillPlayFinish();
  129. }
  130. }
  131. protected void DiffusionBuff(ILifetCycleHitPoint diffusion)
  132. {
  133. if (diffusion == null)
  134. {
  135. return;
  136. }
  137. CombatHeroEntity diffusionCombatHeroEntity = diffusion.IfLifeCycle as CombatHeroEntity;
  138. if (diffusionCombatHeroEntity.isDie||!diffusionCombatHeroEntity.isActive)
  139. {
  140. _diffusionBuff.Remove(diffusion);
  141. return;
  142. }
  143. if (!_diffusionBuff.Contains(diffusion))
  144. {
  145. BuffInfo buffInfo = BuffInfo.GetBuffInfo(100101, 0.5f, 1);
  146. diffusionCombatHeroEntity.BuffControl.AddBuff(CombatHeroEntity, buffInfo);
  147. _diffusionBuff.Add(diffusion);
  148. }
  149. if (_triggerDiffusion.Contains(diffusion))
  150. {
  151. return;
  152. }
  153. _triggerDiffusion.Add(diffusion);
  154. ILifetCycleHitPoint[] allHitPoints =
  155. CombatController.currActiveCombat.CombatHeroController.GetHeroHitPoint(true);
  156. for (int i = 0; i < allHitPoints.Length; i++)
  157. {
  158. ILifetCycleHitPoint cycleHitPoint = allHitPoints[i];
  159. if (_diffusionBuff.Contains(cycleHitPoint))
  160. {
  161. continue;
  162. }
  163. if (Vector3.SqrMagnitude(cycleHitPoint.Position - diffusion.Position) < 4)
  164. {
  165. BuffInfo buffInfo = BuffInfo.GetBuffInfo(1001, -1, 1);
  166. CombatHeroEntity combatHeroEntity = cycleHitPoint.IfLifeCycle as CombatHeroEntity;
  167. combatHeroEntity.BuffControl.AddBuff(CombatHeroEntity, buffInfo);
  168. _diffusionBuff.Add(diffusion);
  169. }
  170. }
  171. }
  172. }
  173. }