void Start() { FsmState idle = new FsmState(this); idle._actions = new FsmAction[] { new FsmAction_Idle(idle) }; FsmState move = new FsmState(this); move._actions = new FsmAction[] { new FsmAction_Move(move) }; idle._transitions = new FsmTransition[] { new FsmTransition { NextState = move, Conditions = new List<FsmCondition> { new FsmCondition_Input(idle) { IsPressedCondition = true } } } }; move._transitions = new FsmTransition[] { new FsmTransition { NextState = idle, Conditions = new List<FsmCondition> { new FsmCondition_Input(move) { IsPressedCondition = false } } } }; SetNextState(idle); }
void SetNextState(FsmState nextState) { if (State != null) { State.Exit(); } PrevState = State; State = nextState; State.Start(); }
public FsmAction_Idle(FsmState state) : base(state) { }
public FsmAction(FsmState state) { State = state; }
public FsmCondition_Input(FsmState state) : base(state) { }
public FsmCondition(FsmState state) { State = state; }
public FsmAction_Move(FsmState state) : base(state) { _transform = state.FSM.transform; _rigidbody = state.FSM.GetComponent<Rigidbody>(); }
public void StartFsm(FsmState startState) { ChangeState(startState); m_Started = true; m_OnFsmStart?.Invoke(); }
public void ChangeState(FsmState state) { m_CurrentState?.OnExit(); m_CurrentState = state; state.OnEnter(); }