Exemple #1
0
        public bool RemoveBehaviour(IStateBehaviour behaviour)
        {
            int indexOfBehaviour = _behaviours.IndexOf(behaviour);

            if (_behaviours.Remove(behaviour))
            {
                if (indexOfBehaviour <= _currentBehaviourEnterIndex && _currentBehaviourEnterIndex > 0)
                {
                    _currentBehaviourEnterIndex--;
                }

                if (indexOfBehaviour <= _currentBehaviourUpdateIndex && _currentBehaviourUpdateIndex > 0)
                {
                    _currentBehaviourUpdateIndex--;
                }

                if (indexOfBehaviour <= _currentBehaviourExitIndex && _currentBehaviourExitIndex > 0)
                {
                    _currentBehaviourExitIndex--;
                }

                return(false);
            }

            return(false);
        }
Exemple #2
0
 public void AddBehaviour(IStateBehaviour behaviour)
 {
     if (_behaviours.Contains(behaviour) == false)
     {
         _behaviours.Add(behaviour);
     }
 }
 public void Stop()
 {
     if (_state != null)
     {
         _state.Exit();
     }
     _state = null;
     _disposables.Cancel();
     _disposables = null;
 }
 public virtual void Stop()
 {
     if (CurrentState != null)
     {
         CurrentState.Stop();
     }
     Debug.LogFormat("STOP State: {0}", CurrentState);
     CurrentState = null;
     _stateExecutor.Stop();
 }
 public void Stop()
 {
     if (_state != null)
     {
         _state.Exit();
     }
     _state = null;
     _disposables.Cancel();
     _disposables = null;
     _routineType = RoutineType.Update;
 }
Exemple #6
0
 public static IEnumerable <IStateBehaviour <TStateMachine> > GetStateBehaviours <TStateMachine>(this TStateMachine stateMachine, Animator animator)
 {
     StateMachineBehaviour[] behaviours = animator.GetBehaviours <StateMachineBehaviour>();
     foreach (StateMachineBehaviour behaviour in behaviours)
     {
         IStateBehaviour <TStateMachine> stateBehaviour = behaviour as IStateBehaviour <TStateMachine>;
         if (stateBehaviour == null)
         {
             continue;
         }
         yield return(stateBehaviour);
     }
 }
Exemple #7
0
        public void SwitchToState <T>(TStateKey nextStateKey, T arg)
        {
            _currentState?.StateEnded();

            if (_availableStates.TryGetValue(nextStateKey, out var nextState))
            {
                _currentState = nextState;
                CurrentState  = nextStateKey;
                StateChanged?.Invoke(nextStateKey);
                ((IStateWithArg <TStateKey, T>)_currentState).StateStarted(arg);
            }
            else
            {
                _currentState = null;
                Debug.LogWarningFormat("[FSM] No such state registered in state machine: {0}", nextStateKey);
            }
        }
Exemple #8
0
        public void SwitchToState(TStateKey nextStateKey)
        {
            _currentState?.StateEnded();

            if (_availableStates.TryGetValue(nextStateKey, out var nextState))
            {
                _currentState    = nextState;
                _currentStateKey = nextStateKey;
                StateChanged?.Invoke(nextStateKey);
                _currentState.StateStarted();
            }
            else
            {
                _currentState = null;
                Debug.LogWarningFormat("No such state registered in state machine: {0}", nextStateKey);
            }
        }
