| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | 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{    /// <summary>    /// 法宝技能 翡翠葫芦 战场区域形成一个域。敌人的功法弹道进入域后将降低敌人的功法弹道速度    /// 被影响的功法强度降低20%    /// </summary>    public class S3201 : MagicSkillBasic, ITriggerEntity    {        private List<FxAILogicBasic> _fxAILogicBasics = new List<FxAILogicBasic>();        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<FxAILogicBasic>        protected override void ProMagicUseSkill()        {            target=  CombatMagicWeaponEntity.RootMagicWeaponControl.combatHeroEntity.CombatAIBasic.currFocusTarget;            if (target == null)            {                SkillPlayFinish();                return;            }                        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);                if (SelfSkillConfig.level > 5)                {                    SkillFeaturesData skillFeaturesData = fxAILogicBasic.SkillFeaturesData;                    long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(skillFeaturesData.hp, effectValue[2]);                    skillFeaturesData.hp -= v;                }            }        }        protected override void ProBreakMagicSkill()        {            AllFinish();        }        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; }    }}
 |