using System.Collections.Generic; using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic; using Common.Combat.FxAILogic; using Core.Triiger; using GameLogic.Combat.CombatTool; using UnityEngine; namespace GameLogic.Combat.Skill.MagicSkill { /// /// 法宝技能 翡翠葫芦 战场区域形成一个域。敌人的功法弹道进入域后将降低敌人的功法弹道速度 /// public class S3201 : MagicSkillBasic, ITriggerEntity { private List _fxAILogicBasics = new List(); private float _currTime; private bool _update; private IUnRegister _unRegister; private IUnRegister _unRegisterExitEvent; private CombatHeroEntity target; protected Vector3 fxPlayPos; protected Vector3 dir; private TimeLineEventLogicGroupBasic loopFx; // protected Vector3 startEulerAngles; protected Quaternion endEulerAngles; private SpecialDotInfo specialDotInfo; // private List protected override void ProMagicUseSkill() { CombatHeroEntity[] allHero = CombatController.currActiveCombat.CombatHeroController.GetHero(!CombatHeroEntity.IsEnemy); if (allHero == null || allHero.Length <= 0) { SkillPlayFinish(); return; } target = allHero[0]; Vector3 rootPos = CombatMagicWeaponEntity.RootMagicWeaponControl.combatHeroEntity.dotPos; Vector3 targetPos = target.dotPos; dir = (targetPos - rootPos); fxPlayPos =dir * 0.5f + rootPos; dir= dir.normalized; Vector3 newTargetPos = fxPlayPos + new Vector3(1, 5, 0); endEulerAngles= Quaternion.LookRotation((fxPlayPos-newTargetPos).normalized)*Quaternion.Euler(new Vector3(80,0,0)); MoveToTargetPosShow magicAttShowBasic = InitMoveToTargetPosShow(newTargetPos, Finish); SetMagicAttShowBasic(magicAttShowBasic); } private void OnTriggerExitEvent(Collider collider, ITriggerEntity triggerEntity) { if (triggerEntity == null) { return; } FxAILogicBasic fxAILogicBasic = triggerEntity as FxAILogicBasic; if (fxAILogicBasic != null && fxAILogicBasic.CombatHeroEntity.IsEnemy != CombatHeroEntity.IsEnemy) { fxAILogicBasic.extraMoveSpeed += SelfSkillConfig.effectValue[0]; _fxAILogicBasics.Remove(fxAILogicBasic); } } private void OnTriggerEnter(Collider collider, ITriggerEntity triggerEntity) { if (triggerEntity == null) { return; } FxAILogicBasic fxAILogicBasic = triggerEntity as FxAILogicBasic; if (fxAILogicBasic != null && fxAILogicBasic.CombatHeroEntity.IsEnemy != CombatHeroEntity.IsEnemy) { fxAILogicBasic.extraMoveSpeed -= SelfSkillConfig.effectValue[0]; _fxAILogicBasics.Add(fxAILogicBasic); } } protected override void MagicSkillUpdate(float time) { if (_update) { _currTime += time; CombatHeroEntity.GameObject.transform.rotation = Quaternion.Lerp(CombatHeroEntity.GameObject.transform.rotation, endEulerAngles, _currTime*2); specialDotInfo.targetTran.position= fxPlayPos; specialDotInfo.targetTran.forward = dir; if (_currTime >= SelfSkillConfig.effectValue[1]) { AllFinish(); } } } private void AllFinish() { loopFx.CloseLoopFx(); ActivationTimeLineData("sk1_xiaoshi"); _unRegister?.UnRegister(); _unRegisterExitEvent?.UnRegister(); _unRegisterExitEvent = null; _unRegister = null; _update = false; SkillPlayFinish(); for (int i = 0; i < _fxAILogicBasics.Count; i++) { _fxAILogicBasics[i].extraMoveSpeed += SelfSkillConfig.effectValue[0]; } _fxAILogicBasics.Clear(); } private void Finish() { loopFx = ActivationTimeLineData("sk1",customizePos: new Vector3[]{fxPlayPos}); // timeLineEventLogicGroupBasic.TimeLineUpdateEnd = () => { }; specialDotInfo = CombatHeroEntity.GetSpecialDotInfo("lingyu"); specialDotInfo.targetTran.position= fxPlayPos; specialDotInfo.targetTran.forward = dir; _unRegister = specialDotInfo.targetTran.gameObject.OnTriggerEnterEvent(this, OnTriggerEnter); _currTime = 0; _update = true; _unRegisterExitEvent = specialDotInfo.targetTran.gameObject.OnTriggerExitEvent(this, OnTriggerExitEvent); } public string tag { get; } } }