using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
using Common.Utility.CombatEvent;
using Fort23.Core;
using GameLogic.Combat.CombatTool;
namespace GameLogic.Combat.Hero.State
{
    /// 
    /// 英雄的休眠状态
    /// 
    public class CombatHeroXiuMianState : CombatHeroStateBasic
    {
        public CombatHeroXiuMianState(CombatHeroEntity combatHeroEntity) : base(combatHeroEntity)
        {
        }
        protected override void ProEnter()
        {
            if (!combatHeroEntity.IsEnemy)
            {
                combatHeroEntity.CombatAIBasic.ChangeState(CombatHeroStateType.idle);
                return;
            }
            combatHeroEntity.GetMainHotPoin(true).IsHide = true;
            CombatEventManager.Instance.AddEventListener(CombatEventType.ActiveCombat, ActiveCombat);
            TimeLineEventLogicGroupBasic timeLineEventLogicGroup =
                combatHeroEntity.combatHeroTimeLineControl.TimeLineData
                    .GetTimeLineEventLogicGroup("xiumian", null);
            if (timeLineEventLogicGroup != null)
            {
                timeLineEventLogicGroup.SetCombatInfo(combatHeroEntity, null, null, new TriggerData(), null);
                timeLineEventLogicGroup.TimeLineUpdateEnd = delegate { FinishTimeLine(); };
                combatHeroEntity.combatHeroTimeLineControl.AddEventLogicGroup(timeLineEventLogicGroup);
            }
            else
            {
                FinishTimeLine();
            }
        }
        protected void FinishTimeLine()
        {
            if (CombatController.currActiveCombat.CombatTypeBasic.isActiveCombat)
            {
                ActiveHero();
            }
        }
        protected void ActiveHero()
        {
            TimerComponent.Instance.AddTimer(CombatCalculateTool.Instance.GetOdd(0, 2000),
                delegate { combatHeroEntity.CombatAIBasic.ChangeState(CombatHeroStateType.Active); });
        }
        private void ActiveCombat(IEventData eventData)
        {
            CombatEventManager.Instance.RemoveEventListener(CombatEventType.ActiveCombat, ActiveCombat);
            ActiveHero();
        }
        protected override void ProExit()
        {
            CombatEventManager.Instance.RemoveEventListener(CombatEventType.ActiveCombat, ActiveCombat);
        }
        protected override void ProDispose()
        {
            CombatEventManager.Instance.RemoveEventListener(CombatEventType.ActiveCombat, ActiveCombat);
        }
    }
}