Ejemplo n.º 1
0
        /// <summary>
        /// Perform the focusing logic
        /// </summary>
        private void PerformFocus()
        {
            IEnumerable <Node> selectedNodes = NodeEditor.GetSelectedNodes();

            int     count           = 0;
            Vector2 averagePosition = Vector2.zero;

            foreach (Node node in selectedNodes)
            {
                averagePosition += node.NodeRect.position;
                count++;
            }

            IEnumerable <Connector> selectedConnectors = NodeEditor.GetSelectedConnectors();

            foreach (Connector connector in selectedConnectors)
            {
                Node startNode = connector.GetStartNode();
                Node endNode   = connector.GetEndNode();

                averagePosition += ((startNode.NodeRect.position + endNode.NodeRect.position) * 0.5f);
                count++;
            }

            if (count == 0)
            {
                foreach (Node node in NodeEditor.Nodes)
                {
                    averagePosition += node.NodeRect.position;
                    count++;
                }
            }

            if (count == 0)
            {
                NodeEditor.SetPanOffset(Vector2.zero);
                return;
            }

            Vector2 offset = NodeEditor.NodeEditorRect.size * 0.5f;

            NodeEditor.SetPanOffset((-averagePosition / count) + offset);
        }