コード例 #1
0
        private void UpdateCurrentState()
        {
            switch (CurrentState.Mode)
            {
            case StateMode.Inactive:
            case StateMode.Active:
                break;

            case StateMode.Loading:
                if (CurrentState.IsDoneLoading())
                {
                    CurrentState.LoadingComplete();
                    m_navigationPlan.StateLoaded();

                    var nextState = m_navigationPlan.CurrentStateToLoad();
                    if (nextState != null)
                    {
                        BeginLoadingState(nextState);
                    }
                    else
                    {
                        // All states have been loaded
                        var statesToEnter = m_navigationPlan.NavigationEnded();
                        EnterStates(statesToEnter);
                    }
                }
                break;

            case StateMode.Unloading:
                if (CurrentState.IsDoneUnloading())
                {
                    OnCurrentStateUnloadingFinished();
                }
                break;

            default:
                m_logger.Error($"CurrentState.Mode out of range: {(int)CurrentState.Mode}");
                break;
            }
        }
コード例 #2
0
        public void HandleTransition(string transition)
        {
            NavState targetState = null;

            if (Navigator.TryGetStateForTransition(transition, ref targetState))
            {
                TransitionTo(targetState);
            }
            else
            {
                m_logger.Error($"Failed to find transition: {transition} [{Active.Path}]");
            }
        }