From 0bd11129b22c7adf7a9e5606aa26dd9dc554dbf3 Mon Sep 17 00:00:00 2001 From: Ben C Date: Thu, 24 Feb 2022 17:37:43 -0500 Subject: [PATCH] Added Options For Debugging --- NewHorizons/Main.cs | 78 +++++++++++++++++++++++++++++++++ NewHorizons/Utility/Logger.cs | 13 +++++- NewHorizons/default-config.json | 11 ++++- 3 files changed, 99 insertions(+), 3 deletions(-) diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index 287ee143..a863b25d 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -18,9 +18,11 @@ using OWML.Common; using OWML.ModHelper; using OWML.Utils; using System; +using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; +using OWML.Common.Menus; using UnityEngine; using UnityEngine.SceneManagement; using Logger = NewHorizons.Utility.Logger; @@ -32,10 +34,14 @@ namespace NewHorizons public static AssetBundle ShaderBundle; public static Main Instance { get; private set; } + public static bool Debug; + private static IModButton _reloadButton; + public static Dictionary SystemDict = new Dictionary(); public static Dictionary> BodyDict = new Dictionary>(); public static List NextPassBodies = new List(); public static Dictionary AssetBundles = new Dictionary(); + public static List MountedAddons = new List(); public static float FurthestOrbit { get; set; } = 50000f; public StarLightController StarLightController { get; private set; } @@ -45,6 +51,7 @@ namespace NewHorizons public string CurrentStarSystem { get { return Instance._currentStarSystem; } } private bool _isChangingStarSystem = false; + private bool _firstLoad = true; public bool IsWarping { get; private set; } = false; public bool WearingSuit { get; private set; } = false; @@ -57,10 +64,35 @@ namespace NewHorizons return new NewHorizonsApi(); } + public override void Configure(IModConfig config) + { + Debug = config.GetSettingsValue("Debug"); + UpdateReloadButton(); + string logLevel = config.GetSettingsValue("LogLevel"); + Logger.LogType logType; + switch (logLevel) + { + case "Info": + logType = Logger.LogType.Log; + break; + case "Warning": + logType = Logger.LogType.Warning; + break; + case "Critical": + logType = Logger.LogType.Error; + break; + default: + logType = Logger.LogType.Error; + break; + } + Logger.UpdateLogLevel(logType); + } + public void Start() { SceneManager.sceneLoaded += OnSceneLoaded; Instance = this; + Logger.LogWarning(MountedAddons.ToString()); GlobalMessenger.AddListener("PlayerDeath", OnDeath); ShaderBundle = Main.Instance.ModHelper.Assets.LoadBundle("AssetBundle/shader"); BodyDict["SolarSystem"] = new List(); @@ -83,7 +115,49 @@ namespace NewHorizons } Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => OnSceneLoaded(SceneManager.GetActiveScene(), LoadSceneMode.Single)); + Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => _firstLoad = false); + Instance.ModHelper.Menus.PauseMenu.OnInit += InitializePauseMenu; } + + #region Reloading + private void InitializePauseMenu() + { + _reloadButton = ModHelper.Menus.PauseMenu.OptionsButton.Duplicate("RELOAD CONFIGS"); + _reloadButton.OnClick += ReloadConfigs; + UpdateReloadButton(); + } + + private void UpdateReloadButton() + { + if (_reloadButton != null) + { + if (Debug) _reloadButton.Show(); + else _reloadButton.Hide(); + } + } + + private void ReloadConfigs() + { + BodyDict["SolarSystem"] = new List(); + SystemDict["SolarSystem"] = new NewHorizonsSystem("SolarSystem", new StarSystemConfig(null), this); + + Logger.Log("Begin reload of config files...", Logger.LogType.Log); + + try + { + foreach (IModBehaviour mountedAddon in MountedAddons) + { + LoadConfigs(mountedAddon); + } + } + catch (Exception) + { + Logger.LogWarning("Error While Reloading"); + } + + ChangeCurrentStarSystem(_currentStarSystem); + } + #endregion public void OnDestroy() { @@ -350,6 +424,10 @@ namespace NewHorizons #region Load public void LoadConfigs(IModBehaviour mod) { + if (_firstLoad) + { + MountedAddons.Add(mod); + } var folder = mod.ModHelper.Manifest.ModFolderPath; if(Directory.Exists(folder + "planets")) { diff --git a/NewHorizons/Utility/Logger.cs b/NewHorizons/Utility/Logger.cs index c7925303..06a6d91b 100644 --- a/NewHorizons/Utility/Logger.cs +++ b/NewHorizons/Utility/Logger.cs @@ -7,6 +7,14 @@ namespace NewHorizons.Utility { public static class Logger { + + private static LogType _logLevel = LogType.Error; + + public static void UpdateLogLevel(LogType newLevel) + { + _logLevel = newLevel; + } + public static void LogProperties(UnityEngine.Object obj) { foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(obj)) @@ -34,6 +42,7 @@ namespace NewHorizons.Utility public static void Log(string text, LogType type) { + if ((int) type < (int) _logLevel) return; Main.Instance.ModHelper.Console.WriteLine(Enum.GetName(typeof(LogType), type) + " : " + text, LogTypeToMessageType(type)); } @@ -51,10 +60,10 @@ namespace NewHorizons.Utility } public enum LogType { + Todo, Log, - Error, Warning, - Todo + Error, } private static MessageType LogTypeToMessageType(LogType t) { diff --git a/NewHorizons/default-config.json b/NewHorizons/default-config.json index d0637618..4c1a3ebd 100644 --- a/NewHorizons/default-config.json +++ b/NewHorizons/default-config.json @@ -1,3 +1,12 @@ { - "enabled": true + "enabled": true, + "settings": { + "Debug": false, + "LogLevel": { + "type": "selector", + "value": "Critical", + "options": ["Info", "Warning", "Critical"], + "title": "Log Type" + } + } } \ No newline at end of file