Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
GradientColor.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using UnityEngine;
3using UnityEngine.UI;
4
5[AddComponentMenu("UI/ToJ Effects/Gradient Color", 1)]
6[RequireComponent(typeof(Text))]
7public class GradientColor : BaseMeshEffect
8{
9 public enum GradientMode
10 {
11 Local,
14 }
15
17 {
20 }
21
22 public enum ColorMode
23 {
27 }
28
29 [SerializeField]
31
32 [SerializeField]
34
35 [SerializeField]
37
38 [SerializeField]
39 public Color m_FirstColor = Color.white;
40
41 [SerializeField]
42 public Color m_SecondColor = Color.black;
43
44 [SerializeField]
45 private bool m_UseGraphicAlpha = true;
46
47 private List<UIVertex> m_Verts = new List<UIVertex>();
48
50 {
51 get
52 {
53 return m_GradientMode;
54 }
55 set
56 {
57 m_GradientMode = value;
58 if (base.graphic != null)
59 {
60 base.graphic.SetVerticesDirty();
61 }
62 }
63 }
64
66 {
67 get
68 {
70 }
71 set
72 {
73 m_GradientDirection = value;
74 if (base.graphic != null)
75 {
76 base.graphic.SetVerticesDirty();
77 }
78 }
79 }
80
82 {
83 get
84 {
85 return m_ColorMode;
86 }
87 set
88 {
89 m_ColorMode = value;
90 if (base.graphic != null)
91 {
92 base.graphic.SetVerticesDirty();
93 }
94 }
95 }
96
98 {
99 get
100 {
101 return m_FirstColor;
102 }
103 set
104 {
105 m_FirstColor = value;
106 if (base.graphic != null)
107 {
108 base.graphic.SetVerticesDirty();
109 }
110 }
111 }
112
114 {
115 get
116 {
117 return m_SecondColor;
118 }
119 set
120 {
121 m_SecondColor = value;
122 if (base.graphic != null)
123 {
124 base.graphic.SetVerticesDirty();
125 }
126 }
127 }
128
129 public bool useGraphicAlpha
130 {
131 get
132 {
133 return m_UseGraphicAlpha;
134 }
135 set
136 {
137 m_UseGraphicAlpha = value;
138 if (base.graphic != null)
139 {
140 base.graphic.SetVerticesDirty();
141 }
142 }
143 }
144
145 protected GradientColor()
146 {
147 }
148
149 public override void ModifyMesh(VertexHelper vh)
150 {
151 if (!IsActive())
152 {
153 return;
154 }
155 vh.GetUIVertexStream(m_Verts);
156 if (m_Verts.Count == 0)
157 {
158 return;
159 }
160 if (gradientMode == GradientMode.GlobalTextArea || gradientMode == GradientMode.GlobalFullRect)
161 {
162 Vector2 zero = Vector2.zero;
163 Vector2 zero2 = Vector2.zero;
164 if (gradientMode == GradientMode.GlobalFullRect)
165 {
166 Rect rect = GetComponent<RectTransform>().rect;
167 zero = new Vector2(rect.xMin, rect.yMax);
168 zero2 = new Vector2(rect.xMax, rect.yMin);
169 }
170 else
171 {
172 zero = m_Verts[0].position;
173 zero2 = m_Verts[m_Verts.Count - 1].position;
174 for (int i = 0; i < m_Verts.Count; i++)
175 {
176 if (m_Verts[i].position.x < zero.x)
177 {
178 zero.x = m_Verts[i].position.x;
179 }
180 if (m_Verts[i].position.y > zero.y)
181 {
182 zero.y = m_Verts[i].position.y;
183 }
184 if (m_Verts[i].position.x > zero2.x)
185 {
186 zero2.x = m_Verts[i].position.x;
187 }
188 if (m_Verts[i].position.y < zero2.y)
189 {
190 zero2.y = m_Verts[i].position.y;
191 }
192 }
193 }
194 float num = zero.y - zero2.y;
195 float num2 = zero2.x - zero.x;
196 for (int j = 0; j < m_Verts.Count; j++)
197 {
198 UIVertex value = m_Verts[j];
199 if (gradientDirection == GradientDirection.Vertical)
200 {
201 Color newColor = Color.Lerp(firstColor, secondColor, (zero.y - value.position.y) / num);
202 value.color = CalculateColor(value.color, newColor, colorMode);
203 }
204 else
205 {
206 Color newColor2 = Color.Lerp(firstColor, secondColor, (value.position.x - zero.x) / num2);
207 value.color = CalculateColor(value.color, newColor2, colorMode);
208 }
209 if (useGraphicAlpha)
210 {
211 value.color.a = (byte)(value.color.a * m_Verts[j].color.a / 255);
212 }
213 m_Verts[j] = value;
214 }
215 }
216 else
217 {
218 for (int k = 0; k < m_Verts.Count; k++)
219 {
220 UIVertex value2 = m_Verts[k];
221 if (gradientDirection == GradientDirection.Vertical)
222 {
223 if (k % 6 == 0 || k % 6 == 1 || k % 6 == 5)
224 {
225 Color newColor3 = firstColor;
226 value2.color = CalculateColor(value2.color, newColor3, colorMode);
227 }
228 else
229 {
230 Color newColor4 = secondColor;
231 value2.color = CalculateColor(value2.color, newColor4, colorMode);
232 }
233 }
234 else if (k % 6 == 0 || k % 6 == 4 || k % 6 == 5)
235 {
236 Color newColor5 = firstColor;
237 value2.color = CalculateColor(value2.color, newColor5, colorMode);
238 }
239 else
240 {
241 Color newColor6 = secondColor;
242 value2.color = CalculateColor(value2.color, newColor6, colorMode);
243 }
244 if (useGraphicAlpha)
245 {
246 value2.color.a = (byte)(value2.color.a * m_Verts[k].color.a / 255);
247 }
248 m_Verts[k] = value2;
249 }
250 }
251 vh.Clear();
252 vh.AddUIVertexTriangleStream(m_Verts);
253 }
254
255 private Color CalculateColor(Color initialColor, Color newColor, ColorMode colorMode)
256 {
257 return colorMode switch
258 {
259 ColorMode.Override => newColor,
260 ColorMode.Additive => initialColor + newColor,
261 ColorMode.Multiply => initialColor * newColor,
262 _ => newColor,
263 };
264 }
265}
override void ModifyMesh(VertexHelper vh)
Color CalculateColor(Color initialColor, Color newColor, ColorMode colorMode)
ColorMode colorMode
ColorMode m_ColorMode
GradientMode gradientMode
GradientDirection m_GradientDirection
List< UIVertex > m_Verts
GradientMode m_GradientMode
bool m_UseGraphicAlpha
GradientDirection gradientDirection
Color m_FirstColor
Color m_SecondColor