Ejemplo n.º 1
0
        public void ChangeState(ProsthesisStateBase to)
        {
            if (!mRunning)
            {
                return;
            }

            if (mDeferredStateChange != null)
            {
                mDeferredStateChange = to;
                return;
            }

            if (to != mCurrentState)
            {
                if (mCurrentState != null)
                {
                    mCurrentState.OnExit();
                }

                ProsthesisStateBase oldState = mCurrentState;

                if (to != null)
                {
                    mDeferredStateChange = to.OnEnter();
                }
                mCurrentState = to;

                if (mRunning)
                {
                    mContext.Logger.LogMessage(Logger.LoggerChannels.StateMachine, string.Format("Changing sub-state of {2} state from {0} to {1}",
                                                                                                 oldState != null ? oldState.GetType().ToString() : "<none>",
                                                                                                 to != null ? to.GetType().ToString() : "<none>", GetType()));
                }
            }

            if (mDeferredStateChange != null && mRunning)
            {
                ProsthesisStateBase nextState = mDeferredStateChange;
                mDeferredStateChange = null;
                ChangeState(nextState);
            }
        }