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); } } }
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); }