using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic; using GameLogic.Combat.CombatTool; namespace GameLogic.Combat.Hero.State { public class CombatHeroDieState : CombatHeroStateBasic { public float resurrectionTime; protected bool isStartResurrection; protected bool isSwitch = false; private TimeLineEventLogicGroupBasic _timeLineEventLogicGroupBasic; public CombatHeroDieState(CombatHeroEntity combatHeroEntity) : base(combatHeroEntity) { } public override bool IsSwitch(IState nextState) { return isSwitch; } protected override void ProEnter() { isSwitch = false; resurrectionTime = 0; TimeLineEventLogicGroupBasic timeLineEventLogicGroup = combatHeroEntity.combatHeroTimeLineControl.AddEventLogicGroup("die"); if (timeLineEventLogicGroup != null) { timeLineEventLogicGroup.TimeLineUpdateEnd = delegate { if (combatHeroEntity.IsEnemy) { CombatController.currActiveCombat.CombatHeroController.RemoveDieHero(combatHeroEntity); } else { isStartResurrection = true; _timeLineEventLogicGroupBasic = combatHeroEntity.combatHeroTimeLineControl.AddEventLogicGroup("die_idle"); } }; } else { if (combatHeroEntity.IsEnemy) { CombatController.currActiveCombat.CombatHeroController.RemoveDieHero(combatHeroEntity); } else { isStartResurrection = true; _timeLineEventLogicGroupBasic = combatHeroEntity.combatHeroTimeLineControl.AddEventLogicGroup("die_idle"); } } // combatHeroEntity.Dispose(); } protected override void ProExit() { _timeLineEventLogicGroupBasic?.BreakTimeLine(combatHeroEntity); } protected override void ProUpdate(float t) { if (isStartResurrection) { resurrectionTime += t; if (resurrectionTime > 60) { isSwitch = true; isStartResurrection = false; resurrectionTime = 0; combatHeroEntity.CombatAIBasic.ChangeState(CombatHeroStateType.Resurrection); } } } } }