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}