using System;
using System.Collections.Generic;
using CombatCore.SerializationTimeLine;
using CombatLibrary.CombatLibrary.CombatCore;
using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
using Common.Combat.FxAILogic;
using Common.Utility.CombatEvent;
using Excel2Json;
using Fort23.Common;
using Fort23.Core;
using Fort23.UTool;
using GameLogic.Combat.CombatTool;
using GameLogic.Combat.Hero;
using GameLogic.Combat.Hero.Turntable;
using GameLogic.Combat.Skill.IntensifierEffect;
using GameLogic.CombatScenesTool;
using GameLogic.Hero;
using GameLogic.Player;
using UnityEngine;
using Utility;
using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventLogic;
using Random = UnityEngine.Random;
namespace GameLogic.Combat.Skill
{
    public abstract class SkillBasic : CObject, ITimeLineTriggerEntity, ITimeLineEndSing, ITimeLineTargetEntity,
        ITimeLineTriggerEvent, ITimeLineAlertTargetEnter
    {
        /// 
        /// 使用时候延长多长时间才能使用
        /// 
        public float DelayUseSkillCd;
        public int skillGuid;
        public int UseCount;
        /// 
        /// 是否被激活
        /// 
        public bool isActive = true;
        /// 
        /// 是否使用中
        /// 
        private bool isUse;
        public float[] effectValue;
        public CombatHeroEntity CombatHeroEntity
        {
            get { return _combatHeroEntity; }
        }
        /// 
        /// 转盘中的下表
        /// 
        public int index;
        private bool _isDis;
        // public float angle = 180;
        // public float useAngle;
        // public float lasetAngle = 360;
        public int useCount;
        /// 
        /// 当前激活技能的TimeLine数据
        /// 
        protected List currUseAllTimeLineLogic = new List();
        private CombatHeroEntity _combatHeroEntity;
        private Map>
            _triggerCallBack =
                new Map>();
        public SkillConfig SelfSkillConfig;
        // public SkillIntensifierData SkillIntensifierData;
        /// 
        /// 释放技能的时候当前焦点的目标
        /// 
        public CombatHeroEntity currFocusTarget;
        private SkillFeaturesData SkillFeaturesData;
        /// 
        /// 激活的timelinegoup名字
        /// 
        public string ActiveTimeLineGroupName;
        private System.Action finishCallBack;
        /// 
        /// 完成时 是否是要完成的timeGroupName
        /// 
        protected string _finishTimeLineGroupName;
        protected BetterList _enterAlertTarget = new BetterList();
        protected BetterList _currUseSkillTarget = new BetterList();
        protected bool _isEarlyWarning;
        /// 
        /// 是否使用技能目标里的缓存池子
        /// 
        protected bool _useSkillTargetPool = true;
        public WuXingType wuXingType;
        public TriggerData triggerData
        {
            get
            {
                _triggerData.Source = this;
                return _triggerData;
            }
        }
        private TriggerData _triggerData;
        // public float[] skillEffectValue;
        // private float[] defaultEffectValue;
        /// 
        /// 技能cd
        /// 
        public float SkillCd
        {
            get { return _skillCd; }
            set { _skillCd = value; }
        }
        private float _skillCd;
        public float SkillMaxCd;
        private CombatParticleSystemPool _earlyWarningFx;
        private CombatHeroEntity _earlyWarningFristHero;
        protected SkillInfo skillInfo;
        protected int ballisticsCount = 1;
        public T This()
        {
            return (T)(object)this;
        }
        // public void 
        public void IntensifyingEffect(float bl)
        {
            if (SelfSkillConfig.intensifierIndex == null)
            {
                return;
            }
            float[] basic = skillInfo.effectValue;
            // float[] newEffectValue = new float[effectValue.Length];
            for (int i = 0; i < SelfSkillConfig.intensifierIndex.Length; i++)
            {
                int index = SelfSkillConfig.intensifierIndex[i];
                if (index >= basic.Length)
                {
                    continue;
                }
                effectValue[index] = basic[index] * ((bl * 0.01f));
            }
        }
        public SkillFeaturesData GetSkillFeaturesData()
        {
            SkillFeaturesData skillFeaturesData = SkillFeaturesData.CapyFeaturesData();
            long v = (long)(skillFeaturesData.hp * CombatHeroEntity.CurrCombatHeroInfo.GetWuXingShuXing(wuXingType));
            v += CombatCalculateTool.Instance.GetVlaueRatioForLong(v,
                CombatHeroEntity.CurrCombatHeroInfo.gongFaStrength);
            skillFeaturesData.hp = v /
                                   ballisticsCount;
            skillFeaturesData.maxHp = skillFeaturesData.hp;
            return skillFeaturesData;
        }
        public override void ActiveObj()
        {
        }
        public void AddToSkillSlots()
        {
            Array.Copy(skillInfo.effectValue, effectValue, skillInfo.effectValue.Length);
        }
        /// 
        /// 激活技能,准备使用技能
        /// 
        public void ActiveSkill()
        {
            isActive = true;
            ProActiveSkill();
        }
        protected virtual void ProActiveSkill()
        {
        }
        public void Replace()
        {
            ProReplace();
        }
        protected virtual void ProReplace()
        {
        }
        /// 
        /// 轮询的初始化
        /// 
        public void PollingInit(BetterList skillQueue)
        {
            ProPollingnInit(skillQueue);
        }
        protected virtual void ProPollingnInit(BetterList skillQueue)
        {
        }
        /// 
        /// 休眠
        /// 
        public override void DormancyObj()
        {
            Dispose();
            _enterAlertTarget.Clear();
            _currUseSkillTarget.Clear();
            _triggerCallBack.Clear();
            _earlyWarningFx = null;
            _earlyWarningFristHero = null;
            _finishTimeLineGroupName = null;
            _earlyWarningFx = null;
            _isEarlyWarning = false;
            _triggerData = new TriggerData();
            _useSkillTargetPool = true;
            isUse = false;
            _combatHeroEntity = null;
            SkillMaxCd = 0;
            currUseAllTimeLineLogic.Clear();
            finishCallBack = null;
            _isDis = false;
        }
        /// 
        /// 开始游戏
        /// 
        public void StartGame()
        {
            //  InitSpecialWeapon();
            // if (SelfSkillConfig.SkillType == 4 || SelfSkillConfig.SkillType == 5)
            // {
            //     UseSkill();
            // }
            ProStartGame();
        }
        public void InitSkillConfig(CombatHeroEntity combatHeroEntity, SkillInfo skillInfo)
        {
            this.skillInfo = skillInfo;
            _combatHeroEntity = combatHeroEntity;
            SelfSkillConfig = skillInfo.skillConfig;
            SkillMaxCd = SelfSkillConfig.cd;
            _skillCd = SkillMaxCd;
            wuXingType = (WuXingType)SelfSkillConfig.attribute;
            SkillFeaturesData = new SkillFeaturesData();
            SkillFeaturesData.isEnemy = combatHeroEntity.IsEnemy;
            SkillFeaturesData.WuXingType = wuXingType;
            SkillFeaturesData.SkillBasic = this;
            SkillFeaturesData.hp = skillInfo.qiangDu;
            UseCount = SelfSkillConfig.SkillType * 100000;
            skillGuid = SelfSkillConfig.ID;
            effectValue = new float[skillInfo.effectValue.Length];
            Array.Copy(skillInfo.effectValue, effectValue, skillInfo.effectValue.Length);
            // if (SkillIntensifierData == null)
            // {
            //     SkillIntensifierData = new SkillIntensifierData();
            // }
            ProInitSkillConfig();
            ProInitSkill();
            // LogTool.Log("初始化技能"+skillConfig.scriptName);
        }
        protected virtual void ProInitSkillConfig()
        {
        }
        /// 
        /// 设置激活的TimeLine名字
        /// 
        public void SetActiveTimeLineGroupName(string groupName)
        {
            ActiveTimeLineGroupName = groupName;
        }
        public virtual bool IsCanUse()
        {
            if (DelayUseSkillCd > 0)
            {
                return false;
            }
            return true;
        }
        public virtual bool IsCanTriggerSkillSlots()
        {
            return isActive;
        }
        public HarmReturnInfo Harm(CombatHeroEntity source, CombatHeroHitPoint target, long att, AttType attType,
            TriggerData triggerData, ISkillFeatures skillFeatures, HarmType harmType = HarmType.Null)
        {
            if (target == null || target.combatHeroEntity == null)
            {
                return null;
            }
            return CombatCalculateTool.Instance.Harm(source, target, att, attType, triggerData, wuXingType,
                skillFeatures,
                harmType);
        }
        public HarmReturnInfo Recover(CombatHeroEntity source, CombatHeroHitPoint target, long att,
            AttType attType, HarmType harmType = HarmType.Recover)
        {
            return CombatCalculateTool.Instance.Recover(source, target, att, attType, harmType, triggerData);
        }
        public void SetSkillFinishCallBack(System.Action finishCallBack)
        {
            this.finishCallBack = finishCallBack;
        }
        /// 
        /// 开始使用技能
        /// 
        public void UseSkill()
        {
            // BetterList currIntensifierEffectBasicList =
            //     SkillIntensifierData.currIntensifierEffectBasicList;
            // for (int i = 0; i < currIntensifierEffectBasicList.Count; i++)
            // {
            //     currIntensifierEffectBasicList[i].IntensifierSkillUseBefore(this);
            // }
            SkillCd = SkillMaxCd;
            _enterAlertTarget.Clear();
            UseCount++;
            _triggerData = new TriggerData();
            isUse = true;
            _triggerData.TriggerGuid = UseCount;
            _currUseSkillTarget.Clear();
            currUseAllTimeLineLogic.Clear();
            // CombatEventManager.Instance.Dispatch(CombatEventType.HeroUseSkill, new HeroUseSkillEventData()
            // {
            //     CombatHeroEntity = CombatHeroEntity,
            //     SkillBasic = this
            // });
            ProUseSkill();
        }
        public override void Dispose()
        {
            if (_isDis)
            {
                return;
            }
            _isDis = true;
            currUseAllTimeLineLogic.Clear();
            ProDispose();
            _combatHeroEntity = null;
        }
        public SpecialDotInfo GetSpecialDotInfo(string specialDotName)
        {
            return _combatHeroEntity.GetSpecialDotInfo(specialDotName);
        }
        public T GetILifetCycleHitPoint(string hitPoinName, bool isStandType, bool isIgnoreHind)
            where T : ILifetCycleHitPoint
        {
            return _combatHeroEntity.GetILifetCycleHitPoint(hitPoinName, isStandType, isIgnoreHind);
        }
        public T GetMainHotPoin(bool isIgnoreHind) where T : ILifetCycleHitPoint
        {
            throw new NotImplementedException();
        }
        public void CloseLoopFx(IGObjectPoolInterface objectPoolInterface)
        {
        }
        /// 
        /// 添加trigger监听事件
        /// 
        /// 
        /// 
        protected void AddTriggerCallBack(string groupName,
            System.Action callBack)
        {
            if (!_triggerCallBack.ContainsKey(groupName))
            {
                _triggerCallBack.Add(groupName, callBack);
            }
        }
        /// 
        /// 移除trigger添加事件
        /// 
        /// 
        /// 
        protected void RemoveTriggerCallBack(string groupName,
            System.Action callBack)
        {
            if (_triggerCallBack.ContainsKey(groupName))
            {
                _triggerCallBack.Remove(groupName);
            }
        }
        /// 
        /// 激活timeLine数据
        /// 
        /// 组
        /// 传递给timeLine的目标
        /// 透传消息
        /// 自定义坐标
        /// timeLine完成回调
        public TimeLineEventLogicGroupBasic ActivationTimeLineData(string groupName, string timeLineName = null,
            BetterList currTarget = null,
            Vector3[] customizePos = null, System.Action finishCallBack = null, float startTime = default,
            object extraData = null, int indexCount = 0)
        {
            bool isNoAnim = false;
            if (groupName.Contains("noAnim"))
            {
                groupName = groupName.Replace("noAnim", "");
                isNoAnim = true;
            }
            TimeLineEventLogicGroupBasic timeLineEventLogicGroup =
                _combatHeroEntity.combatHeroTimeLineControl
                    .GetTimeLineEventLogicGroup(timeLineName, groupName);
            try
            {
                if (timeLineEventLogicGroup != null)
                {
                    timeLineEventLogicGroup.extraData = extraData;
                    timeLineEventLogicGroup.SetCombatInfo(_combatHeroEntity, this, currTarget, triggerData,
                        customizePos, indexCount);
                    timeLineEventLogicGroup.TimeLineUpdateEnd = finishCallBack;
                    timeLineEventLogicGroup.timeLineTime = startTime;
                    _combatHeroEntity.combatHeroTimeLineControl.AddEventLogicGroup(timeLineEventLogicGroup);
                    currUseAllTimeLineLogic.Add(timeLineEventLogicGroup);
                }
            }
            catch (Exception e)
            {
                LogTool.Error(e);
            }
            return timeLineEventLogicGroup;
        }
        /// 
        /// 打断技能
        /// 
        public void BreakSkill()
        {
            // CombatEventManager.Instance.Dispatch(CombatEventType.BreakSkill, new CombatEventDefaultData()
            // {
            //     datas = new object[2] { _combatHeroEntity, this }
            // });
            for (int i = 0; i < currUseAllTimeLineLogic.Count; i++)
            {
                if (currUseAllTimeLineLogic[i] != null && currUseAllTimeLineLogic[i].CastEntity != CombatHeroEntity)
                {
                    LogTool.Log("对象以移交");
                }
                else
                {
                    currUseAllTimeLineLogic[i].BreakTimeLine(CombatHeroEntity);
                    _combatHeroEntity.combatHeroTimeLineControl.RemoveEventLogicGroup(currUseAllTimeLineLogic[i]);
                }
            }
            currUseAllTimeLineLogic.Clear();
            SkillPlayFinish();
            ProBreakSkill();
        }
        /// 
        /// 技能timeLine的完成标志。表示当前TimeLine播放完成
        /// 
        /// 那一个组的完成了
        public void TimeLineEndSing(string groupName)
        {
            ProTimeLineEndSing(groupName);
        }
        /// 
        /// 技能更新
        /// 
        /// 
        public void CombatUpdate(float time)
        {
            DelayUseSkillCd -= time;
            ProCombatUpdate(time);
        }
        /// 
        /// 技能播放完成
        /// 
        public void SkillPlayFinish()
        {
            if (!isUse)
            {
                return;
            }
       
            isUse = false;
            finishCallBack?.Invoke(this);
            ProSkillPlayFinish();
            finishCallBack = null;
            _isEarlyWarning = false;
            _earlyWarningFristHero = null;
            if (_earlyWarningFx != null)
            {
                GObjectPool.Instance.Recycle(_earlyWarningFx);
                _earlyWarningFx = null;
            }
            // BetterList currIntensifierEffectBasicList =
            //     SkillIntensifierData.currIntensifierEffectBasicList;
            // for (int i = 0; i < currIntensifierEffectBasicList.Count; i++)
            // {
            //     currIntensifierEffectBasicList[i].IntensifierSkillTimelineFxLogicUseFinish(this);
            // }
        }
        /// 
        /// timeLine和子弹碰撞后会调用
        /// 
        /// 触发类型,默认没用
        /// 时间线上配置的数据(默认null)
        /// 目标对象(敌人)
        /// 触发的额外数据——透传数据
        public void TimeLineTrigger(string groupName, ILifetCycleHitPoint targetEntity,
            ITimelineFxLogic timelineFxLogic, TriggerData triggerData, ISkillFeatures skillFeatures)
        {
            if (targetEntity == null || _isDis)
            {
                return;
            }
            if (_triggerCallBack.ContainsKey(groupName))
            {
                _triggerCallBack[groupName]?.Invoke(groupName,
                    targetEntity != null ? targetEntity.This() : null, timelineFxLogic,
                    triggerData, skillFeatures);
            }
            else
            {
                ProDefaultTimeLineTrigger(groupName,
                    targetEntity != null ? targetEntity.This() : null, timelineFxLogic,
                    triggerData, skillFeatures);
            }
        }
        public bool IsPassiveActivateSkill(SkillBasic targetSkillBasic)
        {
            if (targetSkillBasic == null)
            {
                return false;
            }
            if (targetSkillBasic.SelfSkillConfig.SkillType != 1)
            {
                return false;
            }
            if (SelfSkillConfig.PromoteLanPara_1 == null)
            {
                return false;
            }
            for (int i = 0; i < SelfSkillConfig.PromoteLanPara_1.Length; i++)
            {
                int configIndex = (int)SelfSkillConfig.PromoteLanPara_1[i];
                int currIndex = (configIndex + index) % 10;
                if (targetSkillBasic.index == currIndex)
                {
                    return true;
                }
            }
            return false;
        }
        public ILifetCycleHitPoint[] GetTineLineTargetEntity(TimeLineEventLogicBasic timeLineEventLogicBasic)
        {
            // BetterList point = CombatListPool.Instance.Get();
            if (_useSkillTargetPool)
            {
                if (_currUseSkillTarget != null && _currUseSkillTarget.Count > 0)
                {
                    return _currUseSkillTarget.ToArray();
                }
            }
            _currUseSkillTarget.Clear();
            ILifetCycleHitPoint[] allHit = ProGetTineLineTargetEntity(timeLineEventLogicBasic);
            _currUseSkillTarget.AddRange(allHit);
            return _currUseSkillTarget.ToArray();
        }
        public ILifetCycleHitPoint[] FilterTarget(TimeLineEventLogicBasic timeLineEventLogicBasic,
            FXTargetType fixtarget, ILifetCycleHitPoint[] target)
        {
            if ((int)fixtarget == 1)
            {
                return target;
            }
            // BetterList point = CombatListPool.Instance.Get();
            // bool myEnemy = _combatHeroEntity.CombatHeroDataComponent.CurrCombatHeroInfo.IsEnemy;
            // for (int i = 0; i < target.Count; i++)
            // {
            //     bool targetEnemy = target[i].This().CombatHeroEntity.CombatHeroDataComponent
            //         .CurrCombatHeroInfo.IsEnemy;
            //     if (fixtarget.HasFlag(FXTargetType.Enemy) && targetEnemy != myEnemy)
            //     {
            //         point.Add(target[i]);
            //     }
            //
            //     if (fixtarget.HasFlag(FXTargetType.Teammate) && targetEnemy == myEnemy)
            //     {
            //         point.Add(target[i]);
            //     }
            //
            //     if (fixtarget.HasFlag(FXTargetType.Oneself) &&
            //         target[i].This().CombatHeroEntity == _combatHeroEntity)
            //     {
            //         point.Add(target[i]);
            //     }
            // }
            return target;
        }
        public ILifetCycleHitPoint[] FilterTargetForCombat(TimeLineEventLogicBasic timeLineEventLogicBasic,
            FXTargetType fixtarget,
            ILifetCycleHitPoint[] target)
        {
            return target;
        }
        protected virtual void ProInitSkill()
        {
        }
        protected abstract void ProUseSkill();
        protected virtual ILifetCycleHitPoint[] ProGetTineLineTargetEntity(
            TimeLineEventLogicBasic timeLineEventLogicBasic)
        {
            if (CombatHeroEntity.CombatAIBasic.currFocusTarget == null)
            {
                return null;
            }
            if (CombatHeroEntity.CombatAIBasic.currFocusTarget is BannerHero)
            {
                return null;
            }
            ILifetCycleHitPoint lifetCycleHitPoint = CombatHeroEntity.CombatAIBasic.currFocusTarget
                .GetThis()
                .GetMainHotPoin();
            if (lifetCycleHitPoint == null)
            {
                return null;
            }
            return new[] { lifetCycleHitPoint };
        }
        /// 
        /// 默认的触发器
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        protected virtual void ProDefaultTimeLineTrigger(string groupName, CombatHeroHitPoint targetEntity,
            ITimelineFxLogic timelineFxLogic, TriggerData triggerData, ISkillFeatures skillFeatures)
        {
        }
        protected virtual void ProSkillPlayFinish()
        {
        }
        protected virtual void ProDispose()
        {
        }
        /// 
        /// 
        /// 
        /// 
        protected virtual void ProTimeLineEndSing(string groupName)
        {
            if (string.IsNullOrEmpty(_finishTimeLineGroupName))
            {
                SkillPlayFinish();
            }
            else if (_finishTimeLineGroupName == groupName)
            {
                SkillPlayFinish();
            }
        }
        protected virtual void ProCombatUpdate(float time)
        {
        }
        /// 
        /// 技能被打断
        /// 
        protected virtual void ProBreakSkill()
        {
        }
        protected virtual void ProStartGame()
        {
        }
        public void TimelineFxLogicInit(string groupName, ITimelineFxLogic timelineFxLogic, TriggerData triggerData)
        {
            ProTimelineFxLogicInit(groupName, timelineFxLogic, triggerData);
            TimelineFxLogicInitEventData eventData = TimelineFxLogicInitEventData.Create();
            eventData.SkillBasic = this;
            eventData.timelineFxLogic = timelineFxLogic as FxAILogicBasic;
            CombatEventManager.Instance.Dispatch(CombatEventType.TimelineFxLogicInit, eventData);
        }
        /// 
        /// 实例化出的特效逻辑初始化
        /// 
        /// 
        /// 
        protected virtual void ProTimelineFxLogicInit(string groupName, ITimelineFxLogic timelineFxLogic,
            TriggerData triggerData)
        {
        }
        public void TimeLineTriggerGround(string groupName, ITimelineFxLogic timelineFxLogic, TriggerData triggerData)
        {
            ProTimeLineTriggerGround(groupName, timelineFxLogic, triggerData);
        }
        /// 
        /// 触碰地面
        /// 
        /// 
        /// 
        protected virtual void ProTimeLineTriggerGround(string groupName, ITimelineFxLogic timelineFxLogic,
            TriggerData triggerData)
        {
        }
        public void InitAlert(TimeLineAlertSeriailztion timeLineAlertSeriailztion, GameObject gameObject)
        {
            CombatAlertManager.Instance.AddAlert(gameObject, _combatHeroEntity);
        }
        public void LeaveAlert(TimeLineAlertSeriailztion timeLineAlertSeriailztion, GameObject gameObject)
        {
            _enterAlertTarget.Clear();
            CombatAlertManager.Instance.RemoveAlert(gameObject);
        }
        public void Enter(TimeLineAlertSeriailztion timeLineAlertSeriailztion, Collider collider, GameObject gameObject)
        {
            HeroEntityMono heroEntityMono = collider.gameObject.GetComponent();
            if (heroEntityMono == null)
            {
                return;
            }
            CombatHeroEntity target = heroEntityMono.combatHeroEntity;
            if (timeLineAlertSeriailztion.isFindEnemy && target.IsEnemy == _combatHeroEntity.IsEnemy ||
                timeLineAlertSeriailztion.isFindMyHero && target.IsEnemy != _combatHeroEntity.IsEnemy)
            {
                return;
            }
            if (_enterAlertTarget.Contains(target))
            {
                return;
            }
            _enterAlertTarget.Add(target);
            if (timeLineAlertSeriailztion.alertType == TimeLineAlertSeriailztion.TimeLineAlertType.Dangerous)
            {
                AlertTriggerEventData alertTriggerEventData = AlertTriggerEventData.Create();
                alertTriggerEventData.combatHeroEntity = target;
                alertTriggerEventData.attackEntity = _combatHeroEntity;
                alertTriggerEventData.collider = collider;
                alertTriggerEventData.triggerObject = gameObject;
                alertTriggerEventData.isTrigger = true;
                CombatEventManager.Instance.Dispatch(CombatEventType.AlertTrigger, alertTriggerEventData);
            }
            ProHeroEnter(timeLineAlertSeriailztion, target);
        }
        protected virtual void ProHeroEnter(TimeLineAlertSeriailztion timeLineAlertSeriailztion,
            CombatHeroEntity target)
        {
        }
        public void Leave(TimeLineAlertSeriailztion timeLineAlertSeriailztion, Collider collider, GameObject gameObject)
        {
            HeroEntityMono heroEntityMono = collider.gameObject.GetComponent();
            if (heroEntityMono == null || CombatHeroEntity == null)
            {
                return;
            }
            CombatHeroEntity target = heroEntityMono.combatHeroEntity;
            if (target.IsEnemy == CombatHeroEntity.IsEnemy)
            {
                return;
            }
            if (!_enterAlertTarget.Contains(target))
            {
                return;
            }
            _enterAlertTarget.Remove(target);
            if (timeLineAlertSeriailztion.alertType == TimeLineAlertSeriailztion.TimeLineAlertType.Dangerous)
            {
                AlertTriggerEventData alertTriggerEventData = AlertTriggerEventData.Create();
                alertTriggerEventData.combatHeroEntity = target;
                alertTriggerEventData.attackEntity = _combatHeroEntity;
                alertTriggerEventData.collider = collider;
                alertTriggerEventData.isTrigger = false;
                alertTriggerEventData.triggerObject = gameObject;
                CombatEventManager.Instance.Dispatch(CombatEventType.AlertTrigger, alertTriggerEventData);
            }
            ProHeroLeave(timeLineAlertSeriailztion, target);
        }
        protected virtual void ProHeroLeave(TimeLineAlertSeriailztion timeLineAlertSeriailztion,
            CombatHeroEntity target)
        {
        }
    }
}