public static Vector2 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)
{
int num1 = -1;
Vector2 vec = new Vector2((float)Main.mouseX, (float)Main.mouseY);
Vector2 vector2_1 = position;
Vector2 vector2_2 = vector2_1;
float x = font.MeasureString(" ").X;
Color color = baseColor;
float num2 = 0.0f;
for (int index1 = 0; index1 < snippets.Length; ++index1)
{
TextSnippet snippet = snippets[index1];
snippet.Update();
if (!ignoreColors)
{
color = snippet.GetVisibleColor();
}
float scale = snippet.Scale;
Vector2 size;
if (snippet.UniqueDraw(false, out size, spriteBatch, vector2_1, color, scale))
{
if (vec.Between(vector2_1, vector2_1 + size))
{
num1 = index1;
}
vector2_1.X += size.X * baseScale.X * scale;
vector2_2.X = Math.Max(vector2_2.X, vector2_1.X);
}
else
{
string[] strArray1 = snippet.Text.Split('\n');
foreach (string str in strArray1)
{
char[] chArray = new char[1] {
' '
};
string[] strArray2 = str.Split(chArray);
for (int index2 = 0; index2 < strArray2.Length; ++index2)
{
if (index2 != 0)
{
vector2_1.X += x * baseScale.X * scale;
}
if ((double)maxWidth > 0.0)
{
float num3 = font.MeasureString(strArray2[index2]).X *baseScale.X *scale;
if ((double)vector2_1.X - (double)position.X + (double)num3 > (double)maxWidth)
{
vector2_1.X = position.X;
vector2_1.Y += (float)font.get_LineSpacing() * num2 * baseScale.Y;
vector2_2.Y = Math.Max(vector2_2.Y, vector2_1.Y);
num2 = 0.0f;
}
}
if ((double)num2 < (double)scale)
{
num2 = scale;
}
DynamicSpriteFontExtensionMethods.DrawString(spriteBatch, font, strArray2[index2], vector2_1, color, rotation, origin, baseScale * snippet.Scale * scale, SpriteEffects.None, 0.0f);
Vector2 vector2_3 = font.MeasureString(strArray2[index2]);
if (vec.Between(vector2_1, vector2_1 + vector2_3))
{
num1 = index1;
}
vector2_1.X += vector2_3.X * baseScale.X * scale;
vector2_2.X = Math.Max(vector2_2.X, vector2_1.X);
}
if (strArray1.Length > 1)
{
vector2_1.Y += (float)font.get_LineSpacing() * num2 * baseScale.Y;
vector2_1.X = position.X;
vector2_2.Y = Math.Max(vector2_2.Y, vector2_1.Y);
num2 = 0.0f;
}
}
}
}
hoveredSnippet = num1;
return(vector2_2);
}