예제 #1
0
        public static void LoadGameScene(string sceneName = null, bool forceReload = false)
        {
            if (sceneName == null)
            {
                sceneName = SceneUtil.currentScene.name;
            }

            List <SceneTypes> toLookup = new List <SceneTypes> {
                SceneTypes.Menu
            };

            if (SceneUtil.menuSceneNames.Contains(sceneName))
            {
                if (SceneUtil.isInMultiplayer)
                {
                    toLookup.Insert(0, SceneTypes.MultiplayerMenu);
                }
            }
            else if (sceneName == "GameCore")
            {
                toLookup.Insert(0, SceneTypes.Playing);

                if (HookLeveldata.isModdedMap)
                {
                    toLookup.Insert(0, SceneTypes.PlayingModmap);
                }
                else if (HookLeveldata.is360Level)
                {
                    toLookup.Insert(0, SceneTypes.Playing360);
                }

                if (ScoresaberUtil.IsInReplay())
                {
                    toLookup.Insert(0, SceneTypes.Replay);
                }
                else if (SceneUtil.isInMultiplayer)
                {
                    toLookup.Insert(0, SceneTypes.PlayingMulti);

                    if (HookMultiplayerSpectatorController.instance != null)
                    {
                        toLookup.Insert(0, SceneTypes.SpectatingMulti);
                    }
                }
            }

            if (HookFPFCToggle.isInFPFC)
            {
                toLookup.Insert(0, SceneTypes.FPFC);
            }

#if DEBUG
            Plugin.Log.Info($"LoadGameScene -> {string.Join(", ", toLookup)}");
#endif
            SwitchToScene(FindSceneToUse(toLookup.ToArray()), forceReload);
        }
예제 #2
0
        public void OnApplicationStart()
        {
            harmony = new Harmony("Kinsi55.BeatSaber.Cam2");
            harmony.PatchAll(Assembly.GetExecutingAssembly());

            MovementScriptManager.LoadMovementScripts();
            GlobalFPSCap.Init();

            SceneManager.activeSceneChanged += SceneUtil.OnActiveSceneChanged;

            // Marinate the Reflection stuff off-thread so the loading of cameras later is less blocking
            Task.Run(() => {
                ModmapExtensions.Reflect();
                ScoresaberUtil.Reflect();
                CustomNotesUtil.Reflect();
            });
        }