Ejemplo n.º 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();
        }
Ejemplo n.º 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();
        }
Ejemplo n.º 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;
            }
        }
Ejemplo n.º 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();
        }
Ejemplo n.º 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();
        }
Ejemplo n.º 6
0
        // Symbol list in node tab and connection tab.
        void LayoutSymbolList()
        {
            // Set the scroll position.
            _scrollPosition = GUILayout.BeginScrollView(_scrollPosition, SymbolList.HeightLayout);
            // Content of scroll area.
            _symbolListArea        = Container.SymbolListArea;
            _symbolListArea.height = Alphabet.Nodes.Count >= Alphabet.Connections.Count ?
                                     (Alphabet.Nodes.Count + 1) * 50 : (Alphabet.Connections.Count + 1) * 50;
            GUILayout.BeginArea(_symbolListArea);
            _symbolListCanvas        = Container.SymbolListCanvas;
            _symbolListCanvas.height = Alphabet.Nodes.Count >= Alphabet.Connections.Count ?
                                       (Alphabet.Nodes.Count + 1) * 50 : (Alphabet.Connections.Count + 1) * 50;

            SampleStyle.DrawGrid(_symbolListCanvas, SampleStyle.MinorGridSize, SampleStyle.MajorGridSize, SampleStyle.GridBackgroundColor, SampleStyle.GridColor);
            GUILayout.EndArea();
            // Layout each symbols in list.
            switch (_currentTab)
            {
            case AlphabetWindowTab.Nodes:
                foreach (var node in Alphabet.Nodes)
                {
                    Alphabet.DrawNodeInList(node);
                    // Custom style to modify padding and margin for label.
                    GUILayout.Label(node.ExpressName, SymbolList.NodeElement);
                }
                break;

            case AlphabetWindowTab.Connections:
                foreach (var connection in Alphabet.Connections)
                {
                    Alphabet.DrawConnectionInList(connection);
                    // Custom style to modify padding and margin for label.
                    GUILayout.Label(connection.Name, SymbolList.ConnectionElement);
                }
                break;
            }
            GUILayout.EndScrollView();
            // Get the Rect object from the last control when the event is Repaint.
            if (Event.current.type == EventType.Repaint)
            {
                _symbolListCanvasInWindow = GUILayoutUtility.GetLastRect();
            }
        }
Ejemplo n.º 7
0
 // Content of connections.
 void LayoutConnectionsInterface()
 {
     // Show the canvas, that is the list of nodes.
     LayoutSymbolList();
     // Buttons for switching editing mode.
     LayoutEditingModeButtonGroup();
     // Canvas for preview symbol.
     GUILayout.BeginArea(Container.SymbolPreviewArea);
     EditorGUI.DrawRect(Container.SymbolPreviewCanvas, SampleStyle.ColorDarkestGrey);
     // [TODO] This part (value assign) is temporary.
     _centerPosition.x         = Screen.width / 2 - 25;
     _connection.StartPosition = _centerPosition;
     _centerPosition.x         = Screen.width / 2 + 25;
     _connection.EndPosition   = _centerPosition;
     // Draw this connection.
     _connection.Draw();
     GUILayout.EndArea();
     switch (_editingMode)
     {
     case EditingMode.Create:
     case EditingMode.Modify:
         // Content of property.
         GUILayout.BeginArea(Container.SymbolPropertiesArea);
         GUILayout.Space(SampleStyle.PaddingBlock);
         EditorGUILayout.BeginVertical(SampleStyle.Frame(SampleStyle.ColorLightestGrey));
         // Information of connection.
         _symbolName          = SampleStyle.TextFieldLabeled(Languages.GetText("MissionAlphabet-Name"), _symbolName, SampleStyle.TextFieldLabel, SampleStyle.TextField, SampleStyle.TextFieldHeight);
         _symbolDescription   = SampleStyle.TextAreaLabeled(Languages.GetText("MissionAlphabet-Description"), _symbolDescription, SampleStyle.TextAreaLabel, SampleStyle.TextArea, SampleStyle.TextAreaHeight);
         _symbolOutlineColor  = SampleStyle.ColorFieldLabeled(Languages.GetText("MissionAlphabet-OutlineColor"), _symbolOutlineColor, SampleStyle.ColorFieldLabel, SampleStyle.ColorField);
         _connectionType      = (ConnectionType)SampleStyle.EnumPopupLabeled(Languages.GetText("MissionAlphabet-ConnectionType"), _connectionType, SampleStyle.EnumPopUpLabel, SampleStyle.EnumPopUp, SampleStyle.EnumPopUpHeight);
         _connectionArrowType = (ConnectionArrowType)SampleStyle.EnumPopupLabeled(Languages.GetText("MissionAlphabet-ArrowType"), _connectionArrowType, SampleStyle.EnumPopUpLabel, SampleStyle.EnumPopUp, SampleStyle.EnumPopUpHeight);
         // Update the conntection.
         UpdateConnection(_connection);
         // Show content of submition.
         LayoutSubmitionHint();
         LayoutSubmitionButton();
         EditorGUILayout.EndVertical();
         GUILayout.EndArea();
         break;
     }
 }
