using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic; using Common.Utility.CombatEvent; using Fort23.Core; using GameLogic.Combat.Buff; using GameLogic.Combat.CombatTool; using UnityEngine; using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface; namespace GameLogic.Combat.Skill.MagicSkill { /// /// 一盏明灯围绕玩家,{0}秒内抵消所有负面效果,每{1}秒触发1次。 /// public class S3302 : MagicSkillBasic { private CombatHeroEntity target; private bool isUpdate = false; private float _currTime; private float _jiaoDu; private Vector3 _dir; private Transform root; private float _lasetAddTime = -255; private int _AddCount; protected override void ProMagicUseSkill() { TimeLineEventLogicGroupBasic timeLineEventLogicGroupBasic = ActivationTimeLineData("sk1_xiaoshi"); timeLineEventLogicGroupBasic.TimeLineUpdateEnd = delegate() { root = CombatMagicWeaponEntity.RootMagicWeaponControl.combatHeroEntity.GameObject.transform; _dir = Vector3.forward * 3; Vector3 d = root.rotation * _dir; CombatHeroEntity.GameObject.transform.position = d + root.position; TimeLineEventLogicGroupBasic sk1_show = ActivationTimeLineData("sk1_show"); sk1_show.TimeLineUpdateEnd = ShowFinish; }; CombatEventManager.Instance.AddEventListener(CombatEventType.StartAddBuff, StartAddBuff); } private void StartAddBuff(IEventData eventData) { StartAddBuffEventData startAddBuffEventData = eventData as StartAddBuffEventData; if (startAddBuffEventData.target == CombatMagicWeaponEntity.RootMagicWeaponControl.combatHeroEntity) { BuffInfo buffInfo = startAddBuffEventData.BuffInfo; if (buffInfo.BuffConfig.buffType != 2) { return; } float t = CombatController.currActiveCombat.combatTime; float v = t - _lasetAddTime; if (v < effectValue[1] && _AddCount >= 1) { return; } if (v > effectValue[1]) { _lasetAddTime = t; _AddCount = 0; } _AddCount++; startAddBuffEventData.isNotAddBuff = true; } } private void ShowFinish() { isUpdate = true; _currTime = 0; } protected override void MagicSkillUpdate(float time) { if (!isUpdate) { return; } _currTime += time; if (_currTime >= SelfSkillConfig.effectValue[0]) { SkillPlayFinish(); isUpdate = false; return; } _jiaoDu += 360 * time * 0.5f; Quaternion quaternionY = Quaternion.Euler(0, _jiaoDu, 0); Vector3 d = root.rotation * quaternionY * _dir; CombatHeroEntity.GameObject.transform.position = d + root.position; } protected override void ProBreakMagicSkill() { SkillPlayFinish(); isUpdate = false; } protected override void ProSkillPlayFinish() { CombatEventManager.Instance.RemoveEventListener(CombatEventType.StartAddBuff, StartAddBuff); } protected override ILifetCycleHitPoint[] ProGetTineLineTargetEntity( TimeLineEventLogicBasic timeLineEventLogicBasic) { ILifetCycleHitPoint[] lifetCycleHitPoints = new ILifetCycleHitPoint[1]; lifetCycleHitPoints[0] = target.GetMainHotPoin(); return lifetCycleHitPoints; } } }