示例#1
0
        private void PopulateConnections(GUIGenericMenu contextMenu)
        {
            SceneNodeCollection nodes = SerializedManager.SceneNodes;

            List <TransitionConnector> madeTransitions = new List <TransitionConnector>();

            foreach (SceneNode node in nodes.SceneNodes)
            {
                foreach (SceneTransition transition in node.SceneInfo.Transitions)
                {
                    TransitionConnector existingOut = madeTransitions.Find((x) =>
                    {
                        return(((SceneNode)x.GetStartNode()).SceneId == node.SceneId &&
                               ((SceneNode)x.GetEndNode()).SceneId == transition.DestinationSceneId);
                    });

                    if (existingOut != null)
                    {
                        existingOut.ConnectionCount++;
                        continue;
                    }

                    TransitionConnector existingIn = madeTransitions.Find((x) =>
                    {
                        return(((SceneNode)x.GetStartNode()).SceneId == transition.DestinationSceneId &&
                               ((SceneNode)x.GetEndNode()).SceneId == node.SceneId);
                    });

                    TransitionConnector newConnection = new TransitionConnector();

                    newConnection.ContextMenu = contextMenu;
                    newConnection.AddNode(node);

                    if (node.SceneId == transition.DestinationSceneId)
                    {
                        AddSelfTransitionNodes(newConnection, node);
                    }

                    newConnection.AddNode(nodes.SceneNodes.Find((x) =>
                                                                x.SceneId == transition.DestinationSceneId));

                    if (existingIn != null)
                    {
                        newConnection.ShiftOver = true;
                        existingIn.ShiftOver    = true;
                    }

                    NodeEditor.AddConnector(newConnection);
                    madeTransitions.Add(newConnection);
                }
            }
        }
示例#2
0
        private void AddSelfTransitionNodes(TransitionConnector connector, Node node)
        {
            Vector2 offset = Vector2.zero;

            offset.y = -20f;

            connector.AddNode(new RelativeNode(node, offset));

            offset.x = -node.NodeRect.width * 0.5f + 20f;
            connector.AddNode(new RelativeNode(node, offset));

            offset.x = -(node.NodeRect.width * 0.5f + 10f);

            connector.AddNode(new RelativeNode(node, offset));

            offset.y = 0f;
            connector.AddNode(new RelativeNode(node, offset));
        }
        /// <summary>
        /// Factory method to be passed to the Context Menu for creating
        /// an instance of this connector class
        /// </summary>
        /// <param name="editor">The node editor making the connection</param>
        /// <param name="nodes">Any nodes to start the connector with</param>
        /// <returns></returns>
        public static TransitionConnector TransitionConnectorFactory(
            ZeroProgress.NodeEditor.NodeEditor editor, params Node[] nodes)
        {
            TransitionConnector newConnector = new TransitionConnector();

            if (nodes == null)
            {
                return(newConnector);
            }

            foreach (Node node in nodes)
            {
                newConnector.AddNode(node);
            }

            return(newConnector);
        }