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; } }
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; } }
public void Interrupt(Func <HashSet <EPlayerState>, bool> recoverFunc = null) { interruptState = EInterruptState.WaitInterrupt; this.recoverFunc = recoverFunc; }
// private EInterruptCmdType cmdType; public InterruptEventHandler(PlayerEntity playerEntity) { interruptState = EInterruptState.Closed; }