コード例 #1
0
 // Menu
 static void PopupMenu()
 {
     if (Event.current != null && Event.current.type == EventType.mouseDown)
     {
         if (Event.current.button == 1)
         {
             ModifierEditorMenu.Popup(Event.current.mousePosition, Content2Node(Event.current.mousePosition));
         }
     }
 }
コード例 #2
0
        static void NodeWindowFunc(int windowID)
        {
            Node node = null;

            if (windowID < modifier.nodes.Count)
            {
                node = modifier.nodes[windowID];
            }
            else
            {
                node = modifier.output;
            }
            if (node == null)
            {
                GUI.DragWindow();
                return;
            }

            // Delete this node
            if (draggingSlot == null && editingSlot == null && Event.current != null && Event.current.type == EventType.mouseDown)
            {
                if (Event.current.button == 1 && Event.current.mousePosition.y < 16)
                {
                    ModifierEditorMenu.PopupDelete(Event.current.mousePosition, node);
                }
            }

            GUILayout.BeginHorizontal(GUILayout.MinHeight(10));

            if (node.slots.Length > 0)
            {
                GUILayout.BeginVertical();
                GUILayout.Space(1);
                for (int i = 0; i < node.slots.Length; ++i)
                {
                    //GUILayout.Space(-1);
                    Rect rct = EditorGUILayout.BeginHorizontal();

                    GUI.color = node.slots[i].input == null ? new Color(1, 1, 1, 0.2f) : Color.white;
                    GUILayout.Label(node.slots[i].input == null ? cfwindow.texInputSlot : cfwindow.texInputSlotActive);
                    GUI.color = Color.white;
                    EditorGUILayout.EndHorizontal();
                    GUILayout.Space(-3);

                    // Draw "drag slot area"
                    GUIStyle gs = new GUIStyle();
                    gs.normal.background = cfwindow.texInputSlot;
                    gs.hover.background  = cfwindow.texInputSlot;
                    gs.active.background = cfwindow.texInputSlot;

                    rct.x     += 2;
                    rct.y     += 1;
                    rct.width  = 16;
                    rct.height = 16;
                    Color c = NodeColor(node);
                    c.a       = 0.7f;
                    GUI.color = c;
                    if (Event.current != null && rct.Contains(Event.current.mousePosition))
                    {
                        GUI.Label(rct, "", gs);
                        // Begin drag slot
                        if (Event.current.type == EventType.MouseDown)
                        {
                            if (Event.current.button == 0)
                            {
                                draggingSlot        = node.slots[i];
                                draggingSlotIndex   = i;
                                draggingSlot.input  = null;
                                dragSlotExcludeNode = node;
                            }
                        }
                    }
                    GUI.color = Color.white;
                }
                GUILayout.Space(3);
                GUILayout.EndVertical();


                Rect nameRect = EditorGUILayout.BeginVertical(GUILayout.MinWidth(30), GUILayout.MaxWidth(200));
                GUILayout.Space(2);
                for (int i = 0; i < node.slots.Length; ++i)
                {
                    if (node.slots[i] == editingSlot)
                    {
                        GUI.color = Color.clear;
                    }
                    GUILayout.Label(node.slots[i].name);
                    GUI.color = Color.white;
                }
                EditorGUILayout.EndVertical();

                GUILayout.BeginVertical(GUILayout.MinWidth(20), GUILayout.MaxWidth(200));
                GUILayout.Space(2);
                for (int i = 0; i < node.slots.Length; ++i)
                {
                    string value = "";
                    if (!node.slots[i].value.isNull)
                    {
                        value = node.slots[i].value.ToEditString(false);
                    }

                    Rect rct = EditorGUILayout.BeginHorizontal();

                    GUIStyle gs = new GUIStyle(EditorStyles.label);
                    gs.alignment = TextAnchor.MiddleRight;
                    gs.padding   = new RectOffset(gs.padding.left, 5, gs.padding.top, gs.padding.bottom);

                    Color c = NodeColor(node);
                    c.a = 0.25f;

                    if (node.slots[i].input != null)
                    {
                        GUI.color = c;
                        GUILayout.Label(value, gs);
                        GUI.color = Color.white;
                    }
                    else
                    {
                        GUIStyle gbs = new GUIStyle(EditorStyles.miniButton);
                        gbs.hover.background = gbs.normal.background;

                        Rect btn_rct = new Rect(rct.xMin - (nameRect.width + 8), rct.yMin, rct.width + (nameRect.width + 8), rct.height - 1);

                        c.a       = 0.5f;
                        GUI.color = c;
                        if (!node.slots[i].value.isNull)
                        {
                            gbs.normal.background = null;
                        }
                        if (node.slots[i] != editingSlot && GUI.Button(btn_rct, "", gbs))
                        {
                            if (Event.current != null && Event.current.button == 0)
                            {
                                EndEditingSlot();
                                editingSlot      = node.slots[i];
                                editingSlotValue = node.slots[i].value.ToEditString(true);
                                GUI.FocusControl("");
                            }
                        }
                        GUI.color = Color.white;

                        if (node.slots[i].value.isNull)
                        {
                            value = "?";
                        }

                        if (node.slots[i] == editingSlot)
                        {
                            GUI.color = Color.clear;
                        }
                        GUILayout.Label(value, gs);
                        GUI.color = Color.white;

                        if (node.slots[i] == editingSlot)
                        {
                            GUIStyle gfs = new GUIStyle(EditorStyles.textField);
                            gfs.alignment = TextAnchor.MiddleRight;
                            gfs.padding   = new RectOffset(gfs.padding.left, 5, gfs.padding.top, gfs.padding.bottom);
                            gfs.fontSize  = 10;
                            c.a           = 1;
                            //GUI.color = c;
                            GUI.SetNextControlName("EditSlot");
                            editingSlotValue = GUI.TextField(btn_rct, editingSlotValue, gfs);
                        }
                    }
                    EditorGUILayout.EndHorizontal();
                }
                GUILayout.EndVertical();
            }
            else
            {
                GUILayout.BeginVertical(GUILayout.MaxWidth(5));
                GUILayout.Space(2);
                GUILayout.EndVertical();

                GUILayout.BeginVertical(GUILayout.MaxWidth(5));
                GUILayout.Space(2);
                GUILayout.EndVertical();

                GUILayout.BeginVertical(GUILayout.MinWidth(90));
                GUILayout.Space(0);
                Color c = NodeColor(node);
                c.a       = 0.25f;
                GUI.color = c;
                GUIStyle gs = new GUIStyle();
                gs.normal.textColor = Color.white;
                gs.alignment        = TextAnchor.LowerRight;
                GUILayout.Label(node.Calculate().ToEditString(false), gs);
                GUI.color = Color.white;
                GUILayout.Space(1);
                GUILayout.EndVertical();
            }

            if (!(node is OutputNode))
            {
                GUILayout.Space(-13);
                GUILayout.BeginVertical();
                GUILayout.Space(-21);
                GUI.color = NodeColor(node);
                if (!nodeOutputs[windowID])
                {
                    GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b, 0.2f);
                }
                if (node == dragSlotExcludeNode)
                {
                    GUI.color = Color.clear;
                }
                GUILayout.Label(nodeOutputs[windowID] ? cfwindow.texOutputSlotActive : cfwindow.texOutputSlot);
                GUI.color = Color.white;
                GUILayout.EndVertical();
                GUILayout.Space(-7);
            }
            else
            {
                GUILayout.BeginVertical();
                GUILayout.EndVertical();
            }

            GUILayout.EndHorizontal();

            if (dragSlotExcludeNode != node)
            {
                GUI.DragWindow();
            }
        }