private void HandleClear() { // Abort any in-progress builds. Context.AbortAllReqests("User requested."); TileBuildData tdata = Context.Build.BuildData; int w = tdata.Width; int d = tdata.Depth; bool needsBaking = (tdata.NeedsBakingCount() == 0) ? false : true; for (int tx = 0; tx < w; tx++) { for (int tz = 0; tz < d; tz++) { if (needsBaking) { tdata.ClearUnbaked(tx, tz); } else { tdata.Reset(tx, tz); } } } }
public override void Exit() { Context.AbortAllReqests("Exiting build."); mInputCompile = null; base.Exit(); }
protected override void OnGUIButtons() { DebugContext.SetViews(ViewOption.Mesh); NavmeshBuild build = Context.Build; if (!build) { // Build deleted. return; } TileBuildData tdata = Context.Build.BuildData; TileBuildState bstate = tdata.GetState(0, 0); bool canBake = (bstate == TileBuildState.Built || bstate == TileBuildState.Baked); bool isBuilding = (Context.TaskCount > 0); ControlUtil.BeginButtonArea(Context.ButtonArea); EditorGUIUtility.LookLikeControls(75); bool guiEnabled = GUI.enabled; GUI.enabled = !isBuilding; GUIStyle style = (canBake || isBuilding) ? GUI.skin.button : ControlUtil.HighlightedButton; if (GUILayout.Button("Build", style)) { mProgress = 0; mLastTime = EditorApplication.timeSinceStartup; if (!Context.QueueTask(0, 0, BuildTaskProcessor.LowPriority, Logger)) { Logger.PostError("Build task failed.", Context.Build); } } GUI.enabled = !isBuilding && canBake; style = GUI.enabled ? ControlUtil.HighlightedButton : GUI.skin.button; if (GUILayout.Button("Bake", style)) { HandleBake(); } GUILayout.Space(ControlUtil.MarginSize); GUI.enabled = isBuilding; if (GUILayout.Button("Abort Build")) { Context.AbortAllReqests("User requested."); } GUI.enabled = guiEnabled; if (OnGUIStandardButtons()) { // Special case. Build was discarded. ControlUtil.EndButtonArea(); return; } ControlUtil.OnGUIStandardButtons(Context, DebugContext, true); ControlUtil.EndButtonArea(); }
protected override void OnGUIButtons() { DebugContext.SetViews(ViewOption.Grid | ViewOption.Selection | ViewOption.Mesh); NavmeshBuild build = Context.Build; if (!build) { return; } TileBuildData tdata = build.BuildData; if (tdata == null) { return; } TileSelection selection = Context.Selection; bool hasSelection = selection.Validate(); bool needBaking = (tdata.NeedsBakingCount() > 0); int activeCount = Context.TaskCount; int bakeableCount = tdata.BakeableCount(); bool origGUIEnabled = GUI.enabled; bool guiEnabled = !IsBaseBusy; GUI.enabled = guiEnabled; ControlUtil.BeginButtonArea(Context.ButtonArea); if (GUILayout.Button("Build All")) { HandleBuildRequest(true); } GUI.enabled = guiEnabled && hasSelection; if (GUILayout.Button("Build Zone")) { HandleBuildRequest(false); } //////////////////////////////////////////////////////////////////// GUILayout.Space(MarginSize); // Only disable baking if there is nothing at all that can be baked. GUI.enabled = guiEnabled && activeCount == 0 && (bakeableCount > 0); GUIStyle style = (bakeableCount > 0 && activeCount == 0) ? ControlUtil.HighlightedButton : GUI.skin.button; if (GUILayout.Button("Bake All", style)) { HandleBake(); } //////////////////////////////////////////////////////////////////// GUILayout.Space(MarginSize); // Note: Technically only the last condition is needed. But checking the // other conditions first saves processing time. GUI.enabled = guiEnabled && activeCount == 0 && tdata.GetStateCount(TileBuildState.NotBuilt) < tdata.Width * tdata.Depth; if (GUILayout.Button((needBaking ? "Revert Unbaked" : "Clear All"))) { HandleClear(); } GUI.enabled = guiEnabled && (activeCount != 0); if (GUILayout.Button("Abort Builds")) { Context.AbortAllReqests("User requested."); } //////////////////////////////////////////////////////////////////// GUILayout.Space(ControlUtil.MarginSize); GUI.enabled = guiEnabled; if (OnGUIStandardButtons()) { // Special case. Build was discarded. ControlUtil.EndButtonArea(); return; } /////////////////////////////////////////////////////////////////// GUILayout.Space(MarginSize); GUI.enabled = guiEnabled && hasSelection; EditorGUIUtility.LookLikeControls(100); selection.ZoneSize = EditorGUILayout.IntField("Zone Size", selection.ZoneSize); EditorGUIUtility.LookLikeControls(); GUI.enabled = guiEnabled; //////////////////////////////////////////////////////////////////// GUILayout.Space(MarginSize); GUILayout.Label("Bakeable Tiles: " + bakeableCount); ControlUtil.OnGUIStandardButtons(Context, DebugContext, true); ControlUtil.EndButtonArea(); GUI.enabled = origGUIEnabled; }