diff --git a/BeatSurgeon/Gameplay/GameplayManager.cs b/BeatSurgeon/Gameplay/GameplayManager.cs index b66a22d..c63dee9 100644 --- a/BeatSurgeon/Gameplay/GameplayManager.cs +++ b/BeatSurgeon/Gameplay/GameplayManager.cs @@ -665,7 +665,7 @@ public void StopEndlessMode() _pendingDownloads.Clear(); _playedLevelIds.Clear(); - _requestQueue.Clear(); + while (_requestQueue.TryDequeue(out _)) { } _inLevelQueueProcessor?.StopProcessing(); _inLevelQueueProcessor.SwitchRequested -= OnSwitchRequestedDuringPlay; // cleanup _inLevelQueueProcessor.PreloadRequested -= OnPreloadRequested; @@ -1652,6 +1652,8 @@ private IEnumerator PlayLevel(BeatmapLevel level, string announceMessage = null) randomDiff ); + var additionalInformation = new GameplayAdditionalInformation("Menu", false, false, PlaymodeOptions.Default, null); + _menuTransitionsHelper.StartStandardLevel( "Solo", in beatmapKey, @@ -1659,14 +1661,11 @@ private IEnumerator PlayLevel(BeatmapLevel level, string announceMessage = null) overrideEnvironmentSettings, _capturedColorScheme, false, - null, gameplayModifiers, playerSettings, null, _environmentsListModel, - "Menu", - false, - false, + additionalInformation, null, null, (data, results) => diff --git a/BeatSurgeon/Harmony/EndlessHarmonyPatch.cs b/BeatSurgeon/Harmony/EndlessHarmonyPatch.cs index 1164bad..4d4bedb 100644 --- a/BeatSurgeon/Harmony/EndlessHarmonyPatch.cs +++ b/BeatSurgeon/Harmony/EndlessHarmonyPatch.cs @@ -271,22 +271,12 @@ T GetFieldValue(object instance, params string[] names) where T : class var existingSetup = GetFieldValue(helper, "_standardLevelScenesTransitionSetupData", "standardLevelScenesTransitionSetupData"); if (existingSetup == null) return; - var stdGameplayInfoField = FindField(typeof(StandardLevelScenesTransitionSetupDataSO), "_standardGameplaySceneInfo", "standardGameplaySceneInfo"); - var gameCoreInfoField = FindField(typeof(StandardLevelScenesTransitionSetupDataSO), "_gameCoreSceneInfo", "gameCoreSceneInfo"); - - if (stdGameplayInfoField == null || gameCoreInfoField == null) return; - - var existingStdGameplayInfo = stdGameplayInfoField.GetValue(existingSetup) as SceneInfo; - var existingGameCoreInfo = gameCoreInfoField.GetValue(existingSetup) as SceneInfo; - var newSetup = ScriptableObject.CreateInstance(); - - stdGameplayInfoField.SetValue(newSetup, existingStdGameplayInfo); - gameCoreInfoField.SetValue(newSetup, existingGameCoreInfo); + var additionalInformation = new GameplayAdditionalInformation("Menu", false, false, PlaymodeOptions.Default, null); newSetup.Init( - "Solo", nextKey, nextLevel, null, color, false, null, modifiers, playerSettings, null, envs, - audioLoader, dataLoader, settingsMgr, "Menu", levelsModel, entitlement, false, false, null + "Solo", nextKey, nextLevel, null, color, false, modifiers, playerSettings, null, envs, + audioLoader, settingsMgr, additionalInformation, dataLoader, entitlement, levelsModel, null, null ); LogUtils.Debug(() => $"EndlessHarmonyPatch: Replacing scenes -> {nextLevel.songName}"); diff --git a/BeatSurgeon/UI/Controllers/BeatSurgeonCooldownViewController.cs b/BeatSurgeon/UI/Controllers/BeatSurgeonCooldownViewController.cs index a9ad314..3bb66f7 100644 --- a/BeatSurgeon/UI/Controllers/BeatSurgeonCooldownViewController.cs +++ b/BeatSurgeon/UI/Controllers/BeatSurgeonCooldownViewController.cs @@ -601,46 +601,16 @@ private IEnumerator InitializeWorldSpacePreview() yield break; } - // Use reflection to access the private standardGameplaySceneInfo field - var gameplaySceneInfoField = typeof(StandardLevelScenesTransitionSetupDataSO).GetField("_standardGameplaySceneInfo", - System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); - - if (gameplaySceneInfoField == null) - { - Plugin.Log.Error("Could not find _standardGameplaySceneInfo field!"); - yield break; - } - - var gameplaySceneInfo = gameplaySceneInfoField.GetValue(standardLevelScenesTransitionSetupData) as SceneInfo; - if (gameplaySceneInfo == null) - { - Plugin.Log.Error("gameplaySceneInfo was null!"); - yield break; - } - - // Use reflection to access the private gameCoreSceneInfo field - var gameCoreSceneInfoField = typeof(StandardLevelScenesTransitionSetupDataSO).GetField("_gameCoreSceneInfo", - System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); - - if (gameCoreSceneInfoField == null) - { - Plugin.Log.Error("Could not find _gameCoreSceneInfo field!"); - yield break; - } - - var gameCoreSceneInfo = gameCoreSceneInfoField.GetValue(standardLevelScenesTransitionSetupData) as SceneInfo; - if (gameCoreSceneInfo == null) - { - Plugin.Log.Error("gameCoreSceneInfo was null!"); - yield break; - } + var sceneNames = standardLevelScenesTransitionSetupData.scenes; + var gameCoreSceneName = sceneNames?.FirstOrDefault(sceneName => sceneName.Contains("GameCore")) ?? "GameCore"; + var gameplaySceneName = sceneNames?.FirstOrDefault(sceneName => sceneName.Contains("StandardGameplay")) ?? "StandardGameplay"; // Load GameCore scene first - var gameCoreLoad = SceneManager.LoadSceneAsync(gameCoreSceneInfo.sceneName, LoadSceneMode.Additive); + var gameCoreLoad = SceneManager.LoadSceneAsync(gameCoreSceneName, LoadSceneMode.Additive); yield return gameCoreLoad; // Load StandardGameplay scene - var gameplayLoad = SceneManager.LoadSceneAsync(gameplaySceneInfo.sceneName, LoadSceneMode.Additive); + var gameplayLoad = SceneManager.LoadSceneAsync(gameplaySceneName, LoadSceneMode.Additive); yield return gameplayLoad; LogUtils.Debug(() => "Gameplay scenes loaded, extracting note prefabs..."); @@ -743,8 +713,8 @@ private IEnumerator InitializeWorldSpacePreview() LogUtils.Debug(() => "Preview notes created successfully!"); // Unload the gameplay scenes - SceneManager.UnloadSceneAsync(gameplaySceneInfo.sceneName); - SceneManager.UnloadSceneAsync(gameCoreSceneInfo.sceneName); + SceneManager.UnloadSceneAsync(gameplaySceneName); + SceneManager.UnloadSceneAsync(gameCoreSceneName); GameObject.Destroy(noteTemplate);