Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions BeatSurgeon/Gameplay/GameplayManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -1652,21 +1652,20 @@ private IEnumerator PlayLevel(BeatmapLevel level, string announceMessage = null)
randomDiff
);

var additionalInformation = new GameplayAdditionalInformation("Menu", false, false, PlaymodeOptions.Default, null);

_menuTransitionsHelper.StartStandardLevel(
"Solo",
in beatmapKey,
level,
overrideEnvironmentSettings,
_capturedColorScheme,
false,
null,
gameplayModifiers,
playerSettings,
null,
_environmentsListModel,
"Menu",
false,
false,
additionalInformation,
null,
null,
(data, results) =>
Expand Down
16 changes: 3 additions & 13 deletions BeatSurgeon/Harmony/EndlessHarmonyPatch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -271,22 +271,12 @@ T GetFieldValue<T>(object instance, params string[] names) where T : class
var existingSetup = GetFieldValue<StandardLevelScenesTransitionSetupDataSO>(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<StandardLevelScenesTransitionSetupDataSO>();

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}");
Expand Down
44 changes: 7 additions & 37 deletions BeatSurgeon/UI/Controllers/BeatSurgeonCooldownViewController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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...");
Expand Down Expand Up @@ -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);

Expand Down