void LoadHeaderResouces()
        {
            editIcon  = Resources.Load <Texture2D>("Icons/ic_edit");
            debugIcon = Resources.Load <Texture2D>("Icons/ic_settings");

            nodeRef.colorSchemeName = NodeTypeProvider.GetNodeColor(nodeRef.GetType());
        }
예제 #2
0
        //called only once, when the node is created
        public void Initialize(BaseGraph graph)
        {
            if (debug)
            {
                Debug.LogWarning("Node " + GetType() + "Initialize !");
            }

            //generate "unique" id for node:
            byte[] bytes = System.Guid.NewGuid().ToByteArray();
            id = (int)bytes[0] | (int)bytes[1] << 8 | (int)bytes[2] << 16 | (int)bytes[3] << 24;

            //set the node name:
            name = NodeTypeProvider.GetNodeName(GetType());

            //set the name of the scriptableObject
            base.name = name;

            //set the graph reference:
            graphRef = graph;

            //Initialize the rest of the node
            OnAfterNodeAndGraphDeserialized(false);

            //call virtual NodeCreation method
            OnNodeCreation();
        }
예제 #3
0
        void DrawSelector()
        {
            EditorGUIUtility.labelWidth = 0;
            EditorGUIUtility.fieldWidth = 0;
            GUILayout.BeginHorizontal(toolbarStyle);
            {
                searchString = GUILayout.TextField(searchString, toolbarSearchTextStyle);
                if (GUILayout.Button("", toolbarSearchCancelButtonStyle))
                {
                    // Remove focus if cleared
                    searchString = "";
                    GUI.FocusControl(null);
                }
            }
            GUILayout.EndHorizontal();

            foreach (var nodeCategory in NodeTypeProvider.GetAllowedNodesForGraph(graphRef.graphType))
            {
                DrawSelectorCase(nodeCategory.title, nodeCategory.colorSchemeName, true);
                foreach (var nodeCase in nodeCategory.typeInfos.Where(n => n.name.IndexOf(searchString, System.StringComparison.OrdinalIgnoreCase) >= 0))
                {
                    Rect clickableRect = DrawSelectorCase(nodeCase.name, nodeCategory.colorSchemeName);

                    if (e.type == EventType.MouseDown && e.button == 0 && clickableRect.Contains(Event.current.mousePosition))
                    {
                        Vector2 pan = graphRef.panPosition - graphRef.zoomPanCorrection;
                        Rect    c   = graphEditor.position;
                        c.position = Vector2.zero;
                        Vector2 center = GUI.matrix.inverse * c.center;
                        Vector2 pos    = center - pan - c.center - BaseNode.defaultNodeSize.center;
                        graphEditor.graph.CreateNewNode(nodeCase.type, pos);
                    }
                }
            }
        }
예제 #4
0
        public static void BaseGraphNodesSimplePasses()
        {
            var allWorldNodeInfos = NodeTypeProvider.GetAllowedNodesForGraph(BaseGraphType.World);

            var builder = GraphBuilder.NewGraph <WorldGraph>();

            foreach (var mainTypes in allWorldNodeInfos)
            {
                foreach (var nodeInfo in mainTypes.typeInfos)
                {
                    builder.NewNode(nodeInfo.type, nodeInfo.type.ToString());
                }
            }

            var graph = builder.Execute().GetGraph();

            foreach (var node in graph.allNodes)
            {
                var editor = UnityEditor.Editor.CreateEditor(node) as BaseNodeEditor;
                editor.Initialize(null);
                editor.OnNodeUnitTest();
                UnityEditor.Editor.DestroyImmediate(editor);
            }

            builder = GraphBuilder.NewGraph <WorldGraph>();

            foreach (var type in NodeTypeProvider.GetExlusiveNodeTypesForGraph(BaseGraphType.Biome))
            {
                builder.NewNode(type, type.ToString());
            }

            graph = builder.Execute().GetGraph();

            foreach (var node in graph.allNodes)
            {
                var editor = UnityEditor.Editor.CreateEditor(node) as BaseNodeEditor;
                editor.OnNodeUnitTest();
            }
        }
예제 #5
0
        void ContextMenu()
        {
            if (e.type == EventType.ContextClick)
            {
                Profiler.BeginSample("[PW] render context menu");

                Vector2 mousePosition = e.mousePosition;

                // Now create the menu, add items and show it
                GenericMenu menu = new GenericMenu();
                foreach (var nodeCat in NodeTypeProvider.GetAllowedNodesForGraph(graph.graphType))
                {
                    string menuString = "Create new/" + nodeCat.title + "/";
                    foreach (var nodeClass in nodeCat.typeInfos)
                    {
                        menu.AddItem(new GUIContent(menuString + nodeClass.name), false, () => graph.CreateNewNode(nodeClass.type, -graph.panPosition + mousePosition - BaseNode.defaultNodeSize.center));
                    }
                }
                menu.AddItem(newOrderingGroupContent, false, CreateNewOrderingGroup, e.mousePosition - graph.panPosition);
                menu.AddItemState(deleteOrderingGroupContent, editorEvents.isMouseOverOrderingGroup, DeleteOrderingGroup);

                menu.AddSeparator("");

                if (editorEvents.mouseOverAnchor != null)
                {
                    menu.AddItem(newLinkContent, false, StartDragLink);
                    menu.AddItem(deleteAllLinksContent, false, DeleteAllAnchorLinks);
                }

                var hoveredLink = editorEvents.mouseOverLink;
                menu.AddItemState(deleteLinkContent, hoveredLink != null, () => { graph.RemoveLink(hoveredLink); });

                menu.AddSeparator("");
                menu.AddItemState(deleteNodeContent, editorEvents.isMouseOverNode, () => { graph.RemoveNode(editorEvents.mouseOverNode); });

                if (editorEvents.selectedNodeCount != 0)
                {
                    string deleteNodeString = (editorEvents.selectedNodeCount == 1) ? "delete selected node" : "delete selected nodes";
                    menu.AddItem(new GUIContent(deleteNodeString), false, DeleteSelectedNodes);

                    string moveNodeString = (editorEvents.selectedNodeCount == 1) ? "move selected node" : "move selected nodes";
                    menu.AddItem(new GUIContent(moveNodeString), false, MoveSelectedNodes);
                }

                menu.AddSeparator("");

                var hoveredNode = editorEvents.mouseOverNode;
                menu.AddItemState(openNodeScriptContent, hoveredNode != null, () => { OpenNodeScript(hoveredNode); });
                menu.AddItemState(openNodeEditorScriptContent, hoveredNode != null, () => { OpenNodeEditorScript(hoveredNode); });
                menu.AddItemState(debugNodeContent, hoveredNode != null, () => { hoveredNode.debug = !hoveredNode.debug; }, (hoveredNode != null) ? hoveredNode.debug : false);

                var hoveredAnchor = editorEvents.mouseOverAnchor;
                menu.AddItemState(debugAnchorContent, hoveredAnchor != null, () => { hoveredAnchor.debug = !hoveredAnchor.debug; }, (hoveredAnchor != null) ? hoveredAnchor.debug : false);

                menu.AddSeparator("");
                menu.AddItem(recenterGraphContent, false, () => { graph.scale = 1; graph.panPosition = Vector2.zero; });

                menu.ShowAsContext();
                e.Use();

                Profiler.EndSample();
            }
        }