Beispiel #1
0
        private void ResolveScriptNodeConnections(IEnumerable <CNode> nodes, Dictionary <CNode, CScriptNodeViewmodel> nodeToViewModel)
        {
            foreach (CNode graphNode in nodes)
            {
                CScriptNodeViewmodel sourceViewModel = nodeToViewModel[graphNode];
                for (int i = 0; i < graphNode.OutExecutionPins.Count; i++)
                {
                    CExecutionPin inExecutionPin = graphNode.OutExecutionPins[i];
                    if (inExecutionPin.TargetNode == null)
                    {
                        continue;
                    }

                    CScriptNodeViewmodel targetViewModel = nodeToViewModel[inExecutionPin.TargetNode];
                    if (targetViewModel.InExecutionPins.Count > 0)
                    {
                        CNodeConnectionViewModel newConnection = new CNodeConnectionViewModel(sourceViewModel.OutExecutionPins[i], targetViewModel.InExecutionPins[inExecutionPin.TargetPinIndex], this);
                        newConnection.Connect();
                    }
                    else
                    {
                        inExecutionPin.TargetNode = null;
                        LogUtility.Log("[ScriptLoadError] node {0} tried to connect to {1} but the target does not have an in execution pin", sourceViewModel.Name, targetViewModel.Name);
                    }
                }

                for (int i = 0; i < graphNode.InputPins.Count; i++)
                {
                    CInputPin inputPin = graphNode.InputPins[i];
                    if (inputPin.SourceNode == null)
                    {
                        continue;
                    }

                    CScriptNodeViewmodel inputSourceVm = nodeToViewModel[inputPin.SourceNode];
                    if (inputSourceVm.OutputPins.Count > inputPin.SourceParameterIndex)
                    {
                        COutputPinViewModel sourcePinVM = inputSourceVm.OutputPins[inputPin.SourceParameterIndex];
                        if (inputPin.Type.IsAssignableFrom(sourcePinVM.ValueType))
                        {
                            CNodeConnectionViewModel newConnection = new CNodeConnectionViewModel(sourcePinVM, sourceViewModel.InputPins[i], this);
                            newConnection.Connect();
                        }
                        else
                        {
                            inputPin.SourceNode           = null;
                            inputPin.SourceParameterIndex = -1;
                            LogUtility.Log("[ScriptLoadWarning] Node {0} tried to connect to {1} at output pin index {2} but the pin types are not compatible, connection removed", sourceViewModel.Name, inputSourceVm.Name, inputPin.SourceParameterIndex);
                        }
                    }
                    else
                    {
                        inputPin.SourceNode           = null;
                        inputPin.SourceParameterIndex = -1;
                        LogUtility.Log("[ScriptLoadError] node {0} tried to connect to {1} at output pin index {2} but there are not enough pins", sourceViewModel.Name, inputSourceVm.Name, inputPin.SourceParameterIndex);
                    }
                }
            }
        }
 public virtual void RemoveConnection(CNodeConnectionViewModel removedConnection, CPinViewModel otherPin)
 {
     Connections.Remove(removedConnection);
     if (Connections.Count == 0)
     {
         RaisePropertyChanged("PinInnerColor");
         RaisePropertyChanged("IsConnected");
     }
 }
        public virtual void AddConnection(CNodeConnectionViewModel newConnection, CPinViewModel otherPin)
        {
            int prevConnectionCount = Connections.Count;

            Connections.Add(newConnection);
            if (prevConnectionCount == 0)
            {
                RaisePropertyChanged("PinInnerColor");
                RaisePropertyChanged("IsConnected");
            }
        }
        public override void RemoveConnection(CNodeConnectionViewModel removedConnection, CPinViewModel otherPin)
        {
            m_pin.SourceNode           = null;
            m_pin.SourceParameterIndex = -1;

            if (otherPin is COutputPinViewModel outputVm)
            {
                CNodeChangeContext context = new CNodeChangeContext();
                m_nodeViewmodel.ScriptNode.OnInputConnectionChanged(context, m_pin, null);
                foreach (var action in context.Actions)
                {
                    m_nodeViewmodel.ExecuteNodeAction(action);
                }
            }

            base.RemoveConnection(removedConnection, otherPin);
        }
Beispiel #5
0
        private void ConnectPins(CPinViewModel source, CPinViewModel target)
        {
            CNodeConnectionViewModel newConnection = new CNodeConnectionViewModel(source, target, this);

            void Redo()
            {
                newConnection.Connect();
            }

            void Undo()
            {
                newConnection.Disconnect();
            }

            Redo();
            UndoRedoUtility.Record(new CRelayUndoItem(Undo, Redo));
        }
        public override void AddConnection(CNodeConnectionViewModel newConnection, CPinViewModel otherPin)
        {
            if (!IsIn)
            {
                if (otherPin is CExecutionPinViewModel otherExecution && otherExecution.IsIn)
                {
                    // Out Execution pins can only be connected to a single node
                    if (Connections.Count > 0)
                    {
                        if (Connections.Count > 1)
                        {
                            List <CNodeConnectionViewModel> oldConnections = new List <CNodeConnectionViewModel>();
                            foreach (CNodeConnectionViewModel connection in Connections)
                            {
                                oldConnections.Add(connection);
                            }

                            foreach (CNodeConnectionViewModel connection in oldConnections)
                            {
                                connection.Disconnect();
                            }
                        }

                        Connections[0].Disconnect();
                    }

                    m_pin.TargetNode     = otherPin.NodeViewModel.ScriptNode;
                    m_pin.TargetPin      = otherPin.NodeViewModel.ScriptNode.InExecutionPins[otherPin.PinIndex];
                    m_pin.TargetPinIndex = otherPin.PinIndex;
                    base.AddConnection(newConnection, otherPin);
                }
            }
            else
            {
                base.AddConnection(newConnection, otherPin);
            }
        }
        public override void AddConnection(CNodeConnectionViewModel newConnection, CPinViewModel otherPin)
        {
            if (otherPin is COutputPinViewModel outputPin)
            {
                // Input pin can only be connected to a single node
                if (Connections.Count > 0)
                {
                    if (Connections.Count > 1)
                    {
                        List <CNodeConnectionViewModel> oldConnections = new List <CNodeConnectionViewModel>();
                        foreach (CNodeConnectionViewModel connection in Connections)
                        {
                            oldConnections.Add(connection);
                        }

                        foreach (CNodeConnectionViewModel connection in oldConnections)
                        {
                            connection.Disconnect();
                        }
                    }

                    Connections[0].Disconnect();
                }

                m_pin.SourceNode           = outputPin.NodeViewModel.ScriptNode;
                m_pin.SourceParameterIndex = outputPin.PinIndex;

                CNodeChangeContext context = new CNodeChangeContext();
                m_nodeViewmodel.ScriptNode.OnInputConnectionChanged(context, m_pin, outputPin.Pin);
                foreach (var action in context.Actions)
                {
                    m_nodeViewmodel.ExecuteNodeAction(action);
                }

                base.AddConnection(newConnection, otherPin);
            }
        }
 public override void RemoveConnection(CNodeConnectionViewModel removedConnection, CPinViewModel otherPin)
 {
     m_pin.TargetNode = null;
     base.RemoveConnection(removedConnection, otherPin);
 }
Beispiel #9
0
 public void RemoveConnection(CNodeConnectionViewModel connection)
 {
     Connections.Remove(connection);
 }