void OnGUI() { if (_isInitTabButton) { MissionTabButtonStyle = new GUIStyle(SampleStyle.GetButtonStyle(SampleStyle.ButtonType.Left, SampleStyle.ButtonColor.Blue)); SpaceTabButtonStyle = new GUIStyle(SampleStyle.GetButtonStyle(SampleStyle.ButtonType.Right, SampleStyle.ButtonColor.Blue)); _isInitTabButton = false; } SampleStyle.DrawWindowBackground(SampleStyle.ColorGrey); // Buttons for switching mission graph and space graph. GUILayout.BeginVertical(SampleStyle.Frame(SampleStyle.ColorLightestGrey)); LayoutStateButtons(); // Dropdown for strating node. int startingIndex = Mission.Alphabet.Nodes.FindIndex(n => n == Mission.Alphabet.StartingNode); startingIndex = SampleStyle.PopupLabeled(Languages.GetText("GenerateMission-StartingNode"), startingIndex, Mission.Alphabet.Nodes.Select(n => n.ExpressName).ToArray(), SampleStyle.PopUpLabel, SampleStyle.PopUp, Screen.width - 15); Mission.Alphabet.StartingNode = Mission.Alphabet.Nodes[startingIndex]; GUILayout.EndVertical(); // Canvas to draw current mission graph. LayoutMissionGraphCanvas(); // Layout the list of mission group. LayoutMissionGroupList(); // Buttons for operating the graph. LayoutFunctionButtons(); }
void OnGUI() { SampleStyle.DrawWindowBackground(SampleStyle.ColorGrey); GUILayout.BeginVertical(SampleStyle.Frame(SampleStyle.ColorLightestGrey)); _name = SampleStyle.TextFieldLabeled(Languages.GetText("LevelSetting-LevelName"), _name, SampleStyle.TextFieldLabel, SampleStyle.TextField, SampleStyle.TextFieldHeight); _abbreviation = SampleStyle.TextFieldLabeled(Languages.GetText("LevelSetting-LevelAbbreviation"), _abbreviation, SampleStyle.TextFieldLabel, SampleStyle.TextField, SampleStyle.TextFieldHeight); _description = SampleStyle.TextAreaLabeled(Languages.GetText("LevelSetting-Description"), _description, SampleStyle.TextAreaLabel, SampleStyle.TextArea, SampleStyle.TextAreaHeight); _tag = SampleStyle.TextFieldLabeled(Languages.GetText("LevelSetting-Tag"), _tag, SampleStyle.TextFieldLabel, SampleStyle.TextField, SampleStyle.TextFieldHeight); EditorGUILayout.HelpBox(FormValidation(), MessageType.Info, true); // If error occur, disable apply button. EditorGUI.BeginDisabledGroup(_errorType != ErrorType.NoError); // Apply button and popup if (GUILayout.Button(Languages.GetText("LevelSetting-Apply"), SampleStyle.GetButtonStyle(SampleStyle.ButtonType.Regular, SampleStyle.ButtonColor.Green), SampleStyle.SubmitButtonHeight)) { if (EditorUtility.DisplayDialog(Languages.GetText("LevelSetting-Dialog-Title"), Languages.GetText("LevelSetting-Dialog-Content"), Languages.GetText("LevelSetting-Dialog-Yes"), Languages.GetText("LevelSetting-Dialog-No"))) { // Commit changes Debug.Log(Languages.GetText("LevelSetting-Dialog-Yes-Content")); } else { // Cancel changes; Debug.Log(Languages.GetText("LevelSetting-Dialog-No-Content")); } } EditorGUI.EndDisabledGroup(); GUILayout.EndVertical(); }
// Content of submition. void LayoutSubmitionButton() { // When click apply button. switch (_editingMode) { case EditingMode.Create: GUI.enabled = (_messageType != MessageType.Error && _messageType != MessageType.Warning); if (GUILayout.Button(Languages.GetText("MissionAlphabet-AddSymbol"), SampleStyle.GetButtonStyle(SampleStyle.ButtonType.Regular, SampleStyle.ButtonColor.Green), SampleStyle.SubmitButtonHeight)) { // When click the button, revoke all selected symbols and add the symbon in list. switch (_currentTab) { case AlphabetWindowTab.Nodes: Alphabet.RevokeAllSelected(); Alphabet.AddNode(new GraphGrammarNode(_node)); Alphabet.Nodes.Last().Selected = true; break; case AlphabetWindowTab.Connections: Alphabet.RevokeAllSelected(); Alphabet.AddConnection(new GraphGrammarConnection(_connection)); Alphabet.Connections.Last().Selected = true; break; } // Make the scroll position in list to bottom, and switch to modify mode. _scrollPosition.y = Mathf.Infinity; _editingMode = EditingMode.Modify; // Unfocus from the field. GUI.FocusControl("FocusToNothing"); } GUI.enabled = true; break; case EditingMode.Modify: GUI.enabled = (_messageType != MessageType.Error && _messageType != MessageType.Warning); if (GUILayout.Button(Languages.GetText("MissionAlphabet-UpdateChanges"), SampleStyle.GetButtonStyle(SampleStyle.ButtonType.Regular, SampleStyle.ButtonColor.Green), SampleStyle.SubmitButtonHeight)) { // When click the button, update the symbol informations. switch (_currentTab) { case AlphabetWindowTab.Nodes: // Update in alphabet and mission grammar. UpdateNode(Alphabet.SelectedNode); MissionGrammar.OnAlphabetUpdated(Alphabet.SelectedNode); break; case AlphabetWindowTab.Connections: // Update in alphabet and mission grammar. UpdateConnection(Alphabet.SelectedConnection); MissionGrammar.OnAlphabetUpdated(Alphabet.SelectedConnection); break; } // Unfocus from the field. GUI.FocusControl("FocusToNothing"); } GUI.enabled = true; break; } }
// Buttons about adding new symbol, modifying and deleting. void LayoutEditingModeButtonGroup() { EditorGUILayout.BeginHorizontal(); if (GUILayout.Button(Languages.GetText("MissionAlphabet-AddNew"), SampleStyle.GetButtonStyle(SampleStyle.ButtonType.Left, SampleStyle.ButtonColor.Blue), SampleStyle.ButtonHeight)) { // Switch the mode. _editingMode = EditingMode.Create; // Initial the preview node and connection. _node = new GraphGrammarNode(); _connection = new GraphGrammarConnection(); // Initial all fields and repaint. Alphabet.RevokeAllSelected(); InitFields(); Repaint(); } switch (_currentTab) { case AlphabetWindowTab.Nodes: EditorGUI.BeginDisabledGroup(Alphabet.SelectedNode == null || Alphabet.IsAnyNode(Alphabet.SelectedNode.AlphabetID)); break; case AlphabetWindowTab.Connections: EditorGUI.BeginDisabledGroup(Alphabet.SelectedConnection == null); break; } if (GUILayout.Button(Languages.GetText("MissionAlphabet-Modify"), SampleStyle.GetButtonStyle(SampleStyle.ButtonType.Mid, SampleStyle.ButtonColor.Blue), SampleStyle.ButtonHeight)) { // Switch the mode. _editingMode = EditingMode.Modify; } if (GUILayout.Button(Languages.GetText("MissionAlphabet-Delete"), SampleStyle.GetButtonStyle(SampleStyle.ButtonType.Right, SampleStyle.ButtonColor.Blue), SampleStyle.ButtonHeight)) { // Switch the mode. _editingMode = EditingMode.Delete; // Remove the node or connection from alphabet and repaint. switch (_currentTab) { case AlphabetWindowTab.Nodes: Alphabet.RemoveNode(Alphabet.SelectedNode); break; case AlphabetWindowTab.Connections: Alphabet.RemoveConnection(Alphabet.SelectedConnection); break; } Repaint(); } EditorGUI.EndDisabledGroup(); EditorGUILayout.EndHorizontal(); }
// Native function for Editor Window. void OnGUI() { if (_isInitTabButton) { NodeTabButtonStyle = new GUIStyle(SampleStyle.GetButtonStyle(SampleStyle.ButtonType.Left, SampleStyle.ButtonColor.Blue)); ConnectionTabButtonStyle = new GUIStyle(SampleStyle.GetButtonStyle(SampleStyle.ButtonType.Right, SampleStyle.ButtonColor.Blue)); _isInitTabButton = false; } SampleStyle.DrawWindowBackground(SampleStyle.ColorGrey); // Buttons - Nodes or Connections. GUILayout.BeginVertical(SampleStyle.Frame(SampleStyle.ColorLightestGrey)); EditorGUILayout.BeginHorizontal(); if (GUILayout.Toggle(_currentTab == AlphabetWindowTab.Nodes, Languages.GetText("MissionAlphabet-Tab-Nodes"), NodeTabButtonStyle, SampleStyle.TabButtonHeight)) { _editingMode = (_currentTab != AlphabetWindowTab.Nodes) ? EditingMode.None : _editingMode; _currentTab = AlphabetWindowTab.Nodes; } if (GUILayout.Toggle(_currentTab == AlphabetWindowTab.Connections, Languages.GetText("MissionAlphabet-Tab-Connections"), ConnectionTabButtonStyle, SampleStyle.TabButtonHeight)) { _editingMode = (_currentTab != AlphabetWindowTab.Connections) ? EditingMode.None : _editingMode; _currentTab = AlphabetWindowTab.Connections; } EditorGUILayout.EndHorizontal(); // Toggle for nodes interface and connection interface. switch (_currentTab) { case AlphabetWindowTab.Nodes: // Header. GUILayout.Label(Languages.GetText("MissionAlphabet-List-Nodes"), SampleStyle.HeaderTwo, SampleStyle.HeaderTwoHeightLayout); // Content of nodes. LayoutNodesInterface(); break; case AlphabetWindowTab.Connections: // Header. GUILayout.Label(Languages.GetText("MissionAlphabet-List-Connections"), SampleStyle.HeaderTwo, SampleStyle.HeaderTwoHeightLayout); // Content of connections. LayoutConnectionsInterface(); break; } // Event controller. EventController(); GUILayout.EndVertical(); }
// Buttons for operating the graph. private void LayoutFunctionButtons() { GUILayout.BeginArea(Container.FunctionButtonsArea); GUILayout.BeginVertical(SampleStyle.Frame(SampleStyle.ColorLightestGrey)); GUILayout.BeginHorizontal(); // Random seed. Seed = SampleStyle.IntFieldLabeled(Languages.GetText("GenerateMission-Seed"), Seed, SampleStyle.IntFieldLabel, SampleStyle.IntField, SampleStyle.IntFieldHeight); if (GUILayout.Button(Languages.GetText("GenerateMission-Random"), SampleStyle.GetButtonStyle(SampleStyle.ButtonType.Regular, SampleStyle.ButtonColor.Blue), SampleStyle.ButtonHeight)) { Seed = Random.Range(1, 1000000); // Unfocus from the field. GUI.FocusControl("FocusToNothing"); } GUILayout.EndHorizontal(); // If error occur, disable apply button. EditorGUI.BeginDisabledGroup(_errorType != ErrorType.None); // Mission and Space Graph button. GUILayout.BeginHorizontal(); if (GUILayout.Button(Languages.GetText("GenerateMission-Initial"), SampleStyle.GetButtonStyle(SampleStyle.ButtonType.Left, SampleStyle.ButtonColor.Blue), SampleStyle.ButtonHeight)) { // Rewrite system initialization. Mission.RewriteSystem.Initial(Seed); _isRuleChanged = false; // Update the current graph. _currentGraph = Mission.RewriteSystem.TransformFromGraph(); // Setting root node for CreVoxAttach. Mission.CreVoxAttach.SetCreVoxNodeRoot(_currentGraph.Nodes[0]); } EditorGUI.BeginDisabledGroup(_isRuleChanged); if (GUILayout.Button(Languages.GetText("GenerateMission-Iterate"), SampleStyle.GetButtonStyle(SampleStyle.ButtonType.Mid, SampleStyle.ButtonColor.Blue), SampleStyle.ButtonHeight)) { // Rewrite system iteration. Mission.RewriteSystem.Iterate(); // Update the current graph. _currentGraph = Mission.RewriteSystem.TransformFromGraph(); // Setting root node for CreVoxAttach. Mission.CreVoxAttach.SetCreVoxNodeRoot(_currentGraph.Nodes[0]); } if (GUILayout.Button(Languages.GetText("GenerateMission-Complete"), SampleStyle.GetButtonStyle(SampleStyle.ButtonType.Right, SampleStyle.ButtonColor.Blue), SampleStyle.ButtonHeight)) { var stopWatch = System.Diagnostics.Stopwatch.StartNew(); // Iterate until finish. while ( ( // Still exist non-terminal nodes. _currentGraph.Nodes.Exists(n => n.Terminal == Mission.NodeTerminalType.NonTerminal) // Have to exhauste all rules that set minimum. || Mission.RewriteSystem.Rules.Sum(r => r.QuantityLimitMin) > 0 ) // Time limit is 3,000 ms. && stopWatch.ElapsedMilliseconds <= 3000 ) { // Rewrite system iteration. Mission.RewriteSystem.Iterate(); // Update the current graph. _currentGraph = Mission.RewriteSystem.TransformFromGraph(); } stopWatch.Stop(); // Setting root node for CreVoxAttach. Mission.CreVoxAttach.SetCreVoxNodeRoot(_currentGraph.Nodes[0]); } EditorGUI.EndDisabledGroup(); GUILayout.EndHorizontal(); EditorGUI.EndDisabledGroup(); GUILayout.EndVertical(); GUILayout.EndArea(); }