Ejemplo n.º 8
0
 // Content of nodes.
 void LayoutNodesInterface()
 {
     // Show the canvas, that is the list of nodes.
     LayoutSymbolList();
     // Buttons for switching editing mode.
     LayoutEditingModeButtonGroup();
     // Canvas for preview symbol.
     GUILayout.BeginArea(Container.SymbolPreviewArea);
     EditorGUI.DrawRect(Container.SymbolPreviewCanvas, SampleStyle.ColorDarkestGrey);
     _centerPosition.x = Screen.width / 2;
     _node.Position    = _centerPosition;
     _node.Draw();
     GUILayout.EndArea();
     // Area for input fields.
     switch (_editingMode)
     {
     case EditingMode.Create:
     case EditingMode.Modify:
         // Content of property.
         GUILayout.BeginArea(Container.SymbolPropertiesArea);
         GUILayout.Space(SampleStyle.PaddingBlock);
         EditorGUILayout.BeginVertical(SampleStyle.Frame(SampleStyle.ColorLightestGrey));
         // Information of node.
         _symbolTerminal     = (NodeTerminalType)SampleStyle.EnumPopupLabeled(Languages.GetText("MissionAlphabet-SymbolType"), _symbolTerminal, SampleStyle.EnumPopUpLabel, SampleStyle.EnumPopUp, SampleStyle.EnumPopUpHeight);
         _symbolName         = SampleStyle.TextFieldLabeled(Languages.GetText("MissionAlphabet-Name"), _symbolName, SampleStyle.TextFieldLabel, SampleStyle.TextField, SampleStyle.TextFieldHeight);
         _symbolAbbreviation = SampleStyle.TextFieldLabeled(Languages.GetText("MissionAlphabet-Abbreviation"), _symbolAbbreviation, SampleStyle.TextFieldLabel, SampleStyle.TextField, SampleStyle.TextFieldHeight);
         _symbolDescription  = SampleStyle.TextAreaLabeled(Languages.GetText("MissionAlphabet-Description"), _symbolDescription, SampleStyle.TextAreaLabel, SampleStyle.TextArea, SampleStyle.TextAreaHeight);
         _symbolOutlineColor = SampleStyle.ColorFieldLabeled(Languages.GetText("MissionAlphabet-OutlineColor"), _symbolOutlineColor, SampleStyle.ColorFieldLabel, SampleStyle.ColorField);
         _symbolFilledColor  = SampleStyle.ColorFieldLabeled(Languages.GetText("MissionAlphabet-FilledColor"), _symbolFilledColor, SampleStyle.ColorFieldLabel, SampleStyle.ColorField);
         _symbolTextColor    = SampleStyle.ColorFieldLabeled(Languages.GetText("MissionAlphabet-TextColor"), _symbolTextColor, SampleStyle.ColorFieldLabel, SampleStyle.ColorField);
         // Update the node.
         UpdateNode(_node);
         // Show content of submition.
         LayoutSubmitionHint();
         LayoutSubmitionButton();
         EditorGUILayout.EndVertical();
         GUILayout.EndArea();
         break;
     }
 }
