mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Jam fixes (#828)
## Bug fixes - Don't look for old parent path when propagating signals. - Don't explode if an object is deleted in a custom bramble node - Fixes compat issue with Visible Stranger where the Probes map marker would vanish forever.
This commit is contained in:
commit
d5968c7588
@ -6,6 +6,7 @@ using NewHorizons.Handlers;
|
|||||||
using NewHorizons.Utility;
|
using NewHorizons.Utility;
|
||||||
using NewHorizons.Utility.OuterWilds;
|
using NewHorizons.Utility.OuterWilds;
|
||||||
using NewHorizons.Utility.OWML;
|
using NewHorizons.Utility.OWML;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -414,7 +415,13 @@ namespace NewHorizons.Builder.Props
|
|||||||
{
|
{
|
||||||
foreach (var signalConfig in connectedSignals)
|
foreach (var signalConfig in connectedSignals)
|
||||||
{
|
{
|
||||||
var signalGO = SignalBuilder.Make(go, sector, signalConfig, mod);
|
// 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<SignalInfo>(JsonConvert.SerializeObject(signalConfig));
|
||||||
|
signalConfigCopy.parentPath = null;
|
||||||
|
signalConfigCopy.isRelativeToParent = false;
|
||||||
|
|
||||||
|
var signalGO = SignalBuilder.Make(go, sector, signalConfigCopy, mod);
|
||||||
signalGO.GetComponent<AudioSignal>()._identificationDistance = 0;
|
signalGO.GetComponent<AudioSignal>()._identificationDistance = 0;
|
||||||
signalGO.GetComponent<AudioSignal>()._sourceRadius = 1;
|
signalGO.GetComponent<AudioSignal>()._sourceRadius = 1;
|
||||||
signalGO.transform.position = brambleNode.transform.position;
|
signalGO.transform.position = brambleNode.transform.position;
|
||||||
|
|||||||
@ -33,13 +33,16 @@ namespace NewHorizons.Components.Sectored
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
|
{
|
||||||
|
DisableRenderers();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GetRenderers()
|
||||||
{
|
{
|
||||||
_renderers = gameObject.GetComponentsInChildren<Renderer>();
|
_renderers = gameObject.GetComponentsInChildren<Renderer>();
|
||||||
_tessellatedRenderers = gameObject.GetComponentsInChildren<TessellatedRenderer>();
|
_tessellatedRenderers = gameObject.GetComponentsInChildren<TessellatedRenderer>();
|
||||||
_colliders = gameObject.GetComponentsInChildren<Collider>();
|
_colliders = gameObject.GetComponentsInChildren<Collider>();
|
||||||
_lights = gameObject.GetComponentsInChildren<Light>();
|
_lights = gameObject.GetComponentsInChildren<Light>();
|
||||||
|
|
||||||
DisableRenderers();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnSectorOccupantsUpdated()
|
private void OnSectorOccupantsUpdated()
|
||||||
@ -54,54 +57,35 @@ namespace NewHorizons.Components.Sectored
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void EnableRenderers()
|
private void EnableRenderers() => ToggleRenderers(true);
|
||||||
|
|
||||||
|
private void DisableRenderers() => ToggleRenderers(false);
|
||||||
|
|
||||||
|
private void ToggleRenderers(bool visible)
|
||||||
{
|
{
|
||||||
|
GetRenderers();
|
||||||
|
|
||||||
foreach (var renderer in _renderers)
|
foreach (var renderer in _renderers)
|
||||||
{
|
{
|
||||||
renderer.forceRenderingOff = false;
|
renderer.forceRenderingOff = !visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var tessellatedRenderer in _tessellatedRenderers)
|
foreach (var tessellatedRenderer in _tessellatedRenderers)
|
||||||
{
|
{
|
||||||
tessellatedRenderer.enabled = true;
|
tessellatedRenderer.enabled = visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var collider in _colliders)
|
foreach (var collider in _colliders)
|
||||||
{
|
{
|
||||||
collider.enabled = true;
|
collider.enabled = visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var light in _lights)
|
foreach (var light in _lights)
|
||||||
{
|
{
|
||||||
light.enabled = true;
|
light.enabled = visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
_renderersShown = true;
|
_renderersShown = visible;
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
using HarmonyLib;
|
using HarmonyLib;
|
||||||
using NewHorizons.Components.Sectored;
|
using NewHorizons.Components.Sectored;
|
||||||
using NewHorizons.Handlers;
|
using NewHorizons.Handlers;
|
||||||
|
using NewHorizons.Utility.OWML;
|
||||||
|
|
||||||
namespace NewHorizons.Patches.HUDPatches
|
namespace NewHorizons.Patches.HUDPatches
|
||||||
{
|
{
|
||||||
@ -27,15 +28,21 @@ namespace NewHorizons.Patches.HUDPatches
|
|||||||
[HarmonyPatch(nameof(ProbeHUDMarker.RefreshOwnVisibility))]
|
[HarmonyPatch(nameof(ProbeHUDMarker.RefreshOwnVisibility))]
|
||||||
public static bool ProbeHUDMarker_RefreshOwnVisibility(ProbeHUDMarker __instance)
|
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 insideEYE = Locator.GetEyeStateManager() != null && Locator.GetEyeStateManager().IsInsideTheEye();
|
||||||
bool insideQM = __instance._quantumMoon != null && (__instance._quantumMoon.IsPlayerInside() || __instance._quantumMoon.IsProbeInside());
|
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;
|
// Either the controllers wtv are null or the player and probe state are the same
|
||||||
bool insideCloak = CloakSectorController.isPlayerInside == CloakSectorController.isProbeInside;
|
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 sameInterference = InterferenceHandler.IsPlayerSameAsProbe();
|
||||||
|
|
||||||
bool isActive = __instance.gameObject.activeInHierarchy || __instance._isTLCDuplicate;
|
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);
|
if (__instance._canvasMarker != null) __instance._canvasMarker.SetVisibility(__instance._isVisible);
|
||||||
|
|
||||||
|
|||||||
@ -19,10 +19,17 @@ namespace NewHorizons.Utility.OWML
|
|||||||
Main.Instance.ModHelper.Console.WriteLine($"{Enum.GetName(typeof(LogType), type)} : {text}", LogTypeToMessageType(type));
|
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 LogVerbose(object text) => Log(text, LogType.Verbose);
|
||||||
|
|
||||||
public static void Log(object text) => Log(text, LogType.Log);
|
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(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(object text) => Log(text, LogType.Error);
|
||||||
|
public static void LogError(params object[] obj) => LogError(string.Join(", ", obj));
|
||||||
|
|
||||||
public enum LogType
|
public enum LogType
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user