public void Update(HashSet <EPlayerState> states)
        {
            Trigger(states);
            if (interruptState == EInterruptState.Closed)
            {
                return;
            }
            if (states.Contains(EPlayerState.Dead) /* || states.Contains(EPlayerState.Dying)*/)
            {
                interruptState = EInterruptState.Closed;
                recoverFunc    = null;
                return;
            }

            switch (interruptState)
            {
            case EInterruptState.WaitInterrupt:
                Interrupt();
                if (recoverFunc == null)
                {
                    interruptState = EInterruptState.Closed;
                }
                else
                {
                    interruptState = EInterruptState.WaitRecover;
                }
                break;

            case EInterruptState.WaitRecover:
                if (player.hasGamePlay &&
                    (player.gamePlay.JobAttribute == (int)EJobAttribute.EJob_Matrix ||
                     player.gamePlay.JobAttribute == (int)EJobAttribute.EJob_Variant))
                {
                    interruptState = EInterruptState.Closed;
                    return;
                }
                if (recoverFunc(states))
                {
                    Recover();
                    interruptState = EInterruptState.Closed;
                }
                else
                {
                    Block();
                }
                break;
            }
        }
Exemple #2
0
        public void Update(HashSet <EPlayerState> states)
        {
            Trigger(states);
            if (interruptState == EInterruptState.Closed)
            {
                return;
            }
            if (states.Contains(EPlayerState.Dead) || states.Contains(EPlayerState.Dying))
            {
                interruptState = EInterruptState.Closed;
                recoverFunc    = null;
                return;
            }

            switch (interruptState)
            {
            case EInterruptState.WaitInterrupt:
                Interrupt();
                if (recoverFunc == null)
                {
                    interruptState = EInterruptState.Closed;
                }
                else
                {
                    interruptState = EInterruptState.WaitRecover;
                }
                break;

            case EInterruptState.WaitRecover:
                if (recoverFunc(states))
                {
                    Recover();
                    interruptState = EInterruptState.Closed;
                }
                break;
            }
        }
Exemple #3
0
 public void Interrupt(Func <HashSet <EPlayerState>, bool> recoverFunc = null)
 {
     interruptState   = EInterruptState.WaitInterrupt;
     this.recoverFunc = recoverFunc;
 }
Exemple #4
0
//        private EInterruptCmdType cmdType;

        public InterruptEventHandler(PlayerEntity playerEntity)
        {
            interruptState = EInterruptState.Closed;
        }