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 sk1_show = ActivationTimeLineData("sk1_show");
            sk1_show.TimeLineUpdateEnd = ShowFinish;
            root = CombatMagicWeaponEntity.RootMagicWeaponControl.combatHeroEntity.GameObject.transform;
            _dir = Vector3.forward * 1;
            Vector3 d = root.rotation * _dir;
            CombatHeroEntity.GameObject.transform.position = d + root.position;
            // TimeLineEventLogicGroupBasic timeLineEventLogicGroupBasic = ActivationTimeLineData("sk1_xiaoshi");
            // timeLineEventLogicGroupBasic.TimeLineUpdateEnd = delegate()
            // {
            //   
            //    
            //  
            // };
            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()
        {
            ActivationTimeLineData("sk1");
            isUpdate = true;
            _currTime = 0;
        }
        protected override void MagicSkillUpdate(float time)
        {
            if (!isUpdate)
            {
                return;
            }
            _currTime += time;
            if (_currTime >= SelfSkillConfig.effectValue[0])
            {
                ActivationTimeLineData("sk1_xiaoshi");
                SkillPlayFinish();
                isUpdate = false;
                return;
            }
            _jiaoDu -= 360 * time * 0.5f;
            Quaternion quaternionY = Quaternion.Euler(0, _jiaoDu, 0);
            Vector3 d = root.rotation * quaternionY * _dir+new Vector3(0,0.5f,0);
            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;
        }
    }
}