A game about forced loneliness, made by TACStudios
1using System.Collections.Generic; 2using UnityEditor.ShaderGraph.Drawing.Controls; 3using UnityEngine; 4using UnityEditor.Graphing; 5using System.Globalization; 6using UnityEditor.ShaderGraph.Internal; 7 8namespace UnityEditor.ShaderGraph 9{ 10 [Title("Input", "Basic", "Slider")] 11 class SliderNode : AbstractMaterialNode, IGeneratesBodyCode, IPropertyFromNode 12 { 13 [SerializeField] 14 private Vector3 m_Value = new Vector3(0f, 0f, 1f); 15 16 public const int OutputSlotId = 0; 17 private const string kOutputSlotName = "Out"; 18 19 public SliderNode() 20 { 21 name = "Slider"; 22 UpdateNodeAfterDeserialization(); 23 } 24 25 public sealed override void UpdateNodeAfterDeserialization() 26 { 27 AddSlot(new Vector1MaterialSlot(OutputSlotId, kOutputSlotName, kOutputSlotName, SlotType.Output, 0)); 28 RemoveSlotsNameNotMatching(new[] { OutputSlotId }); 29 } 30 31 [SliderControl("", true)] 32 public Vector3 value 33 { 34 get { return m_Value; } 35 set 36 { 37 if (m_Value == value) 38 return; 39 40 m_Value = value; 41 42 Dirty(ModificationScope.Node); 43 } 44 } 45 46 public override void CollectShaderProperties(PropertyCollector properties, GenerationMode generationMode) 47 { 48 if (!generationMode.IsPreview()) 49 return; 50 51 properties.AddShaderProperty(new Vector1ShaderProperty() 52 { 53 overrideReferenceName = GetVariableNameForNode(), 54 generatePropertyBlock = false, 55 value = value.x, 56 rangeValues = new Vector2(value.y, value.z), 57 floatType = FloatType.Slider 58 }); 59 } 60 61 public void GenerateNodeCode(ShaderStringBuilder sb, GenerationMode generationMode) 62 { 63 if (generationMode.IsPreview()) 64 return; 65 66 sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "$precision {0} = {1};", GetVariableNameForNode(), m_Value.x)); 67 } 68 69 public override string GetVariableNameForSlot(int slotId) 70 { 71 return GetVariableNameForNode(); 72 } 73 74 public override void CollectPreviewMaterialProperties(List<PreviewProperty> properties) 75 { 76 properties.Add(new PreviewProperty(PropertyType.Float) 77 { 78 name = GetVariableNameForNode(), 79 floatValue = m_Value.x 80 }); 81 } 82 83 public AbstractShaderProperty AsShaderProperty() 84 { 85 return new Vector1ShaderProperty 86 { 87 value = value.x, 88 rangeValues = new Vector2(value.y, value.z), 89 floatType = FloatType.Slider 90 }; 91 } 92 93 public int outputSlotId { get { return OutputSlotId; } } 94 } 95}