Beispiel #1
0
        public static T[] GetStates <T, TState, TTrigger>(this IStateMachine <TState, TTrigger> fsm)
        {
            List <T> statesList = null;

            TState[] states = fsm.GetStates();

            foreach (TState state in states)
            {
                if (fsm.GetStateById(state) is T cast)
                {
                    if (statesList == null)
                    {
                        statesList = new List <T>();
                    }

                    statesList.Add(cast);
                }
            }

            if (statesList != null)
            {
                return(statesList.ToArray());
            }

            return(null);
        }
Beispiel #2
0
        public static bool ContainsStateByReference <TState, TTrigger>(this IStateMachine <TState, TTrigger> fsm, IState stateRef)
        {
            TState[] states = fsm.GetStates();

            foreach (TState state in states)
            {
                if (fsm.GetStateById(state) == stateRef)
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #3
0
        public static T GetState <T, TState, TTrigger>(this IStateMachine <TState, TTrigger> fsm)
        {
            T candidate = default;

            TState[] states = fsm.GetStates();

            foreach (TState state in states)
            {
                if (fsm.GetStateById(state) is T cast)
                {
                    candidate = cast;
                    break;
                }
            }

            return(candidate);
        }
Beispiel #4
0
        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.GetStateById(stateId);

            if (stateObj is IBehaviouralState cast)
            {
                cast.RemoveBehaviour(behaviour);
            }
            else
            {
                throw new InvalidOperationException("State object with id " + stateId + " is not of type " + typeof(IBehaviouralState).Name);
            }
        }
Beispiel #5
0
        public static void AddBehavioursTo <TState, TTrigger>(this IStateMachine <TState, TTrigger> fsm, TState stateId, params IStateBehaviour[] behaviours)
        {
            if (behaviours.Any(behaviour => behaviour == null))
            {
                throw new ArgumentNullException("some behaviour parameter is null");
            }

            IState stateObj = fsm.GetStateById(stateId);

            if (stateObj is IBehaviouralState cast)
            {
                for (int i = 0; i < behaviours.Length; i++)
                {
                    cast.AddBehaviour(behaviours[i]);
                }
            }
            else
            {
                throw new InvalidOperationException("State object with id " + stateId + " is not of type " + typeof(IBehaviouralState).Name);
            }
        }