void ConvertToProperty(GraphData graphData) { AssertHelpers.IsNotNull(graphData, "GraphData is null while carrying out ConvertToPropertyAction"); AssertHelpers.IsNotNull(inlinePropertiesToConvert, "InlinePropertiesToConvert is null while carrying out ConvertToPropertyAction"); graphData.owner.RegisterCompleteObjectUndo("Convert to Property"); foreach (var converter in inlinePropertiesToConvert) { var convertedProperty = converter.AsShaderProperty(); var node = converter as AbstractMaterialNode; graphData.AddGraphInput(convertedProperty); // Add reference to converted property for use in responding to this action later convertedPropertyReferences.Add(convertedProperty); var propNode = new PropertyNode(); propNode.drawState = node.drawState; propNode.group = node.group; graphData.AddNode(propNode); propNode.property = convertedProperty; var oldSlot = node.FindSlot <MaterialSlot>(converter.outputSlotId); var newSlot = propNode.FindSlot <MaterialSlot>(PropertyNode.OutputSlotId); foreach (var edge in graphData.GetEdges(oldSlot.slotReference)) { graphData.Connect(newSlot.slotReference, edge.inputSlot); } graphData.RemoveNode(node); } }
// Static version for testability public static RedirectNodeData Create(GraphData graph, SlotValueType edgeType, Vector2 absolutePosition, SlotReference inputRef, SlotReference outputRef, Guid groupGuid) { var nodeData = new RedirectNodeData(); nodeData.AddSlots(edgeType); nodeData.SetPosition(absolutePosition); nodeData.groupGuid = groupGuid; // Hard-coded for single input-output. Changes would be needed for multi-input redirects var nodeInSlotRef = nodeData.GetSlotReference(RedirectNodeData.kInputSlotID); var nodeOutSlotRef = nodeData.GetSlotReference(RedirectNodeData.kOutputSlotID); graph.owner.RegisterCompleteObjectUndo("Add Redirect Node"); graph.AddNode(nodeData); graph.Connect(outputRef, nodeInSlotRef); graph.Connect(nodeOutSlotRef, inputRef); return nodeData; }
void ConvertToProperty(GraphData graphData) { AssertHelpers.IsNotNull(graphData, "GraphData is null while carrying out ConvertToPropertyAction"); AssertHelpers.IsNotNull(inlinePropertiesToConvert, "InlinePropertiesToConvert is null while carrying out ConvertToPropertyAction"); graphData.owner.RegisterCompleteObjectUndo("Convert to Property"); var defaultCategory = graphData.categories.FirstOrDefault(); AssertHelpers.IsNotNull(defaultCategory, "Default Category is null while carrying out ConvertToPropertyAction"); foreach (var converter in inlinePropertiesToConvert) { var convertedProperty = converter.AsShaderProperty(); var node = converter as AbstractMaterialNode; graphData.AddGraphInput(convertedProperty); // Also insert this input into the default category if (defaultCategory != null) { var addItemToCategoryAction = new AddItemToCategoryAction(); addItemToCategoryAction.categoryGuid = defaultCategory.categoryGuid; addItemToCategoryAction.itemToAdd = convertedProperty; graphData.owner.graphDataStore.Dispatch(addItemToCategoryAction); } // Add reference to converted property for use in responding to this action later convertedPropertyReferences.Add(convertedProperty); var propNode = new PropertyNode(); propNode.drawState = node.drawState; propNode.group = node.group; graphData.AddNode(propNode); propNode.property = convertedProperty; var oldSlot = node.FindSlot <MaterialSlot>(converter.outputSlotId); var newSlot = propNode.FindSlot <MaterialSlot>(PropertyNode.OutputSlotId); foreach (var edge in graphData.GetEdges(oldSlot.slotReference)) { graphData.Connect(newSlot.slotReference, edge.inputSlot); } graphData.RemoveNode(node); } }