Beispiel #1
0
        public bool Enter()
        {
            // Note: Never returns false. Displays a failure control instead.

            if (mIsActive)
            {
                return(true);
            }

            NavmeshBuild build = mContext.Build;

            if (!build)
            {
                SetCriticalFailure("The build object has been deleted.");
                return(true);
            }

            build.CleanBuild();

            if (build.HasBuildData)
            {
                Debug.LogWarning("Build component contains intermediate build data."
                                 + " Potential causes:\n"
                                 + "Editor reset or entered play mode in the middle of a build.\n"
                                 + "User forgot to exit the build.\n"
                                 + "User keeping the data around for later use.\n"
                                 , build);
            }

            if (build.BuildState == NavmeshBuildState.NeedsRecovery)
            {
                // Special handling is needed since the normal state transition
                // never expects this state.
                if (SetInputControl(true))
                {
                    SetConfigControl(true);
                }
                mSelectedControl = ControlType.Input;
                mLastBuildState  = NavmeshBuildState.NeedsRecovery;
            }
            else
            {
                PerformStateTransition();
            }

            mIsActive = true;
            return(true);
        }
Beispiel #2
0
        public bool Enter()
        {
            // Note: Never returns false. Displays a failure control instead.

            if (mIsActive)
                return true;

            NavmeshBuild build = mContext.Build;

            if (!build)
            {
                SetCriticalFailure("The build object has been deleted.");
                return true;
            }

            build.CleanBuild();

            if (build.HasBuildData)
            {
                Debug.LogWarning("Build component contains intermediate build data." 
                    + " Potential causes:\n"
                    + "Editor reset or entered play mode in the middle of a build.\n"
                    + "User forgot to exit the build.\n"
                    + "User keeping the data around for later use.\n"
                    , build);
            }

            if (build.BuildState == NavmeshBuildState.NeedsRecovery)
            {
                // Special handling is needed since the normal state transition
                // never expects this state.
                if (SetInputControl(true))
                {
                    SetConfigControl(true);
                }
                mSelectedControl = ControlType.Input;
                mLastBuildState = NavmeshBuildState.NeedsRecovery;
            }
            else
                PerformStateTransition();

            mIsActive = true;
            return true;
        }
Beispiel #3
0
        private void PerformStateTransition()
        {
            mContext.Selection.ClearSelection();

            mSelectedControl = 0;  // Will always change during a transition.

            if (mOverrideControl != null)
            {
                // Always get rid of the override control. A new one
                // will be created as needed.
                mOverrideControl.Exit();
                mOverrideControl = null;
            }

            NavmeshBuild build = mContext.Build;  // Note: Caller already checked for null.
            NavmeshBuildState buildState = build.BuildState;

            // No early exits after this point.

            // Debug.Log("Transition: " + buildState);

            switch (buildState)
            {
                case NavmeshBuildState.Inactive:

                    // Needs first time compile of input data.

                    ExitChildControls();

                    if (SetInputControl(true))
                        mSelectedControl = ControlType.Input;

                    break;

                case NavmeshBuildState.InputCompiled:

                    // Let user update config before preparing the build.

                    SetBuildControl(false);

                    if (SetConfigControl(true) && SetInputControl(true))
                        mSelectedControl = ControlType.Config;

                    break;

                case NavmeshBuildState.NeedsRecovery:

                    ExitChildControls();
                    SetCriticalFailure("Internal error: Unexpected loss of input data.");

                    break;

                case NavmeshBuildState.Buildable:

                    if (SetBuildControl(true)
                        && SetConfigControl(true)
                        && SetInputControl(true))
                    {
                        mSelectedControl = ControlType.Build;
                    }

                    break;

                case NavmeshBuildState.Invalid:

                    ExitChildControls();

                    mOverrideControl = new CoreFailureControl();
                    mOverrideControl.Enter(mContext, mDebugContext);

                    break;

                default:

                    SetCriticalFailure("Internal error. Unhandled build state: " + buildState);
                    break;
            }

            // Note: Don't requery the build.  This is the state that was
            // handled.
            mLastBuildState = buildState;

            mDebugContext.NeedsRepaint = true;
        }
Beispiel #4
0
        private void PerformStateTransition()
        {
            mContext.Selection.ClearSelection();

            mSelectedControl = 0;  // Will always change during a transition.

            if (mOverrideControl != null)
            {
                // Always get rid of the override control. A new one
                // will be created as needed.
                mOverrideControl.Exit();
                mOverrideControl = null;
            }

            NavmeshBuild      build      = mContext.Build; // Note: Caller already checked for null.
            NavmeshBuildState buildState = build.BuildState;

            // No early exits after this point.

            // Debug.Log("Transition: " + buildState);

            switch (buildState)
            {
            case NavmeshBuildState.Inactive:

                // Needs first time compile of input data.

                ExitChildControls();

                if (SetInputControl(true))
                {
                    mSelectedControl = ControlType.Input;
                }

                break;

            case NavmeshBuildState.InputCompiled:

                // Let user update config before preparing the build.

                SetBuildControl(false);

                if (SetConfigControl(true) && SetInputControl(true))
                {
                    mSelectedControl = ControlType.Config;
                }

                break;

            case NavmeshBuildState.NeedsRecovery:

                ExitChildControls();
                SetCriticalFailure("Internal error: Unexpected loss of input data.");

                break;

            case NavmeshBuildState.Buildable:

                if (SetBuildControl(true) &&
                    SetConfigControl(true) &&
                    SetInputControl(true))
                {
                    mSelectedControl = ControlType.Build;
                }

                break;

            case NavmeshBuildState.Invalid:

                ExitChildControls();

                mOverrideControl = new CoreFailureControl();
                mOverrideControl.Enter(mContext, mDebugContext);

                break;

            default:

                SetCriticalFailure("Internal error. Unhandled build state: " + buildState);
                break;
            }

            // Note: Don't requery the build.  This is the state that was
            // handled.
            mLastBuildState = buildState;

            mDebugContext.NeedsRepaint = true;
        }
Beispiel #5
0
        public void Update()
        {
            if (!mIsActive)
            {
                return;
            }

            NavmeshBuild build = mContext.Build;

            if (!build)
            {
                // Asset was deleted.
                return;
            }

            NavmeshBuildState buildState = build.BuildState;

            if (HasCriticalFailure)
            {
                if (buildState == NavmeshBuildState.Inactive)
                {
                    // A reset has been performed.  OK to go back to normal
                    // operation.
                    PerformStateTransition();
                }
                // Never do more than a recovery during an update.
                return;
            }

            if (mLastBuildState != buildState)
            {
                PerformStateTransition();
            }

            if (mOverrideControl != null)
            {
                mOverrideControl.Update();
                // No other operations allowed.
            }
            else
            {
                if (mInputCon.IsActive)
                {
                    mInputCon.Update();
                }

                if (mConfigCon.IsActive)
                {
                    mInputCon.Update();
                }

                if (mBuildCon != null)
                {
                    mBuildCon.Update();
                }

                ManageNMGenRequests();
                ManageTileRequests();
            }

            if (build.IsDirty)
            {
                EditorUtility.SetDirty(build);
                build.IsDirty = false;
            }
        }