Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ DrawColorCodedString() [2/2]

static Vector2 Terraria.UI.Chat.ChatManager.DrawColorCodedString ( SpriteBatch spriteBatch,
DynamicSpriteFont font,
TextSnippet[] snippets,
Vector2 position,
Color baseColor,
float rotation,
Vector2 origin,
Vector2 baseScale,
out int hoveredSnippet,
float maxWidth,
bool ignoreColors = false )
inlinestatic

Definition at line 196 of file ChatManager.cs.

197 {
198 int num = -1;
199 Vector2 vec = new Vector2(Main.mouseX, Main.mouseY);
200 Vector2 vector = position;
201 Vector2 result = vector;
202 float x = font.MeasureString(" ").X;
203 Color color = baseColor;
204 float num2 = 1f;
205 float num3 = 0f;
206 for (int i = 0; i < snippets.Length; i++)
207 {
208 TextSnippet textSnippet = snippets[i];
209 textSnippet.Update();
210 if (!ignoreColors)
211 {
212 color = textSnippet.GetVisibleColor();
213 }
214 num2 = textSnippet.Scale;
215 if (textSnippet.UniqueDraw(justCheckingString: false, out var size, spriteBatch, vector, color, num2))
216 {
217 if (vec.Between(vector, vector + size))
218 {
219 num = i;
220 }
221 vector.X += size.X * baseScale.X * num2;
222 result.X = Math.Max(result.X, vector.X);
223 continue;
224 }
225 string[] array = textSnippet.Text.Split('\n');
226 array = Regex.Split(textSnippet.Text, "(\n)");
227 bool flag = true;
228 foreach (string text in array)
229 {
230 string[] array2 = Regex.Split(text, "( )");
231 array2 = text.Split(' ');
232 if (text == "\n")
233 {
234 vector.Y += (float)font.LineSpacing * num3 * baseScale.Y;
235 vector.X = position.X;
236 result.Y = Math.Max(result.Y, vector.Y);
237 num3 = 0f;
238 flag = false;
239 continue;
240 }
241 for (int k = 0; k < array2.Length; k++)
242 {
243 if (k != 0)
244 {
245 vector.X += x * baseScale.X * num2;
246 }
247 if (maxWidth > 0f)
248 {
249 float num4 = font.MeasureString(array2[k]).X * baseScale.X * num2;
250 if (vector.X - position.X + num4 > maxWidth)
251 {
252 vector.X = position.X;
253 vector.Y += (float)font.LineSpacing * num3 * baseScale.Y;
254 result.Y = Math.Max(result.Y, vector.Y);
255 num3 = 0f;
256 }
257 }
258 if (num3 < num2)
259 {
260 num3 = num2;
261 }
262 DynamicSpriteFontExtensionMethods.DrawString(spriteBatch, font, array2[k], vector, color, rotation, origin, baseScale * textSnippet.Scale * num2, SpriteEffects.None, 0f);
263 Vector2 vector2 = font.MeasureString(array2[k]);
264 if (vec.Between(vector, vector + vector2))
265 {
266 num = i;
267 }
268 vector.X += vector2.X * baseScale.X * num2;
269 result.X = Math.Max(result.X, vector.X);
270 }
271 if (array.Length > 1 && flag)
272 {
273 vector.Y += (float)font.LineSpacing * num3 * baseScale.Y;
274 vector.X = position.X;
275 result.Y = Math.Max(result.Y, vector.Y);
276 num3 = 0f;
277 }
278 flag = true;
279 }
280 }
281 hoveredSnippet = num;
282 return result;
283 }
static void DrawString(this SpriteBatch spriteBatch, DynamicSpriteFont spriteFont, string text, Vector2 position, Color color)
static byte Max(byte val1, byte val2)
Definition Math.cs:738
static string[] Split(string input, string pattern)
Definition Regex.cs:656

References System.array, ReLogic.Graphics.DynamicSpriteFontExtensionMethods.DrawString(), System.Text.RegularExpressions.i, System.Math.Max(), Terraria.Main.mouseX, Terraria.Main.mouseY, System.Text.RegularExpressions.Regex.Split(), System.text, Microsoft.Xna.Framework.Graphics.Vector2, Microsoft.Xna.Framework.Vector2.X, and Microsoft.Xna.Framework.Vector2.Y.

Referenced by Terraria.GameContent.Animations.Segments.LocalizedTextSegment.Draw(), Terraria.UI.Chat.ChatManager.DrawColorCodedStringShadow(), Terraria.UI.Chat.ChatManager.DrawColorCodedStringShadow(), Terraria.UI.Chat.ChatManager.DrawColorCodedStringWithShadow(), Terraria.UI.Chat.ChatManager.DrawColorCodedStringWithShadow(), Terraria.UI.Chat.ChatManager.DrawColorCodedStringWithShadow(), Terraria.Main.DrawInterface_14_EntityHealthBars(), Terraria.Main.DrawNetplayStatusText(), Terraria.Main.DrawNPCChatButtons(), and Terraria.GameContent.UI.Elements.UIText.DrawSelf().