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); }
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); }