Exemple #9
0
        public void Add_Behavioural_States()
        {
            var fsm = new HierarchicalStateMachine <int, int>();

            var behaviouralState1 = fsm.AddWithBehaviours(1);

            Assert.IsTrue(fsm.ContainsState(1));
            Assert.IsTrue(fsm.GetStateById(1) == behaviouralState1);

            IStateBehaviour stateBehaviour1 = Substitute.For <IStateBehaviour>();
            IStateBehaviour stateBehaviour2 = Substitute.For <IStateBehaviour>();

            var behaviouralState2 = fsm.AddWithBehaviours(2, stateBehaviour1, stateBehaviour2);

            Assert.IsTrue(fsm.ContainsState(2));
            Assert.IsTrue(fsm.GetStateById(2) == behaviouralState2);
            Assert.IsTrue(fsm.ContainsBehaviour(stateBehaviour1));
            Assert.IsTrue(fsm.ContainsBehaviour(stateBehaviour2));
            Assert.IsTrue(fsm.BehaviourCount() == 2);
            Assert.IsTrue(fsm.BehaviourCountOf(2) == 2);
        }
        public void Add_Behavioural_States()
        {
            var fsm = NewStateMachine();

            var stateId1 = NewStateId();
            var stateId2 = NewStateId();

            var behaviouralState1 = fsm.AddWithBehaviours(stateId1);

            Assert.IsTrue(fsm.ContainsState(stateId1));
            Assert.IsTrue(fsm.GetStateObjectById(stateId1) == behaviouralState1);

            IStateBehaviour stateBehaviour1 = Substitute.For <IStateBehaviour>();
            IStateBehaviour stateBehaviour2 = Substitute.For <IStateBehaviour>();

            var behaviouralState2 = fsm.AddWithBehaviours(stateId2, stateBehaviour1, stateBehaviour2);

            Assert.IsTrue(fsm.ContainsState(stateId2));
            Assert.IsTrue(fsm.GetStateObjectById(stateId2) == behaviouralState2);
            Assert.IsTrue(fsm.ContainsBehaviour(stateBehaviour1));
            Assert.IsTrue(fsm.ContainsBehaviour(stateBehaviour2));
            Assert.IsTrue(fsm.BehaviourCount() == 2);
            Assert.IsTrue(fsm.BehaviourCountOf(stateId2) == 2);
        }
Exemple #11
0
 public bool ContainsBehaviour(IStateBehaviour behaviour)
 {
     return(_behaviours.Contains(behaviour));
 }
Exemple #12
0
 public bool RemoveBehaviour(IStateBehaviour stateBehaviour) => _innerBehaviouralState.RemoveBehaviour(stateBehaviour);
        public static void RemoveBehaviourFrom <TState, TTrigger>(this IStateMachine <TState, TTrigger> fsm, TState stateId, IStateBehaviour behaviour)
        {
            if (behaviour == null)
            {
                throw new ArgumentNullException(nameof(behaviour));
            }

            IState stateObj = fsm.GetStateObjectById(stateId);

            if (stateObj is BehaviouralState cast)
            {
                cast.RemoveBehaviour(behaviour);
            }
            else
            {
                throw new InvalidOperationException("State object with id " + stateId + " is not of type " + typeof(BehaviouralState).Name);
            }
        }
Exemple #14
0
 public void AddState(TStateKey key, IStateBehaviour <TStateKey> state)
 {
     _availableStates.Add(key, state);
 }
 public void Execute(IStateBehaviour <IEnumerator> state)
 {
     _state       = state;
     _disposables = state.Execute().RunWithSubRoutines(_routineType);
 }
 protected virtual void ExecuteState(IStateBehaviour stateType)
 {
     Debug.LogFormat("START State {0}", stateType);
     CurrentState = stateType;
     _stateExecutor.Execute(CurrentState.Execute());
 }
 public void Execute(IStateBehaviour state)
 {
     Stop();
     ExecuteState(state);
 }
Exemple #18
0
 public DefaultState(string stateName, int stateID)
     : base(stateName, stateID)
 {
     defaultStateBehaviour = new DefaultStateBehaviour();
 }
Exemple #19
0
 public void AddBehaviour(IStateBehaviour stateBehaviour) => _innerBehaviouralState.AddBehaviour(stateBehaviour);
 public void Execute(IStateBehaviour <IEnumerator> state)
 {
     _state       = state;
     _disposables = Observable.FromCoroutine(x => _state.Execute()).Subscribe();
 }
Exemple #21
0
 public bool ContainsBehaviour(IStateBehaviour stateBehaviour) => _innerBehaviouralState.ContainsBehaviour(stateBehaviour);