A game about forced loneliness, made by TACStudios
at master 3.9 kB view raw
1using System; 2using System.Text; 3using System.Collections.Generic; 4using System.Linq; 5using UnityEditor.ShaderGraph.Drawing.Controls; 6using UnityEngine; 7using UnityEditor.Graphing; 8using UnityEditor.ShaderGraph.Internal; 9 10namespace UnityEditor.ShaderGraph 11{ 12 [Serializable] 13 [BlackboardInputInfo(30)] 14 class GradientShaderProperty : AbstractShaderProperty<Gradient> 15 { 16 public GradientShaderProperty() 17 { 18 displayName = "Gradient"; 19 value = new Gradient(); 20 } 21 22 public override PropertyType propertyType => PropertyType.Gradient; 23 24 internal override bool isExposable => false; 25 internal override bool isRenamable => true; 26 27 internal override bool AllowHLSLDeclaration(HLSLDeclaration decl) => false; // disable UI, nothing to choose 28 29 internal override void ForeachHLSLProperty(Action<HLSLProperty> action) 30 { 31 Action<ShaderStringBuilder> customDecl = (builder) => 32 { 33 StringBuilder colors = new("{"); 34 StringBuilder alphas = new("{"); 35 for (int i = 0; i < 8; ++i) 36 { 37 if (i < value.colorKeys.Length) 38 colors.AppendFormat("{0}4({1},{2},{3},{4})" 39 , concretePrecision.ToShaderString() 40 , NodeUtils.FloatToShaderValue(value.colorKeys[i].color.r) 41 , NodeUtils.FloatToShaderValue(value.colorKeys[i].color.g) 42 , NodeUtils.FloatToShaderValue(value.colorKeys[i].color.b) 43 , NodeUtils.FloatToShaderValue(value.colorKeys[i].time)); 44 else colors.AppendFormat("{0}4(0,0,0,0)", concretePrecision.ToShaderString()); 45 46 if (i < value.alphaKeys.Length) 47 alphas.AppendFormat("{0}2({1},{2})" 48 , concretePrecision.ToShaderString() 49 , NodeUtils.FloatToShaderValue(value.alphaKeys[i].alpha) 50 , NodeUtils.FloatToShaderValue(value.alphaKeys[i].time)); 51 else alphas.AppendFormat("{0}2(0,0)", concretePrecision.ToShaderString()); 52 53 if (i < 7) 54 { 55 colors.Append(","); 56 alphas.Append(","); 57 } 58 else 59 { 60 colors.Append("}"); 61 alphas.Append("}"); 62 } 63 } 64 65 builder.AppendLine("static Gradient {0} = {{{1},{2},{3},{4},{5}}};" 66 , referenceName 67 , (int)value.mode 68 , value.colorKeys.Length 69 , value.alphaKeys.Length 70 , colors.ToString() 71 , alphas.ToString()); 72 }; 73 74 action( 75 new HLSLProperty(HLSLType._CUSTOM, referenceName, HLSLDeclaration.Global, concretePrecision) 76 { 77 customDeclaration = customDecl 78 }); 79 } 80 81 internal override string GetPropertyAsArgumentString(string precisionString) 82 { 83 return "Gradient " + referenceName; 84 } 85 86 internal override AbstractMaterialNode ToConcreteNode() 87 { 88 return new GradientNode { gradient = value }; 89 } 90 91 internal override PreviewProperty GetPreviewMaterialProperty() 92 { 93 return new PreviewProperty(propertyType) 94 { 95 name = referenceName, 96 gradientValue = value 97 }; 98 } 99 100 internal override ShaderInput Copy() 101 { 102 return new GradientShaderProperty 103 { 104 displayName = displayName, 105 value = value, 106 }; 107 } 108 } 109}