private void SetState(PapuanState nextState) { if (nextState == null) { return; } _currentState?.Exit(); _currentState = nextState; _currentState.Enter(); _currentStateName = nextState.ToString(); }
public bool NeedTransition(out PapuanState nextState) { nextState = null; foreach (PapuanTransition transition in Transitions) { if (transition.NeedTransit()) { nextState = transition.TargetState; DisableAllTransitions(); return(true); } } return(false); }
private void Awake() { Papuan papuan = GetComponent <Papuan>(); PapuanState moveState = new PapuanMoveState(papuan); PapuanState searchingState = new PapuanIdleState(papuan); PapuanState standingNearPlayer = new PapuanLookAtPlayerState(papuan); PapuanState attackState = new AttackState(papuan, 0.3f); PapuanState attackBackState = new AttackBackState(papuan); PapuanState attackGateState = new PapuanAttackGateState(papuan, 0.3f); PapuanState moveToGate = new PapuanMoveToGateState(papuan); PapuanState moveToGateSlote = new PapuanMoveToGateSloteState(papuan); PapuanState standingNearGate = new PapuanLookForEmptySloteState(papuan); PapuanState standingInGateSlote = new PapuanStandingInGateSlote(papuan); PapuanState exitFromGateState = new PapuanStopedAttackGateState(papuan); PapuanTransition whenChooseTarget = new PapuanSeePlayerTransition(papuan, moveState); PapuanTransition whenCantSeeTarget = new PapuanLoseTargetFromViewTransition(papuan, moveToGate, 2); PapuanTransition whenTargetIsClose = new PapuanPlayerDistanceTransition(papuan, attackState, 0.5f, false); PapuanTransition whenTargetWentAway = new PapuanPlayerDistanceTransition(papuan, searchingState, 1.5f, true); PapuanTransition waitCooldownAfterAttack = new PapuanWaitingTransition(papuan, searchingState, 1); PapuanTransition whenSomeoneHit = new PapuanAttackedTransition(papuan, attackBackState); PapuanTransition waitAfterTurnToAttackBack = new PapuanWaitingTransition(papuan, moveState, 0.1f); PapuanTransition whenCloseToGate = new PapuanGateSloteDistanceTransition(papuan, standingNearGate, 3); PapuanTransition whenFoundEmptySlote = new PapuanEmptySloteTransition(papuan, moveToGateSlote); PapuanTransition whenMovedToGateSlote = new PapuanGateSloteDistanceTransition(papuan, standingInGateSlote, 0.2f); PapuanTransition whenStayInGateSlote = new PapuanGateSloteDistanceTransition(papuan, attackGateState, 0.2f); PapuanTransition waitCooldownAfterAttackGate = new PapuanWaitingTransition(papuan, standingInGateSlote, 1); PapuanTransition whenDistractedFromGate = new PapuanSeePlayerTransition(papuan, exitFromGateState); PapuanTransition waitDelayAfterDistraction = new PapuanWaitingTransition(papuan, moveState, 0.1f); searchingState.Transitions = new PapuanTransition[] { whenChooseTarget, whenSomeoneHit, whenCantSeeTarget }; moveState.Transitions = new PapuanTransition[] { whenCantSeeTarget, whenTargetIsClose, whenSomeoneHit }; standingNearPlayer.Transitions = new PapuanTransition[] { whenTargetWentAway, whenSomeoneHit }; attackState.Transitions = new PapuanTransition[] { waitCooldownAfterAttack, whenSomeoneHit }; attackBackState.Transitions = new PapuanTransition[] { waitAfterTurnToAttackBack }; moveToGate.Transitions = new PapuanTransition[] { whenCloseToGate, whenChooseTarget }; standingNearGate.Transitions = new PapuanTransition[] { whenFoundEmptySlote, whenChooseTarget }; moveToGateSlote.Transitions = new PapuanTransition[] { whenMovedToGateSlote, whenChooseTarget, whenDistractedFromGate }; standingInGateSlote.Transitions = new PapuanTransition[] { whenStayInGateSlote, whenDistractedFromGate }; attackGateState.Transitions = new PapuanTransition[] { waitCooldownAfterAttackGate, whenDistractedFromGate }; exitFromGateState.Transitions = new PapuanTransition[] { waitDelayAfterDistraction }; _currentState = moveToGate; }
public PapuanSeePlayerTransition(Papuan papuan, PapuanState targetState) : base(papuan, targetState) { }
public PapuanEmptySloteTransition(Papuan papuan, PapuanState targetState) : base(papuan, targetState) { }
public PapuanAttackedTransition(Papuan papuan, PapuanState targetState) : base(papuan, targetState) { }
public PapuanTransition(Papuan papuan, PapuanState targetState) { Papuan = papuan; TargetState = targetState; }
public PapuanGateSloteDistanceTransition(Papuan papuan, PapuanState papuanState, float distance) : base(papuan, papuanState) { _distance = distance; }
public PapuanPlayerDistanceTransition(Papuan papuan, PapuanState targetState, float distance, bool more) : base(papuan, targetState) { _distance = distance; _more = more; }
public PapuanLoseTargetFromViewTransition(Papuan papuan, PapuanState targetState, float delay) : base(papuan, targetState) { _delay = delay; }
public PapuanWaitingTransition(Papuan papuan, PapuanState targetState, float delay) : base(papuan, targetState) { _delay = delay; }