From fa5fa9572a0ac5bd68b46818bc21072cb21a0e2e Mon Sep 17 00:00:00 2001 From: "Nick J. Connors" Date: Mon, 7 Feb 2022 21:28:52 -0500 Subject: [PATCH] Reorganization --- NewHorizons/External/ShipLogModule.cs | 20 +-- NewHorizons/Main.cs | 1 + NewHorizons/Tools/Patches.cs | 208 -------------------------- NewHorizons/Tools/ShipLogPatches.cs | 201 +++++++++++++++++++++++++ NewHorizons/Tools/WarpDrivePatches.cs | 2 - 5 files changed, 212 insertions(+), 220 deletions(-) create mode 100644 NewHorizons/Tools/ShipLogPatches.cs diff --git a/NewHorizons/External/ShipLogModule.cs b/NewHorizons/External/ShipLogModule.cs index 8883d8f5..14ee2cdd 100644 --- a/NewHorizons/External/ShipLogModule.cs +++ b/NewHorizons/External/ShipLogModule.cs @@ -22,6 +22,16 @@ namespace NewHorizons.External public ShipLogDetailInfo[] details; } + public class ShipLogDetailInfo + { + public string revealedSprite; + public string outlineSprite; + public float rotation = 0f; + public bool invisibleWhenHidden; + public MVector2 position; + public MVector2 scale; + } + public class CuriosityColorInfo { public string id; @@ -34,15 +44,5 @@ namespace NewHorizons.External public string id; public MVector2 position; } - - public class ShipLogDetailInfo - { - public string revealedSprite; - public string outlineSprite; - public float rotation = 0f; - public bool invisibleWhenHidden; - public MVector2 position; - public MVector2 scale; - } } } \ No newline at end of file diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index af99a57d..e9f6274f 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -65,6 +65,7 @@ namespace NewHorizons Tools.Patches.Apply(); Tools.WarpDrivePatches.Apply(); Tools.OWCameraFix.Apply(); + Tools.ShipLogPatches.Apply(); Logger.Log("Begin load of config files...", Logger.LogType.Log); diff --git a/NewHorizons/Tools/Patches.cs b/NewHorizons/Tools/Patches.cs index 91be6c27..7d9f5007 100644 --- a/NewHorizons/Tools/Patches.cs +++ b/NewHorizons/Tools/Patches.cs @@ -53,38 +53,15 @@ namespace NewHorizons.Tools Main.Instance.ModHelper.HarmonyHelper.AddPrefix(playerDataKnowsMultipleFrequencies, typeof(Patches), nameof(Patches.OnPlayerDataKnowsMultipleFrequencies)); var playerDataResetGame = typeof(PlayerData).GetMethod("ResetGame"); Main.Instance.ModHelper.HarmonyHelper.AddPostfix(playerDataResetGame, typeof(Patches), nameof(Patches.OnPlayerDataResetGame)); - var playerDataGetNewlyRevealedFactIDs = typeof(PlayerData).GetMethod("GetNewlyRevealedFactIDs"); - Main.Instance.ModHelper.HarmonyHelper.AddPostfix(playerDataGetNewlyRevealedFactIDs, typeof(Patches), nameof(Patches.OnPlayerDataGetNewlyRevealedFactIDsComplete)); Main.Instance.ModHelper.HarmonyHelper.AddPrefix("Start", typeof(Patches), nameof(Patches.OnBlackHoleVolumeStart)); Main.Instance.ModHelper.HarmonyHelper.AddPrefix("Awake", typeof(Patches), nameof(Patches.OnWhiteHoleVolumeAwake)); Main.Instance.ModHelper.HarmonyHelper.AddPrefix("UpdateOrbitalLaunchValues", typeof(Patches), nameof(Patches.OnProbeLauncherUpdateOrbitalLaunchValues)); Main.Instance.ModHelper.HarmonyHelper.AddPrefix("IsLaunched", typeof(Patches), nameof(Patches.OnSurveyorProbeIsLaunched)); - - - Main.Instance.ModHelper.HarmonyHelper.AddPrefix("Awake", typeof(Patches), nameof(Patches.OnShipLogManagerAwake)); - Main.Instance.ModHelper.HarmonyHelper.AddPrefix("Start", typeof(Patches), nameof(Patches.OnShipLogManagerStart)); - Main.Instance.ModHelper.HarmonyHelper.AddPrefix("IsFactRevealed", typeof(Patches), nameof(Patches.OnShipLogManagerIsFactRevealed)); - Main.Instance.ModHelper.HarmonyHelper.AddPrefix("CheckForCompletionAchievement", typeof(Patches), nameof(Patches.OnShipLogManagerCheckForCompletionAchievement)); - - Main.Instance.ModHelper.HarmonyHelper.AddPrefix("GetCuriosityColor", typeof(Patches), nameof(Patches.OnUIStyleManagerGetCuriosityColor)); - - Main.Instance.ModHelper.HarmonyHelper.AddPrefix("Awake", typeof(Patches), nameof(Patches.DisableShipLogSandFunnel)); - Main.Instance.ModHelper.HarmonyHelper.AddPrefix("UpdateState", typeof(Patches), nameof(Patches.DisableShipLogSandFunnel)); - - Main.Instance.ModHelper.HarmonyHelper.AddPrefix("GetName", typeof(Patches), nameof(Patches.OnShipLogAstroObjectGetName)); - Main.Instance.ModHelper.HarmonyHelper.AddPrefix("Update", typeof(Patches), nameof(Patches.OnShipCockpitControllerUpdate)); // Postfixes Main.Instance.ModHelper.HarmonyHelper.AddPostfix("Awake", typeof(Patches), nameof(Patches.OnMapControllerAwake)); - - Main.Instance.ModHelper.HarmonyHelper.AddPostfix("Awake", typeof(Patches), nameof(Patches.OnShipLogManagerAwakeComplete)); - - Main.Instance.ModHelper.HarmonyHelper.AddPostfix("UpdateState", typeof(Patches), nameof(Patches.OnShipLogAstroObjectUpdateState)); - - Main.Instance.ModHelper.HarmonyHelper.AddPostfix("EnterMode", typeof(Patches), nameof(Patches.OnShipLogMapModeEnterMode)); - Main.Instance.ModHelper.HarmonyHelper.AddPostfix("Initialize", typeof(Patches), nameof(Patches.OnShipLogMapModeInitialize)); } public static bool GetHUDDisplayName(ReferenceFrame __instance, ref string __result) @@ -394,190 +371,5 @@ namespace NewHorizons.Tools } return true; } - - #region ShipLog - public static void OnShipLogManagerAwake(ShipLogManager __instance) - { - Logger.Log("Beginning Ship Log Generation For: " + Main.Instance.CurrentStarSystem, Logger.LogType.Log); - if (Main.Instance.CurrentStarSystem != "SolarSystem") - { - __instance._shipLogXmlAssets = new TextAsset[] {}; - foreach (ShipLogEntryLocation logEntryLocation in GameObject.FindObjectsOfType()) - { - logEntryLocation._initialized = true; - } - } - foreach (NewHorizonsBody body in Main.BodyDict[Main.Instance.CurrentStarSystem]) - { - if (body.Config.ShipLog?.curiosities != null) - { - RumorModeBuilder.AddCuriosityColors(body.Config.ShipLog.curiosities); - } - } - foreach (NewHorizonsBody body in Main.BodyDict[Main.Instance.CurrentStarSystem]) - { - if (body.Config.ShipLog?.xmlFile != null) - { - RumorModeBuilder.AddBodyToShipLog(__instance, body); - } - } - } - - public static void OnShipLogManagerAwakeComplete(ShipLogManager __instance) - { - RumorModeBuilder.GenerateEntryData(__instance); - for (var i = 0; i < __instance._entryList.Count; i++) - { - ShipLogEntry logEntry = __instance._entryList[i]; - RumorModeBuilder.UpdateEntryCuriosity(ref logEntry); - } - Logger.Log("Ship Log Generation Complete For: " + Main.Instance.CurrentStarSystem, Logger.LogType.Log); - } - - public static bool OnShipLogManagerIsFactRevealed(ShipLogManager __instance, ref bool __result, string __0) - { - if (Main.Instance.CurrentStarSystem == "SolarSystem") - { - return true; - } - else - { - if (__instance._factDict.ContainsKey(__0) == false) - { - __result = false; - return false; - } - else - { - return true; - } - } - } - - public static bool OnShipLogManagerCheckForCompletionAchievement() - { - return Main.Instance.CurrentStarSystem == "SolarSystem"; - } - - public static bool OnShipLogManagerStart(ShipLogManager __instance) - { - if (Main.Instance.CurrentStarSystem == "SolarSystem") - { - return true; - } - else - { - foreach (NewHorizonsBody body in Main.BodyDict[Main.Instance.CurrentStarSystem]) - { - foreach (string fact in body.Config.ShipLog?.initialReveal ?? Array.Empty()) - { - __instance.RevealFact(fact, false, false); - } - } - EntryLocationBuilder.InitializeLocations(); - return false; - } - } - - public static bool OnUIStyleManagerGetCuriosityColor(UIStyleManager __instance, CuriosityName __0, bool __1, ref Color __result) - { - if (Main.Instance.CurrentStarSystem == "SolarSystem") - { - return true; - } - else - { - __result = RumorModeBuilder.GetCuriosityColor(__0, __1, __instance._neutralColor, __instance._neutralHighlight); - return false; - } - } - - private static void DeleteDetail(string name) - { - Object.Destroy(GameObject.Find(ShipLogHandler.PAN_ROOT_PATH + "/" + name)); - } - - public static void OnShipLogMapModeInitialize(ShipLogMapMode __instance) - { - if (Main.Instance.CurrentStarSystem != "SolarSystem") - { - GameObject panRoot = GameObject.Find(ShipLogHandler.PAN_ROOT_PATH); - GameObject sunObject = GameObject.Find(ShipLogHandler.PAN_ROOT_PATH + "/Sun"); - ShipLogAstroObject[][] navMatrix = MapModeBuilder.ConstructMapMode(Main.Instance.CurrentStarSystem, panRoot, sunObject.layer); - if (navMatrix.Length <= 1) - { - Logger.LogWarning("No planets suitable for map mode found! Defaulting to vanilla menu (expect weirdness!)."); - } - else - { - __instance._astroObjects = navMatrix; - __instance._startingAstroObjectID = navMatrix[1][0].GetID(); - List delete = SearchUtilities.GetAllChildren(panRoot).Where(g => g.name.Contains("_ShipLog") == false).ToList(); - foreach (GameObject gameObject in delete) - { - DeleteDetail(gameObject.name); - } - // Just Lie About Having A Sand Funnel - __instance._sandFunnel = __instance.gameObject.AddComponent(); - } - } - Logger.Log("Map Mode Construction Complete", Logger.LogType.Log); - } - - public static bool OnShipLogAstroObjectGetName(ShipLogAstroObject __instance, ref string __result) - { - if (Main.Instance.CurrentStarSystem == "SolarSystem") - { - return true; - } - else - { - __result = MapModeBuilder.GetAstroBodyShipLogName(__instance.GetID()); - return false; - } - } - - public static void OnShipLogAstroObjectUpdateState(ShipLogAstroObject __instance) - { - Transform detailsParent = __instance.transform.Find("Details"); - if (detailsParent != null) - { - foreach (GameObject child in SearchUtilities.GetAllChildren(detailsParent.gameObject)) - { - Component detail; - if (child.TryGetComponent(typeof(ShipLogDetail), out detail)) - { - (detail as ShipLogDetail)?.UpdateState(__instance._state); - } - } - } - - Transform lineObject = __instance.transform.Find("Line_ShipLog"); - if (lineObject != null) - { - ShipLogDetail lineDetail = lineObject.gameObject.GetComponent(); - lineDetail.UpdateState(__instance._state); - } - } - - public static bool DisableShipLogSandFunnel() - { - return Main.Instance.CurrentStarSystem == "SolarSystem"; - } - - public static void OnPlayerDataGetNewlyRevealedFactIDsComplete(ref List __result) - { - ShipLogManager manager = Locator.GetShipLogManager(); - __result = __result.Where(e => manager.GetFact(e) != null).ToList(); - } - # endregion - - public static void OnShipLogMapModeEnterMode(ShipLogMapMode __instance) - { - var newPrompt = "Interstellar Mode"; - __instance._detectiveModePrompt.SetText(newPrompt); - var text = GameObject.Find("Ship_Body/Module_Cabin/Systems_Cabin/ShipLogPivot/ShipLog/ShipLogPivot/ShipLogCanvas/ScreenPromptListScaleRoot/ScreenPromptList_UpperRight/ScreenPrompt/Text").GetComponent(); - text.text = newPrompt; - } } } diff --git a/NewHorizons/Tools/ShipLogPatches.cs b/NewHorizons/Tools/ShipLogPatches.cs new file mode 100644 index 00000000..751a3684 --- /dev/null +++ b/NewHorizons/Tools/ShipLogPatches.cs @@ -0,0 +1,201 @@ +using NewHorizons.Components; +using System; +using System.Collections.Generic; +using System.Linq; +using NewHorizons.Utility; +using UnityEngine; +using Logger = NewHorizons.Utility.Logger; +using Object = UnityEngine.Object; +using NewHorizons.Builder.ShipLog; +using NewHorizons.Builder.Handlers; + +namespace NewHorizons.Tools +{ + public static class ShipLogPatches + { + public static void Apply() + { + var playerDataGetNewlyRevealedFactIDs = typeof(PlayerData).GetMethod("GetNewlyRevealedFactIDs"); + Main.Instance.ModHelper.HarmonyHelper.AddPostfix(playerDataGetNewlyRevealedFactIDs, typeof(ShipLogPatches), nameof(ShipLogPatches.OnPlayerDataGetNewlyRevealedFactIDsComplete)); + + Main.Instance.ModHelper.HarmonyHelper.AddPrefix("Awake", typeof(ShipLogPatches), nameof(ShipLogPatches.OnShipLogManagerAwake)); + Main.Instance.ModHelper.HarmonyHelper.AddPrefix("Start", typeof(ShipLogPatches), nameof(ShipLogPatches.OnShipLogManagerStart)); + Main.Instance.ModHelper.HarmonyHelper.AddPrefix("IsFactRevealed", typeof(ShipLogPatches), nameof(ShipLogPatches.OnShipLogManagerIsFactRevealed)); + Main.Instance.ModHelper.HarmonyHelper.AddPrefix("CheckForCompletionAchievement", typeof(ShipLogPatches), nameof(ShipLogPatches.OnShipLogManagerCheckForCompletionAchievement)); + Main.Instance.ModHelper.HarmonyHelper.AddPrefix("GetCuriosityColor", typeof(ShipLogPatches), nameof(ShipLogPatches.OnUIStyleManagerGetCuriosityColor)); + Main.Instance.ModHelper.HarmonyHelper.AddPrefix("Awake", typeof(ShipLogPatches), nameof(ShipLogPatches.DisableShipLogSandFunnel)); + Main.Instance.ModHelper.HarmonyHelper.AddPrefix("UpdateState", typeof(ShipLogPatches), nameof(ShipLogPatches.DisableShipLogSandFunnel)); + Main.Instance.ModHelper.HarmonyHelper.AddPrefix("GetName", typeof(ShipLogPatches), nameof(ShipLogPatches.OnShipLogAstroObjectGetName)); + Main.Instance.ModHelper.HarmonyHelper.AddPostfix("Initialize", typeof(ShipLogPatches), nameof(ShipLogPatches.OnShipLogMapModeInitialize)); + Main.Instance.ModHelper.HarmonyHelper.AddPostfix("Awake", typeof(ShipLogPatches), nameof(ShipLogPatches.OnShipLogManagerAwakeComplete)); + Main.Instance.ModHelper.HarmonyHelper.AddPostfix("UpdateState", typeof(ShipLogPatches), nameof(ShipLogPatches.OnShipLogAstroObjectUpdateState)); + } + + public static void OnShipLogManagerAwake(ShipLogManager __instance) + { + Logger.Log("Beginning Ship Log Generation For: " + Main.Instance.CurrentStarSystem, Logger.LogType.Log); + if (Main.Instance.CurrentStarSystem != "SolarSystem") + { + __instance._shipLogXmlAssets = new TextAsset[] { }; + foreach (ShipLogEntryLocation logEntryLocation in GameObject.FindObjectsOfType()) + { + logEntryLocation._initialized = true; + } + } + foreach (NewHorizonsBody body in Main.BodyDict[Main.Instance.CurrentStarSystem]) + { + if (body.Config.ShipLog?.curiosities != null) + { + RumorModeBuilder.AddCuriosityColors(body.Config.ShipLog.curiosities); + } + } + foreach (NewHorizonsBody body in Main.BodyDict[Main.Instance.CurrentStarSystem]) + { + if (body.Config.ShipLog?.xmlFile != null) + { + RumorModeBuilder.AddBodyToShipLog(__instance, body); + } + } + } + + public static void OnShipLogManagerAwakeComplete(ShipLogManager __instance) + { + RumorModeBuilder.GenerateEntryData(__instance); + for (var i = 0; i < __instance._entryList.Count; i++) + { + ShipLogEntry logEntry = __instance._entryList[i]; + RumorModeBuilder.UpdateEntryCuriosity(ref logEntry); + } + Logger.Log("Ship Log Generation Complete For: " + Main.Instance.CurrentStarSystem, Logger.LogType.Log); + } + + public static bool OnShipLogManagerIsFactRevealed(ShipLogManager __instance, ref bool __result, string __0) + { + Logger.Log(__0); + + // Just replace the entire function, no need to Debug Break or wtv + if (__instance._factDict != null && __instance._factDict.ContainsKey(__0)) + { + __result = __instance._factDict[__0].IsRevealed(); + } + else + { + __result = false; + } + return false; + } + + public static bool OnShipLogManagerCheckForCompletionAchievement() + { + return Main.Instance.CurrentStarSystem == "SolarSystem"; + } + + public static bool OnShipLogManagerStart(ShipLogManager __instance) + { + if (Main.Instance.CurrentStarSystem == "SolarSystem") + { + return true; + } + else + { + foreach (NewHorizonsBody body in Main.BodyDict[Main.Instance.CurrentStarSystem]) + { + foreach (string fact in body.Config.ShipLog?.initialReveal ?? Array.Empty()) + { + __instance.RevealFact(fact, false, false); + } + } + EntryLocationBuilder.InitializeLocations(); + return false; + } + } + + public static bool OnUIStyleManagerGetCuriosityColor(UIStyleManager __instance, CuriosityName __0, bool __1, ref Color __result) + { + if (Main.Instance.CurrentStarSystem == "SolarSystem") + { + return true; + } + else + { + __result = RumorModeBuilder.GetCuriosityColor(__0, __1, __instance._neutralColor, __instance._neutralHighlight); + return false; + } + } + + public static void OnShipLogMapModeInitialize(ShipLogMapMode __instance) + { + if (Main.Instance.CurrentStarSystem != "SolarSystem") + { + GameObject panRoot = GameObject.Find(ShipLogHandler.PAN_ROOT_PATH); + GameObject sunObject = GameObject.Find(ShipLogHandler.PAN_ROOT_PATH + "/Sun"); + ShipLogAstroObject[][] navMatrix = MapModeBuilder.ConstructMapMode(Main.Instance.CurrentStarSystem, panRoot, sunObject.layer); + if (navMatrix.Length <= 1) + { + Logger.LogWarning("No planets suitable for map mode found! Defaulting to vanilla menu (expect weirdness!)."); + } + else + { + __instance._astroObjects = navMatrix; + __instance._startingAstroObjectID = navMatrix[1][0].GetID(); + List delete = SearchUtilities.GetAllChildren(panRoot).Where(g => g.name.Contains("_ShipLog") == false).ToList(); + foreach (GameObject gameObject in delete) + { + Object.Destroy(GameObject.Find(ShipLogHandler.PAN_ROOT_PATH + "/" + gameObject.name)); + } + // Just Lie About Having A Sand Funnel + __instance._sandFunnel = __instance.gameObject.AddComponent(); + } + } + Logger.Log("Map Mode Construction Complete", Logger.LogType.Log); + } + + public static bool OnShipLogAstroObjectGetName(ShipLogAstroObject __instance, ref string __result) + { + if (Main.Instance.CurrentStarSystem == "SolarSystem") + { + return true; + } + else + { + __result = MapModeBuilder.GetAstroBodyShipLogName(__instance.GetID()); + return false; + } + } + + public static void OnShipLogAstroObjectUpdateState(ShipLogAstroObject __instance) + { + Transform detailsParent = __instance.transform.Find("Details"); + if (detailsParent != null) + { + foreach (GameObject child in SearchUtilities.GetAllChildren(detailsParent.gameObject)) + { + Component detail; + if (child.TryGetComponent(typeof(ShipLogDetail), out detail)) + { + (detail as ShipLogDetail)?.UpdateState(__instance._state); + } + } + } + + Transform lineObject = __instance.transform.Find("Line_ShipLog"); + if (lineObject != null) + { + ShipLogDetail lineDetail = lineObject.gameObject.GetComponent(); + lineDetail.UpdateState(__instance._state); + } + } + + public static bool DisableShipLogSandFunnel() + { + return Main.Instance.CurrentStarSystem == "SolarSystem"; + } + + public static void OnPlayerDataGetNewlyRevealedFactIDsComplete(ref List __result) + { + ShipLogManager manager = Locator.GetShipLogManager(); + __result = __result.Where(e => manager.GetFact(e) != null).ToList(); + } + } +} + \ No newline at end of file diff --git a/NewHorizons/Tools/WarpDrivePatches.cs b/NewHorizons/Tools/WarpDrivePatches.cs index e06ce4c0..4fa7e713 100644 --- a/NewHorizons/Tools/WarpDrivePatches.cs +++ b/NewHorizons/Tools/WarpDrivePatches.cs @@ -14,9 +14,7 @@ namespace NewHorizons.Tools public static void Apply() { Main.Instance.ModHelper.HarmonyHelper.AddPrefix("Update", typeof(WarpDrivePatches), nameof(WarpDrivePatches.OnShipCockpitControllerUpdate)); - Main.Instance.ModHelper.HarmonyHelper.AddPostfix("EnterMode", typeof(WarpDrivePatches), nameof(WarpDrivePatches.OnShipLogMapModeEnterMode)); - Main.Instance.ModHelper.HarmonyHelper.AddPrefix("Update", typeof(WarpDrivePatches), nameof(WarpDrivePatches.OnShipLogControllerUpdate)); }