public void OnUpdate() { if (doRefreshLights && SceneManager.GetActiveScene() != null && SceneManager.GetActiveScene().name == "MenuCore") { ColourManager.RefreshLights(); doRefreshLights = false; } if (Input.GetKeyDown(KeyCode.Backslash)) { ChromaConfig.LoadSettings(ChromaConfig.LoadSettingsType.MANUAL); } if (Input.GetKeyDown(KeyCode.Period) && ChromaConfig.DebugMode) { if (Input.GetKey(KeyCode.Alpha1)) { ColourManager.RecolourNeonSign(ColourManager.SignA, ColourManager.SignB); } else if (Input.GetKey(KeyCode.Alpha2)) { ColourManager.RefreshLights(); } else if (Input.GetKey(KeyCode.Alpha3)) { ChromaTesting.Test(); } else { ChromaLogger.Log(" [[ Debug Info ]]"); if (ChromaConfig.TechnicolourEnabled) { ChromaLogger.Log("TechnicolourStyles (Lights | Walls | Notes | Sabers) : " + ChromaConfig.TechnicolourLightsStyle + " | " + ChromaConfig.TechnicolourWallsStyle + " | " + ChromaConfig.TechnicolourBlocksStyle + " | " + ChromaConfig.TechnicolourSabersStyle); ChromaLogger.Log("Technicolour (Lights | Walls | Notes | Sabers) : " + ColourManager.TechnicolourLights + " | " + ColourManager.TechnicolourBarriers + " | " + ColourManager.TechnicolourBlocks + " | " + ColourManager.TechnicolourSabers); } DebugButtonPressedEvent?.Invoke(); } } }
private void Initialize() { try { try { Directory.CreateDirectory(Environment.CurrentDirectory.Replace('\\', '/') + "/UserData/Chroma"); } catch (Exception e) { ChromaLogger.Log("Error " + e.Message + " while trying to create Chroma directory", ChromaLogger.Level.WARNING); } ChromaLogger.Init(); ChromaLogger.Log("************************************", ChromaLogger.Level.INFO); ChromaLogger.Log("Initializing Chroma [" + ChromaPlugin.Version.ToString() + "]", ChromaLogger.Level.INFO); ChromaLogger.Log("************************************", ChromaLogger.Level.INFO); //Used for getting gamemode data mostly try { ChromaLogger.Log("Initializing Coordinators"); BaseGameMode.InitializeCoordinators(); } catch (Exception e) { ChromaLogger.Log("Error initializing coordinators", ChromaLogger.Level.ERROR); throw e; } ChromaLogger.Log("Registering scenechange events"); SceneManager.activeSceneChanged += SceneManagerOnActiveSceneChanged; SceneManager.sceneLoaded += SceneManager_sceneLoaded; //Getting and starting all the extension plugins try { ChromaLogger.Log("Checking for extensions."); foreach (PluginLoader.PluginInfo pluginInfo in PluginManager.AllPlugins) { //We can't get IBeatSaberPlugin references /*if (plugin is IChromaExtension chromaExtension) { * chromaExtension.ChromaApplicationStarted(this); * chromaExtensions.Add(chromaExtension); * }*/ } } catch (Exception) { ChromaLogger.Log("Error adding all Extension plugins! Extension registration interrupted.", ChromaLogger.Level.ERROR); } //Harmony & extension Harmony patches ChromaLogger.Log("Patching with Harmony."); try { coreHarmony.PatchAll(System.Reflection.Assembly.GetExecutingAssembly()); harmonyInstances.Add(coreHarmony); foreach (IChromaExtension extension in chromaExtensions) { HarmonyInstance newPatch = extension.PatchHarmony(); if (newPatch != null) { harmonyInstances.Add(newPatch); } } } catch (Exception e) { ChromaLogger.Log(e); ChromaLogger.Log("This plugin requires Harmony. Either you do not have it installed, or there was an error.", ChromaLogger.Level.ERROR); } ChromaLogger.Log("Creating AudioUtil"); AudioUtil ab = AudioUtil.Instance; //Configuration Files try { ChromaLogger.Log("Initializing Configuration"); ChromaConfig.Init(); ChromaConfig.LoadSettings(ChromaConfig.LoadSettingsType.INITIAL); } catch (Exception e) { ChromaLogger.Log("Error loading Chroma configuration", ChromaLogger.Level.ERROR); throw e; } ChromaLogger.Log("Refreshing Lights"); ColourManager.RefreshLights(); //Side panel try { ChromaLogger.Log("Stealing Patch Notes Panel"); Greetings.RegisterChromaSideMenu(); SidePanelUtil.ReleaseInfoEnabledEvent += ReleaseInfoEnabled; } catch (Exception e) { ChromaLogger.Log("Error handling UI side panel", ChromaLogger.Level.ERROR); throw e; } } catch (Exception e) { ChromaLogger.Log("Failed to initialize ChromaPlugin! Major error!", ChromaLogger.Level.ERROR); ChromaLogger.Log(e); } ChromaLogger.Log("Chroma finished initializing. " + chromaExtensions.Count + " extensions found.", ChromaLogger.Level.INFO); try { SongCore.Collections.RegisterCapability("Chroma"); SongCore.Collections.RegisterCapability("ChromaLite"); } catch (Exception) { // This version of SongLoader doesn't support capabilities } }
private void GCSSFound(Scene scene, GameplayCoreSceneSetup gcss) { ChromaLogger.Log("Found GCSS!", ChromaLogger.Level.DEBUG); //Plugin.PlayReloadSound(); _playerController = FindObjectOfType <PlayerController>(); if (_playerController == null) { ChromaLogger.Log("Player Controller not found!", ChromaLogger.Level.WARNING); } /*if (!SceneUtils.IsTargetGameScene(scene.buildIndex)) { * ChromaLogger.Log("Somehow we got to the point where we override a map, while not playing a map. How did this happen?", ChromaLogger.Level.WARNING); * return; * }*/ if (gcss == null) { ChromaLogger.Log("Failed to obtain MainGameSceneSetup", ChromaLogger.Level.WARNING); return; } //GameplayCoreSetupData mgData = ReflectionUtil.GetPrivateField<MainGameSceneSetupData>(mgs, "_mainGameSceneSetupData"); BS_Utils.Gameplay.LevelData levelData = BS_Utils.Plugin.LevelData; if (!levelData.IsSet) { ChromaLogger.Log("BS_Utils LevelData is not set", ChromaLogger.Level.WARNING); return; } PlayerSpecificSettings playerSettings = BS_Utils.Plugin.LevelData.GameplayCoreSceneSetupData.playerSpecificSettings; //Map BeatmapDataModel _beatmapDataModel = ReflectionUtil.GetField <BeatmapDataModel>(gcss, "_beatmapDataModel"); if (_beatmapDataModel == null) { ChromaLogger.Log("{XXX} : NULL BEATMAP DATA MODEL", ChromaLogger.Level.ERROR); } if (_beatmapDataModel.beatmapData == null) { ChromaLogger.Log("{XXX} : NULL BEATMAP DATA MODEL BEATMAP DATA", ChromaLogger.Level.ERROR); } //BeatmapData beatmapData = CreateTransformedBeatmapData(mgData.difficultyLevel.beatmapData, mgData.gameplayOptions, mgData.gameplayMode); BeatmapData beatmapData = CreateTransformedBeatmapData(_beatmapDataModel.beatmapData, playerSettings, BaseGameMode.CurrentBaseGameMode); if (beatmapData != null) { _beatmapDataModel.beatmapData = beatmapData; ReflectionUtil.SetField(gcss, "_beatmapDataModel", _beatmapDataModel); } foreach (IChromaBehaviourExtension extension in extensions) { extension.PostInitialization(songBPM, beatmapData, playerSettings, scoreController); } //modes = GetModes(mgData.gameplayMode, chromaSong); if (ChromaConfig.DebugMode) { Console.WriteLine(); Console.WriteLine(); ChromaLogger.Log("Gamemode: " + BaseGameMode.CurrentBaseGameMode.ToString() + " -- Party: " + BaseGameMode.PartyMode, ChromaLogger.Level.DEBUG); } //ChromaLogger.Log("Modify Sabers was called", ChromaLogger.Level.DEBUG); ColourManager.RefreshLights(); if (ChromaConfig.LightshowModifier) { foreach (Saber saber in GameObject.FindObjectsOfType <Saber>()) { saber.gameObject.SetActive(false); } } }