示例#1
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);
                }
            }
        }
示例#2
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();
        }
示例#3
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();
            }
        }
示例#4
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;
            }
        }