Esempio n. 1
0
        public T ReplaceNode <T>(WildcardNode wildcard, T node) where T : BaseNode
        {
            Assert.IsFalse(node is ScriptNode, $"Can't replace node {wildcard.Name} because it's of type ScriptNode. Use ReplaceScriptNode instead.");

            Nodes.Remove(wildcard.Name);

            AddNode(node, wildcard.Name);
            node.Speed = wildcard.Speed;

            for (int i = 0; i < wildcard.InputPorts.Count; i++)
            {
                var inputPort = wildcard.InputPorts[i];

                wildcard.Disconnect(inputPort.Link);
                var newInputPort = node.CreateBaseInputPort(inputPort.Weight);
                node.Connect(newInputPort, inputPort.Link.OutputPort);
            }

            for (int i = 0; i < wildcard.OutputPorts.Count; i++)
            {
                var outputPort = wildcard.OutputPorts[i];

                outputPort.Link.InputPort.Node.Disconnect(outputPort.Link);
                outputPort.Link.InputPort.Node.Connect(outputPort.Link.InputPort, node);
            }

            Behaviour.PlayableGraph.DestroyPlayable(wildcard.Playable);

            return(node);
        }
Esempio n. 2
0
        public ScriptNode ReplaceScriptNode <T>(WildcardNode wildcard, ScriptNode scriptNode) where T : struct, IScriptNodeJob
        {
            Nodes.Remove(wildcard.Name);

            AddScriptNode <T>(scriptNode, wildcard.Name);
            scriptNode.Speed = wildcard.Speed;

            for (int i = 0; i < wildcard.InputPorts.Count; i++)
            {
                var      inputPort = wildcard.InputPorts[i];
                NodeLink link      = inputPort.Link;

                wildcard.Disconnect(link);
                var newInputPort = scriptNode.CreateBaseInputPort(inputPort.Weight);
                scriptNode.Connect(newInputPort, link.OutputPort);
            }

            for (int i = 0; i < wildcard.OutputPorts.Count; i++)
            {
                var      outputPort = wildcard.OutputPorts[i];
                NodeLink link       = outputPort.Link;

                link.InputPort.Node.Disconnect(link);
                link.InputPort.Node.Connect(link.InputPort, scriptNode);
            }

            Behaviour.PlayableGraph.DestroyPlayable(wildcard.Playable);

            return(scriptNode);
        }