Tanoda
ColorPickerControl.cs
Go to the documentation of this file.
1
3using System.Collections.Generic;
4
6{
7 [ExecuteInEditMode]
8 public class ColorPickerControl : MonoBehaviour
9 {
10 private float _hue = 0;
11 private float _saturation = 0;
12 private float _brightness = 0;
13
14 private float _red = 0;
15 private float _green = 0;
16 private float _blue = 0;
17
18 private float _alpha = 1;
19
22
23 [SerializeField]
24 bool hsvSlidersOn = true;
25
26 [SerializeField]
27 List<GameObject> hsvSliders = new List<GameObject>();
28
29 [SerializeField]
30 bool rgbSlidersOn = true;
31
32 [SerializeField]
33 List<GameObject> rgbSliders = new List<GameObject>();
34
35 [SerializeField]
36 GameObject alphaSlider = null;
37
38 public void SetHSVSlidersOn(bool value)
39 {
40 hsvSlidersOn = value;
41
42 foreach (var item in hsvSliders)
43 item.SetActive(value);
44
45 if (alphaSlider)
46 alphaSlider.SetActive(hsvSlidersOn || rgbSlidersOn);
47 }
48
49 public void SetRGBSlidersOn(bool value)
50 {
51 rgbSlidersOn = value;
52 foreach (var item in rgbSliders)
53 item.SetActive(value);
54
55 if (alphaSlider)
56 alphaSlider.SetActive(hsvSlidersOn || rgbSlidersOn);
57 }
58
59
60 void Update()
61 {
62#if UNITY_EDITOR
63 SetHSVSlidersOn(hsvSlidersOn);
64 SetRGBSlidersOn(rgbSlidersOn);
65#endif
66 }
67
69 {
70 get
71 {
72 return new Color(_red, _green, _blue, _alpha);
73 }
74 set
75 {
76 if (CurrentColor == value)
77 return;
78
79 _red = value.r;
80 _green = value.g;
81 _blue = value.b;
82 _alpha = value.a;
83
84 RGBChanged();
85
86 SendChangedEvent();
87 }
88 }
89
90 private void Start()
91 {
92 SendChangedEvent();
93 }
94
95 public float H
96 {
97 get
98 {
99 return _hue;
100 }
101 set
102 {
103 if (_hue == value)
104 return;
105
106 _hue = value;
107
108 HSVChanged();
109
110 SendChangedEvent();
111 }
112 }
113
114 public float S
115 {
116 get
117 {
118 return _saturation;
119 }
120 set
121 {
122 if (_saturation == value)
123 return;
124
125 _saturation = value;
126
127 HSVChanged();
128
129 SendChangedEvent();
130 }
131 }
132
133 public float V
134 {
135 get
136 {
137 return _brightness;
138 }
139 set
140 {
141 if (_brightness == value)
142 return;
143
144 _brightness = value;
145
146 HSVChanged();
147
148 SendChangedEvent();
149 }
150 }
151
152 public float R
153 {
154 get
155 {
156 return _red;
157 }
158 set
159 {
160 if (_red == value)
161 return;
162
163 _red = value;
164
165 RGBChanged();
166
167 SendChangedEvent();
168 }
169 }
170
171 public float G
172 {
173 get
174 {
175 return _green;
176 }
177 set
178 {
179 if (_green == value)
180 return;
181
182 _green = value;
183
184 RGBChanged();
185
186 SendChangedEvent();
187 }
188 }
189
190 public float B
191 {
192 get
193 {
194 return _blue;
195 }
196 set
197 {
198 if (_blue == value)
199 return;
200
201 _blue = value;
202
203 RGBChanged();
204
205 SendChangedEvent();
206 }
207 }
208
209 private float A
210 {
211 get
212 {
213 return _alpha;
214 }
215 set
216 {
217 if (_alpha == value)
218 return;
219
220 _alpha = value;
221
222 SendChangedEvent();
223 }
224 }
225
226 private void RGBChanged()
227 {
228 HsvColor color = HSVUtil.ConvertRgbToHsv(CurrentColor);
229
230 _hue = color.normalizedH;
231 _saturation = color.normalizedS;
232 _brightness = color.normalizedV;
233 }
234
235 private void HSVChanged()
236 {
237 Color color = HSVUtil.ConvertHsvToRgb(_hue * 360, _saturation, _brightness, _alpha);
238
239 _red = color.r;
240 _green = color.g;
241 _blue = color.b;
242 }
243
244 private void SendChangedEvent()
245 {
247 onHSVChanged.Invoke(_hue, _saturation, _brightness);
248 }
249
250 public void AssignColor(ColorValues type, float value)
251 {
252 switch (type)
253 {
254 case ColorValues.R:
255 R = value;
256 break;
257 case ColorValues.G:
258 G = value;
259 break;
260 case ColorValues.B:
261 B = value;
262 break;
263 case ColorValues.A:
264 A = value;
265 break;
266 case ColorValues.Hue:
267 H = value;
268 break;
269 case ColorValues.Saturation:
270 S = value;
271 break;
272 case ColorValues.Value:
273 V = value;
274 break;
275 default:
276 break;
277 }
278 }
279
280 public float GetValue(ColorValues type)
281 {
282 switch (type)
283 {
284 case ColorValues.R:
285 return R;
286 case ColorValues.G:
287 return G;
288 case ColorValues.B:
289 return B;
290 case ColorValues.A:
291 return A;
292 case ColorValues.Hue:
293 return H;
294 case ColorValues.Saturation:
295 return S;
296 case ColorValues.Value:
297 return V;
298 default:
299 throw new System.NotImplementedException("");
300 }
301 }
302 }
303}
UnityEngine.Color Color
Definition: TestScript.cs:32
float normalizedH
Definition: HSVUtil.cs:157
float normalizedS
Definition: HSVUtil.cs:170
float normalizedV
Definition: HSVUtil.cs:182