public void DrawText(SpriteBatch batch, SpriteFont font, string text, Rectangle dest, HorizontalAlignment horizontal, VerticalAlignment vertical, Color color) { if (text == "") return; if (font == null) { throw new NullReferenceException("font"); } text = Utility.StringReplaceTabs(text); string[] lines = Utility.StringToLines(text); ScreenText[] st = new ScreenText[lines.Length]; if (horizontal == HorizontalAlignment.Left) { for (int i = 0; i < lines.Length; i++) { st[i] = new ScreenText(); st[i].Position = new Vector2(dest.X, dest.Y + i * font.LineSpacing); st[i].Text = lines[i]; st[i].Color = color; } } else if (horizontal == HorizontalAlignment.Center) { for (int i = 0; i < lines.Length; i++) { Vector2 dim = font.MeasureString(lines[i]); st[i] = new ScreenText(); st[i].Position = new Vector2((dest.X + (dest.Width / 2)) - (int)(dim.X / 2), dest.Y + i * font.LineSpacing); st[i].Text = lines[i]; st[i].Color = color; } } else if (horizontal == HorizontalAlignment.Right) { for (int i = 0; i < lines.Length; i++) { Vector2 dim = font.MeasureString(lines[i]); st[i] = new ScreenText(); st[i].Position = new Vector2(dest.Right - (int)dim.X, dest.Y + i * font.LineSpacing); st[i].Text = lines[i]; st[i].Color = color; } } if (vertical == VerticalAlignment.Center) { for (int i = 0; i < lines.Length; i++) { Vector2 dim = font.MeasureString(lines[i]); st[i].Position.Y = dest.Y + (dest.Height / 2) - (lines.Length * font.LineSpacing / 2) + (i * font.LineSpacing); } } else if (vertical == VerticalAlignment.Bottom) { for (int i = 0; i < lines.Length; i++) { Vector2 dim = font.MeasureString(lines[i]); st[i].Position.Y = dest.Bottom - (lines.Length - i) * font.LineSpacing; } } for (int i = 0; i < st.Length; i++) { batch.DrawString(font, st[i].Text, st[i].Position, st[i].Color); } }