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); } } }
/// <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); }
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)); }
private void RemoveAssociatedConnectors(int sceneId) { for (int i = NodeEditor.Connectors.Count - 1; i >= 0; i--) { TransitionConnector transConnect = NodeEditor.Connectors[i] as TransitionConnector; if (transConnect == null) { continue; } SceneNode startNode = transConnect.GetStartNode() as SceneNode; SceneNode endNode = transConnect.GetEndNode() as SceneNode; if (startNode.SceneId == sceneId || endNode.SceneId == sceneId) { NodeEditor.RemoveConnector(transConnect); } } }
private void NodeEditor_OnConnectorRemoved(object sender, ConnectorRemovedEventArgs e) { TransitionConnector transition = e.RemovedConnector as TransitionConnector; if (transition == null) { return; } SceneNode startNode = transition.GetStartNode() as SceneNode; SceneNode endNode = transition.GetEndNode() as SceneNode; Undo.RegisterCompleteObjectUndo(SerializedManager.TargetManager, "Remove Connector"); if (endNode != null) { startNode.SceneInfo.Transitions.RemoveAll( (x) => x.DestinationSceneId == endNode.SceneId); } SerializedManager.SerializedManager.Update(); editorWindow.FlagRefresh(); }
private void NodeConnectorMode_OnConnectionsFinalized(object sender, Common.EventArgs <IEnumerable <Connector> > e) { foreach (Connector connector in e.Value) { TransitionConnector current = connector as TransitionConnector; if (current == null) { continue; } SceneNode startNode = connector.GetStartNode() as SceneNode; SceneNode endNode = connector.GetEndNode() as SceneNode; TransitionConnector existingOut = null, existingIn = null; // Iterate existing connectors to determine if there are any duplicates // and if there are, increment the display count foreach (Connector item in NodeEditor.Connectors) { // Looking for other connections that are made between the same nodes // so need to skip if we are on the connector being finalized if (item == connector) { continue; } TransitionConnector existing = item as TransitionConnector; if (existing == null) { continue; } bool isOutbound = existing.GetStartNode().NodeData == startNode.NodeData && existing.GetEndNode().NodeData == endNode.NodeData; bool isInbound = existing.GetStartNode().NodeData == endNode.NodeData && existing.GetEndNode().NodeData == startNode.NodeData; if (isOutbound) { existingOut = existing; } if (isInbound) { existingIn = existing; } } bool isSelfTransition = endNode.SceneId == startNode.SceneId; if (existingOut != null) { existingOut.ConnectionCount++; NodeEditor.RemoveConnector(connector, notifyListeners: false); } if (existingIn != null && !isSelfTransition) { current.ShiftOver = existingIn.ShiftOver = true; } if (existingIn != null && existingOut != null && !isSelfTransition) { existingIn.ShiftOver = existingOut.ShiftOver = current.ShiftOver = true; } if (isSelfTransition) { Node lastNode = connector.GetEndNode(); connector.RemoveNode(lastNode); AddSelfTransitionNodes(current, lastNode); connector.AddNode(lastNode); } Undo.RecordObject(SerializedManager.TargetManager, "Undo Create Transition"); startNode.SceneInfo.CreateNewTransition(endNode.SceneId); SerializedManager.SerializedManager.Update(); } }
public void UpdateActiveTransition(SceneModel initialScene, SceneModel destScene) { if (initialScene == null) { isTransitioning = false; return; } TransitionConnector anyConnector = null; bool foundMatch = false; foreach (Connector connector in NodeEditor.Connectors) { TransitionConnector transConnect = connector as TransitionConnector; if (transConnect == null) { continue; } if (destScene == null) { transConnect.IsCurrentlyTransitioning = false; } else { SceneNode startNode = transConnect.GetStartNode() as SceneNode; SceneNode endNode = transConnect.GetEndNode() as SceneNode; if (startNode == null || endNode == null) { continue; } if (startNode.SceneId == SceneManagerController.ANY_SCENE_ID && endNode.SceneId == destScene.SceneId) { anyConnector = transConnect; } transConnect.IsCurrentlyTransitioning = (startNode.SceneId == initialScene.SceneId && endNode.SceneId == destScene.SceneId); if (transConnect.IsCurrentlyTransitioning) { foundMatch = true; break; } } } if (foundMatch) { isTransitioning = true; } else if (anyConnector != null) { anyConnector.IsCurrentlyTransitioning = true; isTransitioning = true; } else { isTransitioning = false; } }