Tanoda
ColorPicker.cs
Go to the documentation of this file.
1using System;
2using Assets.HSVPicker;
3using UnityEngine;
4
5public class ColorPicker : MonoBehaviour
6{
7 private float _hue;
8 private float _saturation;
9 private float _brightness;
10
11 private float _red = 1;
12 private float _green;
13 private float _blue;
14
15 private float _alpha = 1;
16
17 [Header("Setup")] public ColorPickerSetup Setup;
18
19 [Header("Event")] public ColorChangedEvent onValueChanged = new ColorChangedEvent();
21
23 {
24 get => new Color(_red, _green, _blue, _alpha);
25 set
26 {
27 if (CurrentColor == value)
28 return;
29
30 _red = value.r;
31 _green = value.g;
32 _blue = value.b;
33 _alpha = value.a;
34
35 RGBChanged();
36
37 SendChangedEvent();
38 }
39 }
40
41 private void Start()
42 {
48
49 HandleHeaderSetting(Setup.ShowHeader);
50 UpdateColorToggleText();
51
52 RGBChanged();
53 SendChangedEvent();
54 }
55
56 public float H
57 {
58 get => _hue;
59 set
60 {
61 if (_hue == value)
62 return;
63
64 _hue = value;
65
66 HSVChanged();
67
68 SendChangedEvent();
69 }
70 }
71
72 public float S
73 {
74 get => _saturation;
75 set
76 {
77 if (_saturation == value)
78 return;
79
80 _saturation = value;
81
82 HSVChanged();
83
84 SendChangedEvent();
85 }
86 }
87
88 public float V
89 {
90 get => _brightness;
91 set
92 {
93 if (_brightness == value)
94 return;
95
96 _brightness = value;
97
98 HSVChanged();
99
100 SendChangedEvent();
101 }
102 }
103
104 public float R
105 {
106 get => _red;
107 set
108 {
109 if (_red == value)
110 return;
111
112 _red = value;
113
114 RGBChanged();
115
116 SendChangedEvent();
117 }
118 }
119
120 public float G
121 {
122 get => _green;
123 set
124 {
125 if (_green == value)
126 return;
127
128 _green = value;
129
130 RGBChanged();
131
132 SendChangedEvent();
133 }
134 }
135
136 public float B
137 {
138 get => _blue;
139 set
140 {
141 if (_blue == value)
142 return;
143
144 _blue = value;
145
146 RGBChanged();
147
148 SendChangedEvent();
149 }
150 }
151
152 private float A
153 {
154 get => _alpha;
155 set
156 {
157 if (_alpha == value)
158 return;
159
160 _alpha = value;
161
162 SendChangedEvent();
163 }
164 }
165
166 private void RGBChanged()
167 {
168 var color = HSVUtil.ConvertRgbToHsv(CurrentColor);
169
170 _hue = color.normalizedH;
171 _saturation = color.normalizedS;
172 _brightness = color.normalizedV;
173 }
174
175 private void HSVChanged()
176 {
177 var color = HSVUtil.ConvertHsvToRgb(_hue * 360, _saturation, _brightness, _alpha);
178
179 _red = color.r;
180 _green = color.g;
181 _blue = color.b;
182 }
183
184 private void SendChangedEvent()
185 {
187 onHSVChanged.Invoke(_hue, _saturation, _brightness);
188 }
189
190 public void AssignColor(ColorValues type, float value)
191 {
192 switch (type)
193 {
194 case ColorValues.R:
195 R = value;
196 break;
197 case ColorValues.G:
198 G = value;
199 break;
200 case ColorValues.B:
201 B = value;
202 break;
203 case ColorValues.A:
204 A = value;
205 break;
206 case ColorValues.Hue:
207 H = value;
208 break;
209 case ColorValues.Saturation:
210 S = value;
211 break;
212 case ColorValues.Value:
213 V = value;
214 break;
215 default:
216 break;
217 }
218 }
219
220 public void AssignColor(Color color)
221 {
222 CurrentColor = color;
223 }
224
225 public float GetValue(ColorValues type)
226 {
227 switch (type)
228 {
229 case ColorValues.R:
230 return R;
231 case ColorValues.G:
232 return G;
233 case ColorValues.B:
234 return B;
235 case ColorValues.A:
236 return A;
237 case ColorValues.Hue:
238 return H;
239 case ColorValues.Saturation:
240 return S;
241 case ColorValues.Value:
242 return V;
243 default:
244 throw new NotImplementedException("");
245 }
246 }
247
248 public void ToggleColorSliders()
249 {
254
255
256 UpdateColorToggleText();
257 }
258
259 void UpdateColorToggleText()
260 {
261 if (Setup.ShowRgb) Setup.SliderToggleButtonText.text = "RGB";
262
263 if (Setup.ShowHsv) Setup.SliderToggleButtonText.text = "HSV";
264 }
265
266 private void HandleHeaderSetting(ColorPickerSetup.ColorHeaderShowing setupShowHeader)
267 {
268 if (setupShowHeader == ColorPickerSetup.ColorHeaderShowing.Hide)
269 {
270 Setup.ColorHeader.Toggle(false);
271 return;
272 }
273
275
276 Setup.ColorPreview.Toggle(setupShowHeader != ColorPickerSetup.ColorHeaderShowing.ShowColorCode);
277 Setup.ColorCode.Toggle(setupShowHeader != ColorPickerSetup.ColorHeaderShowing.ShowColor);
278 }
279}
UnityEngine.Color Color
Definition: TestScript.cs:32
ColorPickerSetup Setup
Definition: ColorPicker.cs:17
ColorChangedEvent onValueChanged
Definition: ColorPicker.cs:19
Color CurrentColor
Definition: ColorPicker.cs:23
void AssignColor(Color color)
Definition: ColorPicker.cs:220
float GetValue(ColorValues type)
Definition: ColorPicker.cs:225
HSVChangedEvent onHSVChanged
Definition: ColorPicker.cs:20
void ToggleColorSliders()
Definition: ColorPicker.cs:248
void AssignColor(ColorValues type, float value)
Definition: ColorPicker.cs:190