Ejemplo n.º 9
0
        // Canvas to draw current mission graph.
        private void LayoutMissionGraphCanvas()
        {
            GUILayout.BeginArea(Container.MissionGraphArea);
            GUILayout.BeginVertical(SampleStyle.Frame(SampleStyle.ColorLightestGrey));
            _canvasScrollPosition = GUILayout.BeginScrollView(_canvasScrollPosition, GUILayout.Width(Screen.width - 15), GUILayout.Height(300 - 5));
            Container.ResizeMissionGraphCanvas(_missionGraphCanvasSizeWidth, _missionGraphCanvasSizeHeight);
            SampleStyle.DrawGrid(Container.MissionGraphCanvas, SampleStyle.MinorGridSize, SampleStyle.MajorGridSize, SampleStyle.GridBackgroundColor, SampleStyle.GridColor);
            GUILayout.Label(string.Empty, Container.MissionGraphCanvasContent);
            // Connection
            foreach (Mission.GraphGrammarConnection connection in _currentGraph.Connections)
            {
                connection.Draw();
            }
            // Node
            // Draw and get right bottom position.
            Vector2 positionRightBotton = new Vector2(0, 0);

            foreach (Mission.GraphGrammarNode node in _currentGraph.Nodes)
            {
                // Get right position
                if (node.PositionX > positionRightBotton.x)
                {
                    positionRightBotton.x = node.PositionX;
                }
                // Get bottom position
                if (node.PositionY > positionRightBotton.y)
                {
                    positionRightBotton.y = node.PositionY;
                }
                node.Draw();
            }
            // Compare with screen size.
            _missionGraphCanvasSizeWidth  = Mathf.Max((int)Container.MissionGraphArea.width, (int)positionRightBotton.x + 25);
            _missionGraphCanvasSizeHeight = Mathf.Max((int)Container.MissionGraphArea.height, (int)positionRightBotton.y + 25);
            GUILayout.EndScrollView();
            GUILayout.EndVertical();
            GUILayout.EndArea();
        }
Ejemplo n.º 10
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();
 }
Ejemplo n.º 11
0
        private void LayoutMissionGroupList()
        {
            GUILayout.BeginArea(Container.MissionGroupListArea);
            GUILayout.BeginVertical(SampleStyle.Frame(SampleStyle.ColorLightestGrey));
            // HelpBox
            EditorGUILayout.HelpBox(FormValidation(), MessageType.Info, true);
            // Check boxies.
            _scrollView = EditorGUILayout.BeginScrollView(_scrollView, GUILayout.Height(150));
            int indentLevel = EditorGUI.indentLevel;

            foreach (Mission.MissionGroup missionGroup in Mission.MissionGrammar.Groups)
            {
                EditorGUI.indentLevel = 0;
                GUILayout.BeginHorizontal();
                missionGroup.Selected  = EditorGUILayout.Foldout(missionGroup.Selected, missionGroup.Name, SampleStyle.FoldoutLabel);
                tempGroupEnable        = missionGroup.AllEnable;
                missionGroup.AllEnable = EditorGUILayout.Toggle("", missionGroup.AllEnable);
                if (tempGroupEnable != missionGroup.AllEnable)
                {
                    _isRuleChanged = true;
                    foreach (Mission.MissionRule missionRule in missionGroup.Rules)
                    {
                        missionRule.Enable = missionGroup.AllEnable & missionRule.Valid;
                    }
                }
                missionGroup.AllEnable = true;
                foreach (Mission.MissionRule missionRule in missionGroup.Rules)
                {
                    if (missionRule.Valid && missionGroup.AllEnable && !missionRule.Enable)
                    {
                        missionGroup.AllEnable = false;
                    }
                }
                GUILayout.EndHorizontal();
                if (missionGroup.Selected)
                {
                    foreach (Mission.MissionRule missionRule in missionGroup.Rules)
                    {
                        EditorGUI.indentLevel = 2;
                        tempRuleEnable        = missionRule.Enable;
                        GUILayout.BeginHorizontal();
                        // If not legal disable button.
                        EditorGUI.BeginDisabledGroup(!missionRule.Valid);
                        missionRule.Enable = EditorGUILayout.Toggle(missionRule.Name, missionRule.Enable);
                        EditorGUI.EndDisabledGroup();
                        // Hint user this rule is disable because it's illegal.
                        if (!missionRule.Valid)
                        {
                            EditorGUILayout.LabelField(Languages.GetText("GenerateMission-IllegalRule"));
                        }
                        GUILayout.EndHorizontal();
                        if (tempRuleEnable != missionRule.Enable)
                        {
                            _isRuleChanged = true;
                        }

                        if (missionRule.Valid && missionGroup.AllEnable && !missionRule.Enable)
                        {
                            missionGroup.AllEnable = false;
                        }
                    }
                }
            }
            EditorGUILayout.EndScrollView();
            GUILayout.EndVertical();
            GUILayout.EndArea();
        }
