diff --git a/NewHorizons/Utility/CollectionUtilities.cs b/NewHorizons/Utility/CollectionUtilities.cs index c70f7507..d98ab60f 100644 --- a/NewHorizons/Utility/CollectionUtilities.cs +++ b/NewHorizons/Utility/CollectionUtilities.cs @@ -1,11 +1,11 @@ -using System.Collections.Generic; +using System.Collections.Generic; namespace NewHorizons.Utility { public static class CollectionUtilities { - public static T KeyByValue(Dictionary dict, W val) + public static T KeyByValue(Dictionary dict, W val, T defaultValue = default) { - T key = default; + T key = defaultValue; foreach (KeyValuePair pair in dict) { if (EqualityComparer.Default.Equals(pair.Value, val)) diff --git a/NewHorizons/Utility/NewHorizonExtensions.cs b/NewHorizons/Utility/NewHorizonExtensions.cs index 7236af7e..e11609f3 100644 --- a/NewHorizons/Utility/NewHorizonExtensions.cs +++ b/NewHorizons/Utility/NewHorizonExtensions.cs @@ -387,5 +387,43 @@ namespace NewHorizons.Utility // return Regex.Replace(text.Trim(), @"[^\S\r\n]+", "GUH"); return Regex.Replace(text.Trim(), @"\s+", " ").ToLowerInvariant(); } + + public static void Stabilize(this SingularityController singularity) + { + singularity._state = SingularityController.State.Stable; + singularity._timer = 0f; + singularity._baseRadius = singularity._targetRadius; + singularity._currentRadius = singularity._targetRadius; + singularity._renderer.SetActivation(active: true); + singularity._renderer.SetMaterialProperty(singularity._propID_Radius, singularity._targetRadius); + if (singularity._owAmbientSource != null) singularity._owAmbientSource.FadeIn(0.5f); + singularity.enabled = true; + } + + public static void OpenEyesImmediate(this PlayerCameraEffectController playerCameraEffectController) + { + playerCameraEffectController._lastOpenness = 1; + playerCameraEffectController._wakeCurve = playerCameraEffectController._fastWakeCurve; + playerCameraEffectController._isOpeningEyes = false; + playerCameraEffectController._isClosingEyes = false; + playerCameraEffectController._eyeAnimDuration = 0; + playerCameraEffectController._eyeAnimStartTime = Time.time; + playerCameraEffectController._owCamera.postProcessingSettings.eyeMask.openness = 1; + playerCameraEffectController._owCamera.postProcessingSettings.bloom.threshold = playerCameraEffectController._owCamera.postProcessingSettings.bloomDefault.threshold; + playerCameraEffectController._owCamera.postProcessingSettings.eyeMaskEnabled = false; + } + + public static void CloseEyesImmediate(this PlayerCameraEffectController playerCameraEffectController) + { + playerCameraEffectController._lastOpenness = 0f; + playerCameraEffectController._wakeCurve = playerCameraEffectController._fastWakeCurve; + playerCameraEffectController._isOpeningEyes = false; + playerCameraEffectController._isClosingEyes = false; + playerCameraEffectController._eyeAnimDuration = 0; + playerCameraEffectController._eyeAnimStartTime = Time.time; + playerCameraEffectController._owCamera.postProcessingSettings.eyeMask.openness = 0f; + playerCameraEffectController._owCamera.postProcessingSettings.bloom.threshold = 0f; + playerCameraEffectController._owCamera.postProcessingSettings.eyeMaskEnabled = true; + } } }