diff --git a/NewHorizons/Builder/Body/SingularityBuilder.cs b/NewHorizons/Builder/Body/SingularityBuilder.cs index 72648881..a961c9d5 100644 --- a/NewHorizons/Builder/Body/SingularityBuilder.cs +++ b/NewHorizons/Builder/Body/SingularityBuilder.cs @@ -12,6 +12,7 @@ using NewHorizons.Utility.OWML; using NewHorizons.Utility.OuterWilds; using NewHorizons.External.SerializableData; using NewHorizons.Builder.Volumes; +using System; namespace NewHorizons.Builder.Body { @@ -110,41 +111,51 @@ namespace NewHorizons.Builder.Body { foreach (var pair in _pairsToLink) { - var (blackHoleID, whiteHoleID) = pair; - if (!_singularitiesByID.TryGetValue(blackHoleID, out GameObject blackHole)) + try { - NHLogger.LogWarning($"Black hole [{blackHoleID}] is missing."); - continue; - } - if (!_singularitiesByID.TryGetValue(whiteHoleID, out GameObject whiteHole)) - { - NHLogger.LogWarning($"White hole [{whiteHoleID}] is missing."); - continue; - } - var whiteHoleVolume = whiteHole.GetComponentInChildren(); - var blackHoleVolume = blackHole.GetComponentInChildren(); - if (whiteHoleVolume == null || blackHoleVolume == null) - { - NHLogger.LogWarning($"Singularities [{blackHoleID}] and [{whiteHoleID}] do not have compatible polarities."); - continue; - } - if (blackHoleVolume._whiteHole != null && blackHoleVolume._whiteHole != whiteHoleVolume) - { - NHLogger.LogWarning($"Black hole [{blackHoleID}] has already been linked!"); - continue; - } - NHLogger.LogVerbose($"Pairing singularities [{blackHoleID}], [{whiteHoleID}]"); - blackHoleVolume._whiteHole = whiteHoleVolume; + var (blackHoleID, whiteHoleID) = pair; + if (!_singularitiesByID.TryGetValue(blackHoleID, out GameObject blackHole)) + { + NHLogger.LogWarning($"Black hole [{blackHoleID}] is missing."); + continue; + } + if (!_singularitiesByID.TryGetValue(whiteHoleID, out GameObject whiteHole)) + { + NHLogger.LogWarning($"White hole [{whiteHoleID}] is missing."); + continue; + } + var whiteHoleVolume = whiteHole.GetComponentInChildren(); + var blackHoleVolume = blackHole.GetComponentInChildren(); + if (whiteHoleVolume == null || blackHoleVolume == null) + { + NHLogger.LogWarning($"Singularities [{blackHoleID}] and [{whiteHoleID}] do not have compatible polarities."); + continue; + } + if (blackHoleVolume._whiteHole != null && blackHoleVolume._whiteHole != whiteHoleVolume) + { + NHLogger.LogWarning($"Black hole [{blackHoleID}] has already been linked!"); + continue; + } + NHLogger.LogVerbose($"Pairing singularities [{blackHoleID}], [{whiteHoleID}]"); + blackHoleVolume._whiteHole = whiteHoleVolume; - // If warping to a vanilla planet, we add a streaming volume to pre-load it - var streamingGroup = whiteHoleVolume.GetAttachedOWRigidbody().GetComponentInChildren(); - if (streamingGroup != null) + // If warping to a vanilla planet, we add a streaming volume to pre-load it + var streamingGroup = whiteHoleVolume.GetAttachedOWRigidbody().GetComponentInChildren(); + if (streamingGroup != null) + { + var sphereCollider = blackHoleVolume.GetComponent(); + // Shouldn't ever be null but doesn't hurt ig + var loadRadius = sphereCollider == null ? 100f : sphereCollider.radius + 50f; + var streamingVolume = VolumeBuilder.Make(blackHoleVolume.GetAttachedOWRigidbody().gameObject, blackHoleVolume.GetComponentInParent(), + new External.Modules.Volumes.VolumeInfos.VolumeInfo() { radius = loadRadius }); + streamingVolume.streamingGroup = streamingGroup; + streamingVolume.transform.parent = blackHoleVolume.transform; + streamingVolume.transform.localPosition = Vector3.zero; + } + } + catch (Exception e) { - var streamingVolume = VolumeBuilder.Make(blackHoleVolume.GetAttachedOWRigidbody().gameObject, blackHoleVolume.GetComponentInParent(), - new External.Modules.Volumes.VolumeInfos.VolumeInfo() { radius = 100f }); - streamingVolume.streamingGroup = streamingGroup; - streamingVolume.transform.parent = blackHoleVolume.transform; - streamingVolume.transform.localPosition = Vector3.zero; + NHLogger.LogError($"Failed to pair singularities {e}"); } } } @@ -179,7 +190,7 @@ namespace NewHorizons.Builder.Body OWAudioSource oneShotOWAudioSource = null; - var singularityAmbience = Object.Instantiate(_blackHoleAmbience, singularity.transform); + var singularityAmbience = GameObject.Instantiate(_blackHoleAmbience, singularity.transform); singularityAmbience.name = polarity ? "BlackHoleAmbience" : "WhiteHoleAmbience"; singularityAmbience.SetActive(true); singularityAmbience.GetComponent().SetSector(sector); @@ -226,7 +237,7 @@ namespace NewHorizons.Builder.Body } else { - var blackHoleOneShot = Object.Instantiate(_blackHoleEmissionOneShot, singularity.transform); + var blackHoleOneShot = GameObject.Instantiate(_blackHoleEmissionOneShot, singularity.transform); blackHoleOneShot.name = "BlackHoleEmissionOneShot"; blackHoleOneShot.SetActive(true); oneShotOWAudioSource = blackHoleOneShot.GetComponent(); @@ -235,7 +246,7 @@ namespace NewHorizons.Builder.Body oneShotAudioSource.minDistance = horizon; if (sizeController != null) sizeController.oneShotAudioSource = oneShotAudioSource; - var blackHoleVolume = Object.Instantiate(_blackHoleVolume, singularity.transform); + var blackHoleVolume = GameObject.Instantiate(_blackHoleVolume, singularity.transform); blackHoleVolume.name = "BlackHoleVolume"; // Scale vanish effect to black hole size @@ -261,7 +272,7 @@ namespace NewHorizons.Builder.Body { foreach (var renderer in blackHoleVolume.GetComponentsInChildren(true)) { - Object.Destroy(renderer); + GameObject.Destroy(renderer); } }); } @@ -269,7 +280,7 @@ namespace NewHorizons.Builder.Body } else { - GameObject whiteHoleVolumeGO = Object.Instantiate(_whiteHoleVolume); + GameObject whiteHoleVolumeGO = GameObject.Instantiate(_whiteHoleVolume); whiteHoleVolumeGO.transform.parent = singularity.transform; whiteHoleVolumeGO.transform.localPosition = Vector3.zero; whiteHoleVolumeGO.transform.localScale = Vector3.one;