public void Draw(GraphRendererContext rendererContext, GraphCamera camera)
        {
            if (!active)
            {
                return;
            }

            var mouseWorld = camera.ScreenToWorld(mouseScreenPosition);

            mousePin.Position = mouseWorld;


            GraphLinkRenderer.DrawGraphLink(rendererContext, link, camera);

            // Check the pin that comes under the mouse pin
            var targetPin = graphEditor.GetPinUnderPosition(mouseWorld);

            if (targetPin != null)
            {
                var sourcePin = attachedPin;
                var pins      = new GraphPin[] { sourcePin, targetPin };
                Array.Sort(pins, new GraphPinHierarchyComparer());
                string errorMessage;
                if (!GraphSchema.CanCreateLink(pins[0], pins[1], out errorMessage))
                {
                    GraphTooltip.message = errorMessage;
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Renders the graph editor in the editor window
        /// </summary>
        /// <param name="bounds">The bounds of the editor window</param>
        public void Draw(Rect bounds)
        {
            if (graph == null)
            {
                // Graph is not yet initialized
                DrawGraphNotInitializedMessage(bounds);
                return;
            }
            var cullingBias = new Vector2(renderCullingBias, renderCullingBias);
            //var screenBoundsPosition = Vector2.zero - cullingBias;
            //var screenBoundsSize = bounds.size + cullingBias * 2;

            var windowWorldPos    = camera.ScreenToWorld(Vector2.zero);
            var windowWorldBounds = new Rect(windowWorldPos, bounds.size * camera.ZoomLevel);

            windowWorldBounds.position -= cullingBias;
            windowWorldBounds.size     += cullingBias * 2;

            DrawGrid(windowWorldBounds);
            DrawBranding(bounds);
            DrawEditorStats(bounds);
            DrawOverlay(bounds);


            // Draw the links
            cursorDragLink.Draw(rendererContext, camera);
            foreach (var link in graph.Links)
            {
                if (DMathUtils.Intersects(windowWorldBounds, link))
                {
                    GraphLinkRenderer.DrawGraphLink(rendererContext, link, camera);
                }
            }

            // Draw the nodes
            GraphNode[] sortedNodes = graph.Nodes.ToArray();
            System.Array.Sort(sortedNodes, new NodeZIndexComparer());

            foreach (var node in sortedNodes)
            {
                if (node == null)
                {
                    continue;
                }
                // Draw only if this node is visible in the editor
                if (DMathUtils.Intersects(windowWorldBounds, node.Bounds))
                {
                    var renderer = nodeRenderers.GetRenderer(node.GetType());
                    renderer.Draw(rendererContext, node, camera);
                }
            }
            selectionBox.Draw(editorStyle);
            DrawHUD(bounds);

            GraphTooltipRenderer.Draw(rendererContext, lastMousePosition);
            GraphTooltip.Clear();
        }
        /// <summary>
        /// Renders the graph editor in the editor window
        /// </summary>
        /// <param name="bounds">The bounds of the editor window</param>
        public void Draw(Rect bounds)
        {
            if (graph == null)
            {
                // Graph is not yet initialized
                DrawGraphNotInitializedMessage(bounds);
                return;
            }
            var windowWorldPos    = camera.ScreenToWorld(Vector3.zero);
            var windowWorldBounds = new Rect(windowWorldPos.x, windowWorldPos.y, bounds.size.x, bounds.size.y);

            DrawGrid(windowWorldBounds);
            DrawBranding(bounds);


            // Draw the links
            cursorDragLink.Draw(rendererContext, camera);
            foreach (var link in graph.Links)
            {
                if (DMathUtils.Intersects(windowWorldBounds, link))
                {
                    GraphLinkRenderer.DrawGraphLink(rendererContext, link, camera);
                }
            }

            // Draw the nodes
            GraphNode[] sortedNodes = graph.Nodes.ToArray();
            System.Array.Sort(sortedNodes, new NodeZIndexComparer());

            foreach (var node in sortedNodes)
            {
                if (node == null)
                {
                    continue;
                }
                // Draw only if this node is visible in the editor
                if (DMathUtils.Intersects(windowWorldBounds, node.Bounds))
                {
                    var renderer = nodeRenderers.GetRenderer(node.GetType());
                    renderer.Draw(rendererContext, node, camera);
                }
            }

            selectionBox.Draw();
            DrawHUD(bounds);

            GraphTooltipRenderer.Draw(rendererContext, lastMousePosition);
            GraphTooltip.Clear();
        }