public SkillFSMMachine AddTransition(IComparable fromState, IComparable toStete, IComparable command, Func <bool> testConditionFunction = null) { _states.TryGetValue(fromState, out var fromFsmState); _states.TryGetValue(toStete, out var toFsmState); if (fromFsmState != null && toFsmState != null) { SkillFSMTransition fSMTransition = new SkillFSMTransition(fromFsmState, toFsmState, testConditionFunction); AddTransition(fSMTransition, command); } else { Debug.LogWarning("Do not have fromState or toStete"); } return(this); }
private void HandleTransitionComplete(SkillFSMTransition transition) { CurrentTransition.OnComplete -= HandleTransitionComplete; PreviousState = CurrentState; CurrentState = transition.ToState; CurrentTransition = null; isInitialisingState = true; PreviousState.Exit(); OnStateChange?.Invoke(PreviousState, CurrentState); CurrentState.Enter(); OnStateEnter?.Invoke(CurrentState); isInitialisingState = false; }
public SkillFSMMachine AddTransition(SkillFSMTransition fSMTransition, IComparable command = null) { if (fSMTransition == null) { return(this); } if (!_states.ContainsValue(fSMTransition.FromState)) { return(this); } if (!_states.ContainsValue(fSMTransition.ToState)) { return(this); } command = (command == null) ? fSMTransition.ToState.Name : command; _transitions[fSMTransition.FromState] = _transitions.ContainsKey(fSMTransition.FromState) ? _transitions[fSMTransition.FromState] : new Dictionary <IComparable, SkillFSMTransition>(); _transitions[fSMTransition.FromState][command] = fSMTransition; return(this); }
public void OnStateTransition(SkillFSMTransition transition) { }