From 8b314058cb6b2e46531f0ab99d8ba9cad5f177ca Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 25 Mar 2024 22:57:14 -0400 Subject: [PATCH 1/5] Fix bramble signal propagation when parentPath is specified --- NewHorizons/Builder/Props/BrambleNodeBuilder.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/NewHorizons/Builder/Props/BrambleNodeBuilder.cs b/NewHorizons/Builder/Props/BrambleNodeBuilder.cs index 2aa1075e..99703ef8 100644 --- a/NewHorizons/Builder/Props/BrambleNodeBuilder.cs +++ b/NewHorizons/Builder/Props/BrambleNodeBuilder.cs @@ -6,6 +6,7 @@ using NewHorizons.Handlers; using NewHorizons.Utility; using NewHorizons.Utility.OuterWilds; using NewHorizons.Utility.OWML; +using Newtonsoft.Json; using OWML.Common; using System.Collections.Generic; using System.Linq; @@ -414,6 +415,12 @@ namespace NewHorizons.Builder.Props { foreach (var signalConfig in connectedSignals) { + // Have to ensure that this new signal doesn't use parent path, else it looks for a parent that only exists on the original body + // Have to make a copy of it as well to avoid modifying the old body's info + var signalConfigCopy = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(signalConfig)); + signalConfigCopy.parentPath = null; + signalConfigCopy.isRelativeToParent = false; + var signalGO = SignalBuilder.Make(go, sector, signalConfig, mod); signalGO.GetComponent()._identificationDistance = 0; signalGO.GetComponent()._sourceRadius = 1; From 136176ddff1817c19a3606e8d9dad1676e0971f0 Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 25 Mar 2024 23:54:36 -0400 Subject: [PATCH 2/5] Null check under bramble sector controller --- .../Sectored/BrambleSectorController.cs | 53 ++++++++----------- 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/NewHorizons/Components/Sectored/BrambleSectorController.cs b/NewHorizons/Components/Sectored/BrambleSectorController.cs index 3d48e53a..3dd646aa 100644 --- a/NewHorizons/Components/Sectored/BrambleSectorController.cs +++ b/NewHorizons/Components/Sectored/BrambleSectorController.cs @@ -54,54 +54,45 @@ namespace NewHorizons.Components.Sectored } } - private void EnableRenderers() + private void EnableRenderers() => ToggleRenderers(true); + + private void DisableRenderers() => ToggleRenderers(false); + + private void ToggleRenderers(bool visible) { foreach (var renderer in _renderers) { - renderer.forceRenderingOff = false; + if (renderer != null) + { + renderer.forceRenderingOff = visible; + } } foreach (var tessellatedRenderer in _tessellatedRenderers) { - tessellatedRenderer.enabled = true; + if (tessellatedRenderer != null) + { + tessellatedRenderer.enabled = visible; + } } foreach (var collider in _colliders) { - collider.enabled = true; + if (collider != null) + { + collider.enabled = visible; + } } foreach (var light in _lights) { - light.enabled = true; + if (light != null) + { + light.enabled = visible; + } } - _renderersShown = true; - } - - private void DisableRenderers() - { - foreach (var renderer in _renderers) - { - renderer.forceRenderingOff = true; - } - - foreach (var tessellatedRenderer in _tessellatedRenderers) - { - tessellatedRenderer.enabled = false; - } - - foreach (var collider in _colliders) - { - collider.enabled = false; - } - - foreach (var light in _lights) - { - light.enabled = false; - } - - _renderersShown = false; + _renderersShown = visible; } } } From f24c0f5c4e7084181c114792ec86c55697b95b4a Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 26 Mar 2024 00:09:27 -0400 Subject: [PATCH 3/5] Just get all the children each time --- .../Sectored/BrambleSectorController.cs | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/NewHorizons/Components/Sectored/BrambleSectorController.cs b/NewHorizons/Components/Sectored/BrambleSectorController.cs index 3dd646aa..00077c25 100644 --- a/NewHorizons/Components/Sectored/BrambleSectorController.cs +++ b/NewHorizons/Components/Sectored/BrambleSectorController.cs @@ -33,13 +33,16 @@ namespace NewHorizons.Components.Sectored } private void Start() + { + DisableRenderers(); + } + + private void GetRenderers() { _renderers = gameObject.GetComponentsInChildren(); _tessellatedRenderers = gameObject.GetComponentsInChildren(); _colliders = gameObject.GetComponentsInChildren(); _lights = gameObject.GetComponentsInChildren(); - - DisableRenderers(); } private void OnSectorOccupantsUpdated() @@ -60,36 +63,26 @@ namespace NewHorizons.Components.Sectored private void ToggleRenderers(bool visible) { + GetRenderers(); + foreach (var renderer in _renderers) { - if (renderer != null) - { - renderer.forceRenderingOff = visible; - } + renderer.forceRenderingOff = !visible; } foreach (var tessellatedRenderer in _tessellatedRenderers) { - if (tessellatedRenderer != null) - { - tessellatedRenderer.enabled = visible; - } + tessellatedRenderer.enabled = visible; } foreach (var collider in _colliders) { - if (collider != null) - { - collider.enabled = visible; - } + collider.enabled = visible; } foreach (var light in _lights) { - if (light != null) - { - light.enabled = visible; - } + light.enabled = visible; } _renderersShown = visible; From fdaaa765883e60b52a9e4057303e26166a7e8c4e Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 26 Mar 2024 00:13:15 -0400 Subject: [PATCH 4/5] Forgot to use the copy --- NewHorizons/Builder/Props/BrambleNodeBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NewHorizons/Builder/Props/BrambleNodeBuilder.cs b/NewHorizons/Builder/Props/BrambleNodeBuilder.cs index 99703ef8..82e85a12 100644 --- a/NewHorizons/Builder/Props/BrambleNodeBuilder.cs +++ b/NewHorizons/Builder/Props/BrambleNodeBuilder.cs @@ -421,7 +421,7 @@ namespace NewHorizons.Builder.Props signalConfigCopy.parentPath = null; signalConfigCopy.isRelativeToParent = false; - var signalGO = SignalBuilder.Make(go, sector, signalConfig, mod); + var signalGO = SignalBuilder.Make(go, sector, signalConfigCopy, mod); signalGO.GetComponent()._identificationDistance = 0; signalGO.GetComponent()._sourceRadius = 1; signalGO.transform.position = brambleNode.transform.position; From 8f40db40b3b11e877728e7568214218252d402a1 Mon Sep 17 00:00:00 2001 From: Nick Date: Thu, 28 Mar 2024 00:57:49 -0400 Subject: [PATCH 5/5] Fix compat issue with Visible Stranger where the probe marker would vanish --- .../Patches/HUDPatches/ProbeHUDMarkerPatches.cs | 15 +++++++++++---- NewHorizons/Utility/OWML/NHLogger.cs | 7 +++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/NewHorizons/Patches/HUDPatches/ProbeHUDMarkerPatches.cs b/NewHorizons/Patches/HUDPatches/ProbeHUDMarkerPatches.cs index 15da0b12..b0c31daa 100644 --- a/NewHorizons/Patches/HUDPatches/ProbeHUDMarkerPatches.cs +++ b/NewHorizons/Patches/HUDPatches/ProbeHUDMarkerPatches.cs @@ -1,6 +1,7 @@ using HarmonyLib; using NewHorizons.Components.Sectored; using NewHorizons.Handlers; +using NewHorizons.Utility.OWML; namespace NewHorizons.Patches.HUDPatches { @@ -27,15 +28,21 @@ namespace NewHorizons.Patches.HUDPatches [HarmonyPatch(nameof(ProbeHUDMarker.RefreshOwnVisibility))] public static bool ProbeHUDMarker_RefreshOwnVisibility(ProbeHUDMarker __instance) { + // Probe marker seems to never appear in the eye or QM in base game (inside eye being past the vortex) ?? at least thats what its code implies bool insideEYE = Locator.GetEyeStateManager() != null && Locator.GetEyeStateManager().IsInsideTheEye(); bool insideQM = __instance._quantumMoon != null && (__instance._quantumMoon.IsPlayerInside() || __instance._quantumMoon.IsProbeInside()); - bool insideRW = Locator.GetRingWorldController() != null && Locator.GetRingWorldController().isPlayerInside == Locator.GetRingWorldController().isProbeInside; - bool insideIP = Locator.GetCloakFieldController() != null && Locator.GetCloakFieldController().isPlayerInsideCloak == Locator.GetCloakFieldController().isProbeInsideCloak; - bool insideCloak = CloakSectorController.isPlayerInside == CloakSectorController.isProbeInside; + + // Either the controllers wtv are null or the player and probe state are the same + bool sameRW = Locator.GetRingWorldController() == null || Locator.GetRingWorldController().isPlayerInside == Locator.GetRingWorldController().isProbeInside; + bool sameIP = Locator.GetCloakFieldController() == null || Locator.GetCloakFieldController().isPlayerInsideCloak == Locator.GetCloakFieldController().isProbeInsideCloak; + bool sameCloak = CloakSectorController.isPlayerInside == CloakSectorController.isProbeInside; bool sameInterference = InterferenceHandler.IsPlayerSameAsProbe(); + bool isActive = __instance.gameObject.activeInHierarchy || __instance._isTLCDuplicate; - __instance._isVisible = isActive && !insideEYE && !insideQM && !__instance._translatorEquipped && !__instance._inConversation && __instance._launched && (__instance._isWearingHelmet || __instance._atFlightConsole) && insideRW && insideIP && insideCloak && sameInterference; + __instance._isVisible = isActive && !insideEYE && !insideQM && !__instance._translatorEquipped + && !__instance._inConversation && __instance._launched && (__instance._isWearingHelmet || __instance._atFlightConsole) + && sameRW && sameIP && sameCloak && sameInterference; if (__instance._canvasMarker != null) __instance._canvasMarker.SetVisibility(__instance._isVisible); diff --git a/NewHorizons/Utility/OWML/NHLogger.cs b/NewHorizons/Utility/OWML/NHLogger.cs index 080cdcad..c539f43f 100644 --- a/NewHorizons/Utility/OWML/NHLogger.cs +++ b/NewHorizons/Utility/OWML/NHLogger.cs @@ -19,10 +19,17 @@ namespace NewHorizons.Utility.OWML Main.Instance.ModHelper.Console.WriteLine($"{Enum.GetName(typeof(LogType), type)} : {text}", LogTypeToMessageType(type)); } + public static void LogVerbose(params object[] obj) => LogVerbose(string.Join(", ", obj)); public static void LogVerbose(object text) => Log(text, LogType.Verbose); + public static void Log(object text) => Log(text, LogType.Log); + public static void Log(params object[] obj) => Log(string.Join(", ", obj)); + public static void LogWarning(object text) => Log(text, LogType.Warning); + public static void LogWarning(params object[] obj) => LogWarning(string.Join(", ", obj)); + public static void LogError(object text) => Log(text, LogType.Error); + public static void LogError(params object[] obj) => LogError(string.Join(", ", obj)); public enum LogType {