namespace DTLib.Console; public static class ColoredConsole { public static int Width => System.Console.WindowWidth; public static int Height => System.Console.WindowHeight; [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Fg(ConsoleColor color) => System.Console.ForegroundColor = color; [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Bg(ConsoleColor color) => System.Console.BackgroundColor = color; [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void ResetColor() => System.Console.ResetColor(); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Clear() { ResetColor(); System.Console.Clear(); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Write(char c) => System.Console.Write(c); public static void Write(string msg, ConsoleColor? fg = null, ConsoleColor? bg = null) { if(fg != null) Fg(fg.Value); if(bg != null) Bg(bg.Value); #if NETSTANDARD2_0 var chars = msg.ToCharArray(); #else var chars = msg.AsSpan(); #endif for (int i = 0; i < chars.Length; ++i) { Write(chars[i]); } } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void WriteLine() => Write('\n'); public static void WriteLine(string msg, ConsoleColor? fg = null, ConsoleColor? bg = null) { Write(msg, fg, bg); WriteLine(); } public static string? ReadLine(string query, ConsoleColor? fg = null, ConsoleColor? bg = null) { Write(query, fg, bg); Write(':'); Write(' '); return System.Console.ReadLine(); } public static void WriteHLine(char c, ConsoleColor? fg = null, ConsoleColor? bg = null) { WriteLine(c.Multiply(Width - 1), fg, bg); } public static void WriteTitle(string title, char spacing = '-', string left_framing = "[", string right_framing = "]", ConsoleColor? fg = null, ConsoleColor? bg = null) { int both_spacing_length = Width - title.Length - left_framing.Length - right_framing.Length - 1; int left_spacing_length = both_spacing_length / 2; int right_spacing_length = left_spacing_length + both_spacing_length % 2; var b = new StringBuilder(); if(left_spacing_length > 0) b.Append(spacing.Multiply(left_spacing_length)); b.Append(left_framing); b.Append(title); b.Append(right_framing); if(right_spacing_length > 0) b.Append(spacing.Multiply(right_spacing_length)); WriteLine(b.ToString(), fg, bg); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void WriteCentred(string title, ConsoleColor? fg = null, ConsoleColor? bg = null) { WriteTitle(title, ' ', "", "", fg, bg); } }