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
{
private TimerEntity _timerEntity;
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()
{
_timerEntity= 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()
{
TimerComponent.Instance.Remove(_timerEntity);
CombatEventManager.Instance.RemoveEventListener(CombatEventType.ActiveCombat, ActiveCombat);
}
}
}