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); }
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; }
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; }
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; }
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; } }