using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System.Collections.Generic; namespace SemiColinGames { static class Debug { struct DebugRect { public Rectangle rect; public Color color; public DebugRect(Rectangle rect, Color color) { this.rect = rect; this.color = color; } } public static bool Enabled; static List rects = new List(); static Texture2D whiteTexture; static string toast = null; public static void Toast(string s) { toast = s; } public static void WriteLine(string s) { System.Diagnostics.Debug.WriteLine(s); } public static void WriteLine(string s, params object[] args) { System.Diagnostics.Debug.WriteLine(s, args); } public static void Initialize(GraphicsDevice graphics) { whiteTexture = new Texture2D(graphics, 1, 1); whiteTexture.SetData(new Color[] { Color.White }); } public static void Clear() { rects.Clear(); } public static void AddRect(Rectangle rect, Color color) { rects.Add(new DebugRect(rect, color)); } public static void DrawToast(SpriteBatch spriteBatch, SpriteFont font) { if (toast == null) { return; } spriteBatch.DrawString(font, toast, new Vector2(10, 40), Color.Teal); toast = null; } public static void Draw(SpriteBatch spriteBatch, Camera camera) { if (!Enabled) { return; } foreach (var debugRect in rects) { var rect = debugRect.rect; rect.Offset(-camera.Left, 0); var color = debugRect.color; // top side spriteBatch.Draw( whiteTexture, new Rectangle(rect.Left, rect.Top, rect.Width, 1), color); // bottom side spriteBatch.Draw( whiteTexture, new Rectangle(rect.Left, rect.Bottom - 1, rect.Width, 1), color); // left side spriteBatch.Draw( whiteTexture, new Rectangle(rect.Left, rect.Top, 1, rect.Height), color); // right side spriteBatch.Draw( whiteTexture, new Rectangle(rect.Right - 1, rect.Top, 1, rect.Height), color); } } } }