public MaterialNodeValue ToMaterialNodeValue() { MaterialNodeValue NewValue = new MaterialNodeValue(this._Name, null); NewValue.Value = new MaterialValueHolder(); NewValue.Value.Type = MaterialValueType.Output; return(NewValue); }
protected virtual string GenerateFragment(MaterialNode Out) { string FragmentCode = ""; string FragmentHeader; List <string> UsedFunctions = new List <string>(); List <string> FunctionCalls = new List <string>(); MaterialNodeValue Surface = Out.Inputs[0]; if (Surface.InputTarget != null) { FunctionCalls.Add("\t" + GenerateFragmentFinalizer(true, Surface.InputTarget.Parent.Name + "_" + Surface.InputTarget.Name)); UsedFunctions.Add(Surface.InputTarget.Parent.FunctionID); ProcessCurrentNode(Surface.InputTarget.Parent, UsedFunctions, FunctionCalls); } else { FunctionCalls.Add(GenerateFragmentFinalizer(false, "")); } String LibPath = "Data\\"; if (_TexturesNumber > 0) { FragmentHeader = File.ReadAllText(LibPath + this._MaterialTranslatorType + "\\Generator\\FragmentTexturedHeader.shader") + "\n"; } else { FragmentHeader = File.ReadAllText(LibPath + this._MaterialTranslatorType + "\\Generator\\FragmentHeader.shader") + "\n"; } if (FragmentHeader == "") { return(""); } FragmentCode += FragmentHeader; FragmentCode += "\n"; for (int i = 0; i < UsedFunctions.Count; i++) { bool Found = false; for (int j = 0; j < this._Entries.Count; j++) { if (this._Entries[j].ID == UsedFunctions[i]) { FragmentCode += this._Entries[j].FunctionCode; FragmentCode += "\n"; FragmentCode += "\n"; Found = true; } } if (!Found) { return(""); } } FragmentCode += GenerateMainFunction(FunctionCalls.ToArray()); File.WriteAllText(this._MaterialTranslatorType + "\\Generator\\Out.shader", FragmentCode); return(FragmentCode); }
public MaterialNodeValue ToMaterialNodeValue() { MaterialNodeValue NewValue = new MaterialNodeValue(this._Name, null); if (_DefaultValue == null) { NewValue.Value = new MaterialValueHolder(); } else { NewValue.Value = new MaterialValueHolder(_DefaultValue.X, _DefaultValue.Y, _DefaultValue.Z, _DefaultValue.W); } NewValue.Value.Type = _Type; return(NewValue); }
public MaterialNode ToMaterialNode(Material Holder) { MaterialNode NewNode = new MaterialNode(this.ID, Holder); NewNode.FunctionID = this.ID; for (int i = 0; i < this.Inputs.Count; i++) { MaterialNodeValue Value = this.Inputs[i].ToMaterialNodeValue(); Value.Parent = NewNode; NewNode.Inputs.Add(Value); } for (int i = 0; i < this.Outputs.Count; i++) { MaterialNodeValue Value = this.Outputs[i].ToMaterialNodeValue(); Value.Parent = NewNode; NewNode.Outputs.Add(Value); } return(NewNode); }
private void Editor_NodeUpdate(ShadySolutions.UI.NodeEditor.NodeValue sender) { MaterialNodeValue Source = (MaterialNodeValue)sender.Source; MaterialValueHolder NewValueHolder = new MaterialValueHolder(sender.Value.X, sender.Value.Y, sender.Value.Z, sender.Value.W); NewValueHolder.Type = Source.Value.Type; NewValueHolder.Value = sender.Value.Value; Source.Value = NewValueHolder; if (Source.InputTarget != null && sender.Input == null) { Source.InputTarget.OutputTargets.Remove(Source); Source.InputTarget = null; } if (Source.InputTarget != null && (MaterialNodeValue)sender.Input.Source != Source.InputTarget) { Source.InputTarget.OutputTargets.Remove(Source); Source.InputTarget = (MaterialNodeValue)sender.Input.Source; } if (Source.InputTarget == null && sender.Input != null) { Source.InputTarget = (MaterialNodeValue)sender.Input.Source; } }
private static NodeValue MaterialNodeValueToUI(Material Mat, MaterialNodeValue MatNodeVal, NodeEditor Editor) { NodeValue NewNodeValue; if (MatNodeVal.Value.Type == MaterialValueType.Input) { NewNodeValue = new NodeValueColor(MatNodeVal.Name); NewNodeValue.HasValue = false; } else if (MatNodeVal.Value.Type == MaterialValueType.Output) { NewNodeValue = new NodeValueOutput(MatNodeVal.Name); } else if (MatNodeVal.Value.Type == MaterialValueType.Value) { NewNodeValue = new NodeValue(MatNodeVal.Name); NewNodeValue.HasOutput = false; } else if (MatNodeVal.Value.Type == MaterialValueType.BoolValue) { NewNodeValue = new NodeValueBoolean(MatNodeVal.Name); NewNodeValue.Value.X = (MatNodeVal.Value.X == 1)?1:0; } else if (MatNodeVal.Value.Type == MaterialValueType.IntValue) { NewNodeValue = new NodeValueFloat(MatNodeVal.Name); NewNodeValue.Value.X = MatNodeVal.Value.X; } else if (MatNodeVal.Value.Type == MaterialValueType.FloatValue) { NewNodeValue = new NodeValueFloat(MatNodeVal.Name); NewNodeValue.Value.X = MatNodeVal.Value.X; } else if (MatNodeVal.Value.Type == MaterialValueType.VertexValue) { NewNodeValue = new NodeValueVector(MatNodeVal.Name); NewNodeValue.Value = new ValueVector(MatNodeVal.Value.X, MatNodeVal.Value.Y, MatNodeVal.Value.Z); } else if (MatNodeVal.Value.Type == MaterialValueType.ColorValue) { NewNodeValue = new NodeValueColor(MatNodeVal.Name); NewNodeValue.Value = new ValueVector(MatNodeVal.Value.X, MatNodeVal.Value.Y, MatNodeVal.Value.Z, MatNodeVal.Value.W); } else if (MatNodeVal.Value.Type == MaterialValueType.TextureValue) { NewNodeValue = new NodeValueImage(MatNodeVal.Name); NewNodeValue.Value = new ValueVector(MatNodeVal.Value.X, MatNodeVal.Value.Y, MatNodeVal.Value.Z, MatNodeVal.Value.W); NewNodeValue.Value.Value = MatNodeVal.Value.Value; } else { NewNodeValue = new NodeValue(MatNodeVal.Name); NewNodeValue.HasInput = false; NewNodeValue.HasOutput = false; NewNodeValue.HasValue = false; } NewNodeValue.Source = MatNodeVal; if (MatNodeVal.InputTarget != null) { for (int i = 0; i < Editor.Nodes.Count; i++) { if (Editor.Nodes[i].ID == MatNodeVal.InputTarget.Parent.ID) { for (int j = 0; j < Editor.Nodes[i].Values.Count; j++) { if (Editor.Nodes[i].Values[j].Title == MatNodeVal.InputTarget.Name) { NewNodeValue.Input = Editor.Nodes[i].Values[j]; Editor.Nodes[i].Values[j].Outputs.Add(NewNodeValue); } } } } } for (int k = 0; k < MatNodeVal.OutputTargets.Count; k++) { for (int i = 0; i < Editor.Nodes.Count; i++) { if (Editor.Nodes[i].ID == MatNodeVal.OutputTargets[k].Parent.ID) { for (int j = 0; j < Editor.Nodes[i].Values.Count; j++) { if (Editor.Nodes[i].Values[j].Title == MatNodeVal.OutputTargets[k].Name) { NewNodeValue.Outputs.Add(Editor.Nodes[i].Values[j]); Editor.Nodes[i].Values[j].Input = NewNodeValue; } } } } } return(NewNodeValue); }