Ejemplo n.º 12
0
        void OnGUI()
        {
            Languages.Initialize();
            _description = Languages.GetText("Index-About");

            SampleStyle.DrawWindowBackground(SampleStyle.ColorGrey);
            GUILayout.BeginArea(Container.IndexWindowSplashCanvasArea);
            EditorGUI.DrawPreviewTexture(Container.IndexWindowSplashCanvasArea, SampleStyle.SplashImage);
            GUILayout.EndArea();

            GUILayout.BeginArea(Container.IndexWindowButtonsCanvasArea, SampleStyle.Box);
            GUILayout.BeginVertical(SampleStyle.Frame(SampleStyle.ColorLightestGrey));
            GUILayout.Label(_description, EditorStyles.wordWrappedLabel);
            GUILayout.BeginHorizontal();
            if (GUILayout.Button(Languages.GetText("Index-CreateLevel"), SampleStyle.ButtonLeft, SampleStyle.MainButtonHeight))
            {
                // Safety.
                if (EditorUtility.DisplayDialog("Create new level.",
                                                "Are you sure want to create a new level, this will overwrite the origin level?",
                                                "Yes", "No"))
                {
                    // Initialization.
                    LevelSettingsWindow.Initial();
                    // Reset the windows of mission grammar system.
                    MissionGrammarSystem.AlphabetWindow.Initialize();
                    MissionGrammarSystem.RulesWindow.Initialize();
                    GraphGeneration.MissionGraphWindow.Initialize();
                    // Reset mission alphabet, mission grammar and rewrite system.
                    MissionGrammarSystem.Alphabet.Initial();
                    MissionGrammarSystem.MissionGrammar.Initial();
                    MissionGrammarSystem.RewriteSystem.Initial(GraphGeneration.MissionGraphWindow.Seed);
                }
            }
            if (GUILayout.Button(Languages.GetText("Index-ImportLevel"), SampleStyle.ButtonMid, SampleStyle.MainButtonHeight))
            {
                // Import Level.
            }
            if (GUILayout.Button(Languages.GetText("Index-ImportRewrite"), SampleStyle.ButtonMid, SampleStyle.MainButtonHeight))
            {
                // Import Rewrite.
                string path = EditorUtility.OpenFilePanel("Import xml", "", "xml");
                if (path.Length > 0)
                {
                    DungeonLevel.OperateXML.Unserialize.UnserializeFromXml(path);
                    DungeonWindow.ShowMissionAlphabetWindow();
                    DungeonWindow.ShowMissionRulesWindow();
                    DungeonWindow.ShowGenerateMissionWindow();
                }
            }
            if (GUILayout.Button(Languages.GetText("Index-ExportLevel"), SampleStyle.ButtonRight, SampleStyle.MainButtonHeight))
            {
                // Export Level.
                string path = EditorUtility.SaveFilePanel("Export xml", "", "Level.xml", "xml");
                if (path.Length > 0)
                {
                    DungeonLevel.OperateXML.Serialize.SerializeToXml(path);
                }
            }
            GUILayout.EndHorizontal();
            GUILayout.EndVertical();
            GUILayout.EndArea();
        }