private static void ProcessModeCommand(Queue <string> arguments) { if (arguments.Count == 0) { if (CurrentMode == DebugModeFlags.None) { Info("No Debug Modes are set"); return; } var modes = new List <string>(); foreach (var flag in Enum.GetNames <DebugModeFlags>()) { var value = Enum.Parse <DebugModeFlags>(flag); if (value != DebugModeFlags.None && CurrentMode.HasFlag(value)) { modes.Add(flag); } } Info($"Current Debug Modes: {string.Join(", ", modes)}"); return; } var mode = arguments.Dequeue(); bool enable = true; if (mode.StartsWith('~')) { enable = false; mode = mode.Substring(1); } var invariantMode = mode.ToLowerInvariant(); switch (invariantMode) { case "off": case "0": case "disabled": case "disable": case "none": if (enable) { CurrentMode = DebugModeFlags.None; Info($"Debug Mode set to '{DebugModeFlags.None}'"); } else { foreach (var value in Enum.GetValues <DebugModeFlags>()) { CurrentMode |= value; } Info("All Debug Mode flags enabled"); } break; default: foreach (var flag in Enum.GetNames <DebugModeFlags>()) { if (invariantMode == flag.ToLowerInvariant()) { var value = Enum.Parse <DebugModeFlags>(flag); if (enable) { if (CurrentMode.HasFlag(value)) { Warning($"Debug Mode flag is already set: '{flag}'"); } else { CurrentMode |= value; Info($"Debug Mode flag set: '{flag}'"); } } else { if (!CurrentMode.HasFlag(value)) { Warning($"Debug Mode flag is not set: '{flag}'"); } else { CurrentMode &= ~value; Info($"Debug Mode flag unset: '{flag}'"); } } return; } } Error($"Unknown debug mode: '{mode}'"); break; } }
internal static void ToggleMode(DebugModeFlags mode) => CurrentMode ^= mode;
internal static void EnableMode(DebugModeFlags mode) => CurrentMode |= mode;
internal static void DisableMode(DebugModeFlags mode) => CurrentMode &= ~mode;
internal static bool IsModeEnabled(DebugModeFlags mode) => (CurrentMode & mode) == mode;