OSDN Git Service

new project
[mindgames/Mindgames_main.git] / Mindgames / Library / PackageCache / com.unity.render-pipelines.high-definition@6.9.0-preview / Runtime / Core / Debugging / Prefabs / Scripts / DebugUIHandlerVector4.cs
1 using UnityEngine.UI;
2
3 namespace UnityEngine.Experimental.Rendering.UI
4 {
5     public class DebugUIHandlerVector4 : DebugUIHandlerWidget
6     {
7         public Text nameLabel;
8         public UIFoldout valueToggle;
9
10         public DebugUIHandlerIndirectFloatField fieldX;
11         public DebugUIHandlerIndirectFloatField fieldY;
12         public DebugUIHandlerIndirectFloatField fieldZ;
13         public DebugUIHandlerIndirectFloatField fieldW;
14
15         DebugUI.Vector4Field m_Field;
16         DebugUIHandlerContainer m_Container;
17
18         internal override void SetWidget(DebugUI.Widget widget)
19         {
20             base.SetWidget(widget);
21             m_Field = CastWidget<DebugUI.Vector4Field>();
22             m_Container = GetComponent<DebugUIHandlerContainer>();
23             nameLabel.text = m_Field.displayName;
24
25             fieldX.getter = () => m_Field.GetValue().x;
26             fieldX.setter = x => SetValue(x, x: true);
27             fieldX.nextUIHandler = fieldY;
28             SetupSettings(fieldX);
29
30             fieldY.getter = () => m_Field.GetValue().y;
31             fieldY.setter = x => SetValue(x, y: true);
32             fieldY.previousUIHandler = fieldX;
33             fieldY.nextUIHandler = fieldZ;
34             SetupSettings(fieldY);
35
36             fieldZ.getter = () => m_Field.GetValue().z;
37             fieldZ.setter = x => SetValue(x, z: true);
38             fieldZ.previousUIHandler = fieldY;
39             fieldZ.nextUIHandler = fieldW;
40             SetupSettings(fieldZ);
41
42             fieldW.getter = () => m_Field.GetValue().w;
43             fieldW.setter = x => SetValue(x, w: true);
44             fieldW.previousUIHandler = fieldZ;
45             SetupSettings(fieldW);
46         }
47
48         void SetValue(float v, bool x = false, bool y = false, bool z = false, bool w = false)
49         {
50             var vec = m_Field.GetValue();
51             if (x) vec.x = v;
52             if (y) vec.y = v;
53             if (z) vec.z = v;
54             if (w) vec.w = v;
55             m_Field.SetValue(vec);
56         }
57
58         void SetupSettings(DebugUIHandlerIndirectFloatField field)
59         {
60             field.parentUIHandler = this;
61             field.incStepGetter = () => m_Field.incStep;
62             field.incStepMultGetter = () => m_Field.incStepMult;
63             field.decimalsGetter = () => m_Field.decimals;
64             field.Init();
65         }
66
67         public override bool OnSelection(bool fromNext, DebugUIHandlerWidget previous)
68         {
69             if (fromNext || valueToggle.isOn == false)
70             {
71                 nameLabel.color = colorSelected;
72             }
73             else if (valueToggle.isOn)
74             {
75                 if (m_Container.IsDirectChild(previous))
76                 {
77                     nameLabel.color = colorSelected;
78                 }
79                 else
80                 {
81                     var lastItem = m_Container.GetLastItem();
82                     DebugManager.instance.ChangeSelection(lastItem, false);
83                 }
84             }
85
86             return true;
87         }
88
89         public override void OnDeselection()
90         {
91             nameLabel.color = colorDefault;
92         }
93
94         public override void OnIncrement(bool fast)
95         {
96             valueToggle.isOn = true;
97         }
98
99         public override void OnDecrement(bool fast)
100         {
101             valueToggle.isOn = false;
102         }
103
104         public override void OnAction()
105         {
106             valueToggle.isOn = !valueToggle.isOn;
107         }
108
109         public override DebugUIHandlerWidget Next()
110         {
111             if (!valueToggle.isOn || m_Container == null)
112                 return base.Next();
113
114             var firstChild = m_Container.GetFirstItem();
115
116             if (firstChild == null)
117                 return base.Next();
118
119             return firstChild;
120         }
121     }
122 }