Ejemplo n.º 1
0
        public SkillFSMMachine OnChange(SkillFSMState fromState, SkillFSMState toState, Action handler)
        {
            if (!_states.ContainsValue(fromState))
            {
                throw new ArgumentException("unknown state", "from");
            }
            if (!_states.ContainsValue(toState))
            {
                throw new ArgumentException("unknown state", "to");
            }
            if (handler == null)
            {
                throw new ArgumentNullException("handler");
            }

            OnStateChange += (from, to) =>
            {
                if (from.Equals(fromState) &&
                    to.Equals(toState))
                {
                    handler();
                }
            };

            return(this);
        }
Ejemplo n.º 2
0
        public void Begin(SkillFSMState state)
        {
            if (!_states.ContainsValue(state))
            {
                return;
            }

            CurrentState = state;
        }
Ejemplo n.º 3
0
        public SkillFSMMachine AddState(SkillFSMState fSMState)
        {
            if (fSMState == null)
            {
                return(this);
            }
            if (_states.ContainsValue(fSMState))
            {
                return(this);
            }

            _states.Add(fSMState.Name, fSMState);
            CurrentState = CurrentState ?? fSMState;

            return(this);
        }
Ejemplo n.º 4
0
        public SkillFSMMachine AddStates <TState>() where TState : IComparable
        {
            if (!typeof(Enum).IsAssignableFrom(typeof(TState)))
            {
                throw new Exception("Cannot create finite");
            }

            var states = new List <SkillFSMState>();

            foreach (TState value in Enum.GetValues(typeof(TState)))
            {
                var fsmState = new SkillFSMState(value);
                states.Add(fsmState);
            }
            AddStates(states.ToArray());

            return(this);
        }
Ejemplo n.º 5
0
        public SkillFSMMachine OnExit(SkillFSMState state, Action handler)
        {
            if (handler == null)
            {
                throw new ArgumentNullException("handler");
            }
            if (!_states.ContainsValue(state))
            {
                throw new ArgumentException("unknown state", "state");
            }

            OnStateExit += exitedState =>
            {
                if (exitedState.Equals(state))
                {
                    handler();
                }
            };
            return(this);
        }
Ejemplo n.º 6
0
 public void OnStateChanged(SkillFSMState fromState, SkillFSMState toState)
 {
 }
Ejemplo n.º 7
0
 public SkillFSMTransition(SkillFSMState from, SkillFSMState to, Func <bool> testConditionFunction = null)
 {
     FromState         = from;
     ToState           = to;
     testConditionFunc = testConditionFunction;
 }