예제 #1
0
        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();
        }
예제 #2
0
        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();
        }
예제 #3
0
        // 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;
            }
        }
예제 #4
0
        // 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();
        }
예제 #5
0
        // 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();
        }
예제 #6
0
 // 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();
 }