Пример #1
0
        /// <summary>
        /// changes the current state
        /// </summary>
        public R changeState <R>() where R : SKMecanimState <T>
        {
            // avoid changing to the same state
            var newType = typeof(R);

            if (_currentState.GetType() == newType)
            {
                return(_currentState as R);
            }

#if UNITY_EDITOR
            // do a sanity check while in the editor to ensure we have the given state in our state list
            if (!_states.ContainsKey(newType))
            {
                var error = GetType() + ": state " + newType + " does not exist. Did you forget to add it by calling addState?";
                Debug.LogError(error);
                throw new Exception(error);
            }
#endif

            // end the previous state
            _currentState.end();

            // swap states and call begin
            _currentState = _states[newType];
            _currentState.begin();

            // fire the changed event if we have a listener
            if (onStateChanged != null)
            {
                onStateChanged();
            }

            return(_currentState as R);
        }
Пример #2
0
        /// <summary>
        /// creates a Mecanim state machine and sets it's current state
        /// </summary>
        public SKMecanimStateMachine(Animator animator, T context, SKMecanimState <T> initialState)
        {
            this.animator = animator;
            _context      = context;

            // setup our initial state
            addState(initialState);
            _currentState = initialState;
            _currentState.begin();
        }