using System; using System.IO; using TMPro; using UnityEngine; public class DRHDebugManager : MonoBehaviour { public bool DebugModeEnabled; [SerializeField] private GameObject DebugCanvas; [SerializeField] private TextMeshProUGUI DebugConsoleOutput; [SerializeField] private GameObject SpeedUpIcon; private string output; [TextArea(10, 10)] public string controls; [SerializeField] private TextMeshProUGUI DebugFPSCounter; [SerializeField] private AudioSource debugSource; public static DRHDebugManager instance; private bool hasToggledMenu; [SerializeField] private AudioClip sfx_fiddlesticks; private string lastStackTrace; private void Awake() { instance = this; UnityEngine.Object.DontDestroyOnLoad(base.gameObject); } private void Update() { if (DebugModeEnabled) { DebugCanvas.SetActive(value: true); DebugFPSCounter.text = Mathf.Round(1f / Time.unscaledDeltaTime).ToString(); } else { DebugCanvas.SetActive(value: false); } if (!Input.anyKey) { hasToggledMenu = false; } if (Input.GetKey(KeyCode.B) && Input.GetKey(KeyCode.D) && Input.GetKey(KeyCode.Return) && !hasToggledMenu) { hasToggledMenu = true; DebugModeEnabled = !DebugModeEnabled; if (DebugModeEnabled) { output = ""; DebugConsoleOutput.text = ""; Debug.Log("DEBUG FREAKING MODE ENABLED!! WOAHH!!"); } } if (DebugModeEnabled && Input.GetKey(KeyCode.B) && Input.GetKey(KeyCode.D) && Input.GetKey(KeyCode.P) && !hasToggledMenu) { hasToggledMenu = true; DebugConsoleOutput.enabled = !DebugConsoleOutput.enabled; if (DebugModeEnabled) { Debug.Log("Toggled output visibility"); } } if (DebugModeEnabled && Input.GetKey(KeyCode.B) && Input.GetKey(KeyCode.D) && Input.GetKey(KeyCode.G) && !hasToggledMenu) { hasToggledMenu = true; if (Time.timeScale != 1f) { Time.timeScale = 1f; SpeedUpIcon.SetActive(value: false); } else { Time.timeScale = 100f; SpeedUpIcon.SetActive(value: true); } } if (DebugModeEnabled && Input.GetKey(KeyCode.B) && Input.GetKey(KeyCode.D) && Input.GetKey(KeyCode.H) && !hasToggledMenu) { hasToggledMenu = true; if (Time.timeScale != 1f) { Time.timeScale = 1f; SpeedUpIcon.SetActive(value: false); } else { Time.timeScale = 0.1f; SpeedUpIcon.SetActive(value: true); } } if (Input.GetKeyDown(KeyCode.F8) && !string.IsNullOrEmpty(lastStackTrace)) { SaveStackTraceToFile(); } } private void OnEnable() { Application.logMessageReceived += HandleLog; } private void OnDisable() { Application.logMessageReceived -= HandleLog; } private void HandleLog(string logString, string stackTrace, LogType type) { switch (type) { case LogType.Error: case LogType.Assert: case LogType.Exception: PlayErrorSound(); hasToggledMenu = true; DebugModeEnabled = true; output = output + "\n" + logString + "\nOh fiddlesticks, what now?\nPress F8 to print stackTrace to .txt"; lastStackTrace = "Main Issue\n" + logString + "\nStack Trace\n" + stackTrace; break; case LogType.Warning: output = output + "\n" + logString + "\n"; break; case LogType.Log: output = output + "\n" + logString + ""; break; } if (DebugModeEnabled) { DebugConsoleOutput.text = output + controls; } else { DebugConsoleOutput.text = controls; } } private void PlayErrorSound() { if (!debugSource.isPlaying) { debugSource.PlayOneShot(sfx_fiddlesticks); } } private void SaveStackTraceToFile() { string text = DateTime.Now.ToString("hhmm"); string text2 = Path.Combine(Application.persistentDataPath, text + "stacktrace.txt"); File.WriteAllText(text2, lastStackTrace); Application.OpenURL("file://" + text2); Debug.Log("Stack trace saved to " + text2 + ""); } }