using System; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; namespace Awperative; public static class Debug { /// /// True path of the log file Awperative dumps to. /// public static string LogFilePath { get; private set; } public static string LogFileName { get; private set; } = "Log"; /// /// Sets up the Awperative debugger and finds the log file. /// internal static void Initiate() { string directoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); if(directoryPath == null) throw new Exception("Failed to get directory path!"); LogFilePath = Path.Join(directoryPath, LogFileName + ".awlf"); if(!Directory.GetFiles(directoryPath).Contains(LogFileName + ".awlf")) { File.Create(LogFilePath).Close(); } } /// /// Writes the current message to the log file. /// /// Message to debug public static void LogAction(string __message) => LogGeneric(__message, "ACT", [], []); /// /// Writes the current message to the log file. With any given call sign. /// /// Message to debug /// Names of values to debug /// Values to debug public static void LogAction(string __message, string[] __parameters, string[] __values) => LogGeneric(__message, "ACT", __parameters, __values); /// /// Writes the current message to the log file if the condition is true. /// /// Condition to debug /// Message to debug public static void AssertAction(bool __condition, string __message) => AssertGeneric(__condition, __message, "ACT", [], []); /// /// Writes the current message to the log file. /// /// Message to debug public static void LogState(string __message) => LogGeneric(__message, "STA", [], []); /// /// Writes the current message to the log file. With any given call sign. /// /// Message to debug /// Names of values to debug /// Values to debug public static void LogState(string __message, string[] __parameters, string[] __values) => LogGeneric(__message, "STA", __parameters, __values); /// /// Writes the current message to the log file if the condition is true. /// /// Condition to debug /// Message to debug public static void AssertState(bool __condition, string __message) => AssertGeneric(__condition, __message, "STA", [], []); /// /// Writes the current message to the log file. /// /// Message to debug public static void LogValue(string __message) => LogGeneric(__message, "VAL", [], []); /// /// Writes the current message to the log file. With any given call sign. /// /// Message to debug /// Names of values to debug /// Values to debug public static void LogValue(string __message, string[] __parameters, string[] __values) => LogGeneric(__message, "VAL", __parameters, __values); /// /// Writes the current message to the log file if the condition is true. /// /// Condition to debug /// Message to debug public static void AssertValue(bool __condition, string __message) => AssertGeneric(__condition, __message, "VAL", [], []); /// /// Writes the current message to the log file. /// /// Message to debug public static void LogWarning(string __message) => LogGeneric(__message, "WAR", [], []); /// /// Writes the current message to the log file. With any given call sign. /// /// Message to debug /// Names of values to debug /// Values to debug public static void LogWarning(string __message, string[] __parameters, string[] __values) => LogGeneric(__message, "WAR", __parameters, __values); /// /// Writes the current message to the log file if the condition is true. /// /// Condition to debug /// Message to debug public static void AssertWarning(bool __condition, string __message) => AssertGeneric(__condition, __message, "WAR", [], []); /// /// Writes the current message to the log file. /// /// Message to debug public static void LogError(string __message) => LogGeneric(__message, "ERR", [], []); /// /// Writes the current message to the log file. With any given call sign. /// /// Message to debug /// Names of values to debug /// Values to debug public static void LogError(string __message, string[] __parameters, string[] __values) => LogGeneric(__message, "ERR", __parameters, __values); /// /// Writes the current message to the log file if the condition is true. /// /// Condition to debug /// Message to debug public static void AssertError(bool __condition, string __message) => AssertGeneric(__condition, __message, "ERR", [], []); /// /// Writes the current message to the log file. With any given call sign. /// /// Message to debug /// Message identifier /// Names of values to debug /// Values to debug public static void LogGeneric(string __message, string __callSign, string[] __parameters, string[] __values) { string output = "\n\n" + __callSign + "- \"" + __message + "\"\n STK-" + new StackTrace(); for (int i = 0; i < __parameters.Length || i < __values.Length; i++) output += "\n " + __parameters[i] + "- " + __values[i]; File.AppendAllText(LogFilePath, output); } /// /// Writes the current message to the log file if the condition is true. With any given call sign. /// /// Condition to debug /// Message to debug /// Message identifier /// Names of values to debug /// Values to debug public static void AssertGeneric(bool __condition, string __message, string __callSign, string[] __parameters, string[] __values) { if (!__condition) return; string output = "\n\n" + __callSign + "- \"" + __message + "\"\n STK-" + new StackTrace(); for (int i = 0; i < __parameters.Length || i < __values.Length; i++) output += "\n " + __parameters[i] + "- " + __values[i]; File.AppendAllText(LogFilePath, output); } }