Esempio n. 1
0
        public void OnGUI()
        {
            // TODO: add search functionality
            // TODO: add automatic finding node based generators in project

            InitStyles();
            var generatorModes = ChiselGeneratorManager.generatorModes;
            var isActive       = ChiselPlacementTool.IsActive();

            float height        = 0;
            var   previousGroup = string.Empty;

            for (int i = 0; i < generatorModes.Length; i++)
            {
                var generatorMode = generatorModes[i];
                if (previousGroup != generatorMode.Group)
                {
                    height       += kSingleLineHeight + kSingleSpacing;
                    previousGroup = generatorMode.Group;
                }
                height += kSingleLineHeight + kSingleSpacing;
            }

            scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
            // TODO: figure out how to do this without needing layout stuff?
            EditorGUILayout.GetControlRect(false, height);

            var togglePosition = new Rect(0, 0, ChiselEditorUtility.ContextWidth, kSingleLineHeight);
            var style          = styles.namedToggleStyle;

            previousGroup = string.Empty;
            for (int i = 0; i < generatorModes.Length; i++)
            {
                var generatorMode = generatorModes[i];
                if (previousGroup != generatorMode.Group)
                {
                    EditorGUI.LabelField(togglePosition, generatorMode.Group, styles.groupTitleStyle);
                    togglePosition.y += kSingleLineHeight + kSingleSpacing;
                    previousGroup     = generatorMode.Group;
                }
                NamedGeneratorButton(generatorModes[i], togglePosition, style, isActive);
                togglePosition.y += kSingleLineHeight + kSingleSpacing;
            }
            EditorGUILayout.EndScrollView();
        }
Esempio n. 2
0
        public static void RenderCreationTools()
        {
            InitStyles();

            var generatorModes = ChiselGeneratorManager.generatorModes;
            var isActive       = ChiselPlacementTool.IsActive();

            var style = styles.toggleStyleMid;

            int usedModes = 0;

            for (int i = 0; i < generatorModes.Length; i++)
            {
                if (!generatorModes[i].InToolBox &&
                    ChiselGeneratorManager.GeneratorMode != generatorModes[i])
                {
                    continue;
                }
                usedModes++;
            }

            int rows      = Mathf.CeilToInt((usedModes + 1) / (float)kToolsWide);
            var groupRect = EditorGUILayout.GetControlRect(false, (rows * style.fixedHeight) + styles.boxStyleVerticalMargin, kMinWidthLayout);

            groupRect.xMin -= 2;
            groupRect.yMin += 5;
            groupRect.xMax += 3;
            groupRect.yMax += 6;

            if (Event.current.type == EventType.Repaint)
            {
                var oldColor = GUI.color;
                var newColor = Color.black;
                newColor.a = 0.5f;
                GUI.color  = newColor;
                GUI.DrawTexture(new Rect(groupRect.x, groupRect.y - 1, groupRect.width, 1), Texture2D.whiteTexture);
                GUI.color = oldColor;

                styles.boxStyle.Draw(groupRect, false, false, false, false);
                styles.boxStyle.Draw(groupRect, false, false, false, false);
            }

            var topX = groupRect.x + 3;
            var topY = groupRect.y + 3;


            var leftMargin   = style.margin.left + topX + 1;
            var topMargin    = style.margin.top + topY;
            var buttonWidth  = style.fixedWidth + style.margin.horizontal - 1;
            var buttonHeight = style.fixedHeight + style.margin.vertical;
            var position     = new Rect(0, 0, buttonWidth, buttonHeight);

            int xpos = 0, ypos = 0;

            for (int i = 0; i < generatorModes.Length; i++)
            {
                if (!generatorModes[i].InToolBox &&
                    ChiselGeneratorManager.GeneratorMode != generatorModes[i])
                {
                    continue;
                }
                if (xpos >= kToolsWide)
                {
                    ypos++; xpos = 0;
                }
                position.x = leftMargin + xpos * buttonWidth;
                position.y = topMargin + ypos * buttonHeight;


                var toggleStyle = (xpos == 0) ? styles.toggleStyleLeft :
                                  (xpos == kToolsWide - 1) || (i == generatorModes.Length - 1) ? styles.toggleStyleRight :
                                  styles.toggleStyleMid;

                GeneratorButton(position, generatorModes[i], toggleStyle, isActive);
                xpos++;
            }
            if (xpos >= kToolsWide)
            {
                ypos++; xpos = 0;
            }
            {
                var addStyle = styles.addStyle;
                position.x = addStyle.margin.left + topX + xpos * buttonWidth;
                position.y = addStyle.margin.top + topY + ypos * buttonHeight;
                if (GUI.Button(position, kAddButton, addStyle))
                {
                    Create();
                }
            }
        }