示例#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);
                }
            }
        }
        /// <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);
        }
示例#3
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));
        }
示例#4
0
        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);
                }
            }
        }
示例#5
0
        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();
        }
示例#6
0
        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();
            }
        }
示例#7
0
        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;
            }
        }