diff --git a/NewHorizons/Handlers/TitleSceneHandler.cs b/NewHorizons/Handlers/TitleSceneHandler.cs index 6a156d40..14aab01f 100644 --- a/NewHorizons/Handlers/TitleSceneHandler.cs +++ b/NewHorizons/Handlers/TitleSceneHandler.cs @@ -13,6 +13,7 @@ using System; using System.Collections.Generic; using System.Linq; using UnityEngine; +using UnityEngine.SceneManagement; using Color = UnityEngine.Color; namespace NewHorizons.Handlers @@ -23,6 +24,7 @@ namespace NewHorizons.Handlers internal static NewHorizonsBody[] eligibleBodies => Main.BodyDict.Values.ToList().SelectMany(x => x).ToList() .Where(b => (b.Config.HeightMap != null || b.Config.Atmosphere?.clouds != null) && b.Config.Star == null && b.Config.canShowOnTitle).ToArray(); internal static int eligibleCount => eligibleBodies.Count(); + internal static bool reloaded = false; public static void Init() { @@ -48,6 +50,7 @@ namespace NewHorizons.Handlers // Load player data for fact and persistent condition checking var profileManager = StandaloneProfileManager.SharedInstance; + profileManager.OnProfileSignInComplete += OnProfileSignInComplete; profileManager.PreInitialize(); profileManager.Initialize(); if (profileManager.currentProfile != null) // check if there is even a profile made yet @@ -105,6 +108,16 @@ namespace NewHorizons.Handlers } } + private static void OnProfileSignInComplete(ProfileManagerSignInResult result) + { + NHLogger.LogError($"OnProfileSignInComplete {result}: {StandaloneProfileManager.SharedInstance.currentProfile.profileName}"); + reloaded = true; + + // Taken and modified from SubmitActionLoadScene.ConfirmSubmit + LoadManager.LoadScene(OWScene.TitleScreen); + Locator.GetMenuInputModule().DisableInputs(); + } + public static void InitSubtitles() { GameObject subtitleContainer = SearchUtilities.Find("TitleMenu/TitleCanvas/TitleLayoutGroup/Logo_EchoesOfTheEye"); diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index 54d57707..4e48f881 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -165,7 +165,9 @@ namespace NewHorizons if (wasUsingCustomTitleScreen != CustomTitleScreen && SceneManager.GetActiveScene().name == "TitleScreen" && _wasConfigured) { NHLogger.LogVerbose("Reloading"); - SceneManager.LoadScene("TitleScreen", LoadSceneMode.Single); + // Taken and modified from SubmitActionLoadScene.ConfirmSubmit + LoadManager.LoadScene(OWScene.TitleScreen); + Locator.GetMenuInputModule().DisableInputs(); } _wasConfigured = true; diff --git a/NewHorizons/Patches/TitleScenePatches.cs b/NewHorizons/Patches/TitleScenePatches.cs new file mode 100644 index 00000000..1b5607f8 --- /dev/null +++ b/NewHorizons/Patches/TitleScenePatches.cs @@ -0,0 +1,34 @@ +using HarmonyLib; +using NewHorizons.Handlers; +using NewHorizons.Utility.OWML; +using OWML.Utils; +using UnityEngine; + +namespace NewHorizons.Patches; + +[HarmonyPatch] +internal static class TitleScenePatches +{ + [HarmonyPrefix, HarmonyPatch(typeof(TitleScreenAnimation), nameof(TitleScreenAnimation.Awake))] + public static void TitleScreenAnimation_Awake(TitleScreenAnimation __instance) + { + // Skip Splash on title screen reload + if (TitleSceneHandler.reloaded) + { + TitleSceneHandler.reloaded = false; + + TitleScreenAnimation titleScreenAnimation = __instance; + titleScreenAnimation._fadeDuration = 0; + titleScreenAnimation._gamepadSplash = false; + titleScreenAnimation._introPan = false; + + TitleAnimationController titleAnimationController = GameObject.FindObjectOfType(); + titleAnimationController._logoFadeDelay = 0.001f; + titleAnimationController._logoFadeDuration = 0.001f; + titleAnimationController._optionsFadeDelay = 0.001f; + titleAnimationController._optionsFadeDuration = 0.001f; + titleAnimationController._optionsFadeSpacing = 0.001f; + titleAnimationController.FadeInTitleLogo(); + } + } +}