コード例 #1
0
        public MaterialNodeValue ToMaterialNodeValue()
        {
            MaterialNodeValue NewValue = new MaterialNodeValue(this._Name, null);

            NewValue.Value      = new MaterialValueHolder();
            NewValue.Value.Type = MaterialValueType.Output;
            return(NewValue);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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;
            }
        }
コード例 #6
0
        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);
        }