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.OuterWilds;
|
||||
using NewHorizons.Utility.OWML;
|
||||
using Newtonsoft.Json;
|
||||
using OWML.Common;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -414,7 +415,13 @@ namespace NewHorizons.Builder.Props
|
||||
{
|
||||
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>()._sourceRadius = 1;
|
||||
signalGO.transform.position = brambleNode.transform.position;
|
||||
|
||||
@ -33,13 +33,16 @@ namespace NewHorizons.Components.Sectored
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
DisableRenderers();
|
||||
}
|
||||
|
||||
private void GetRenderers()
|
||||
{
|
||||
_renderers = gameObject.GetComponentsInChildren<Renderer>();
|
||||
_tessellatedRenderers = gameObject.GetComponentsInChildren<TessellatedRenderer>();
|
||||
_colliders = gameObject.GetComponentsInChildren<Collider>();
|
||||
_lights = gameObject.GetComponentsInChildren<Light>();
|
||||
|
||||
DisableRenderers();
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
renderer.forceRenderingOff = false;
|
||||
renderer.forceRenderingOff = !visible;
|
||||
}
|
||||
|
||||
foreach (var tessellatedRenderer in _tessellatedRenderers)
|
||||
{
|
||||
tessellatedRenderer.enabled = true;
|
||||
tessellatedRenderer.enabled = visible;
|
||||
}
|
||||
|
||||
foreach (var collider in _colliders)
|
||||
{
|
||||
collider.enabled = true;
|
||||
collider.enabled = visible;
|
||||
}
|
||||
|
||||
foreach (var light in _lights)
|
||||
{
|
||||
light.enabled = true;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user