public void SongFinished(StandardLevelSceneSetupDataSO sender, LevelCompletionResults levelCompletionResults, IDifficultyBeatmap difficultyBeatmap, GameplayModifiers gameplayModifiers) { try { if (sender == null || levelCompletionResults == null || difficultyBeatmap == null || gameplayModifiers == null) { return; } Logger.Debug("Finished song: " + levelCompletionResults.levelEndStateType + " - " + levelCompletionResults.songDuration + " - - " + levelCompletionResults.endSongTime); PlayerDataModelSO _playerDataModel = Resources.FindObjectsOfTypeAll <PlayerDataModelSO>().First(); _playerDataModel.currentLocalPlayer.playerAllOverallStatsData.soloFreePlayOverallStatsData.UpdateWithLevelCompletionResults(levelCompletionResults); _playerDataModel.Save(); if (levelCompletionResults.levelEndStateType != LevelCompletionResults.LevelEndStateType.Failed && levelCompletionResults.levelEndStateType != LevelCompletionResults.LevelEndStateType.Cleared) { return; } PlayerDataModelSO.LocalPlayer currentLocalPlayer = _playerDataModel.currentLocalPlayer; bool cleared = levelCompletionResults.levelEndStateType == LevelCompletionResults.LevelEndStateType.Cleared; string levelID = difficultyBeatmap.level.levelID; BeatmapDifficulty difficulty = difficultyBeatmap.difficulty; PlayerLevelStatsData playerLevelStatsData = currentLocalPlayer.GetPlayerLevelStatsData(levelID, difficulty); bool newHighScore = playerLevelStatsData.highScore < levelCompletionResults.score; playerLevelStatsData.IncreaseNumberOfGameplays(); if (cleared) { playerLevelStatsData.UpdateScoreData(levelCompletionResults.score, levelCompletionResults.maxCombo, levelCompletionResults.fullCombo, levelCompletionResults.rank); Resources.FindObjectsOfTypeAll <PlatformLeaderboardsModel>().First().AddScore(difficultyBeatmap, levelCompletionResults.unmodifiedScore, gameplayModifiers); } } catch (Exception e) { Data.Logger.Error(e); } }
///////////////////////////////////////////////////////////////////////////////////////////////////////////// void Awake() { timeBRU = (timeAccuracy * timeBFU); hoursInFixedUpdate = (timeBRU / 3600); lvlData = Resources.FindObjectsOfTypeAll <StandardLevelSceneSetupDataSO>().FirstOrDefault(); if (lbsOrKgs) { weightKg = playerWeightkgs; } else { weightKg = playerWeightlbs * 0.4535924f; } //////////////////////////////////////////////////////////////////////////////////////// LiveCountText = this.gameObject.AddComponent <TextMeshPro>(); LiveCountText.renderer.enabled = dcc; LiveCountText.text = "0"; LiveCountText.fontSize = 4; LiveCountText.color = Color.white; LiveCountText.font = Resources.Load <TMP_FontAsset>("Beon SDF No-Glow"); LiveCountText.alignment = TextAlignmentOptions.Center; LiveCountText.rectTransform.position = Plugin.counterPosition + new Vector3(0, -0.4f, 0); //////////////////////////////////////////////////////////////////////////////////////// LiveCount = new GameObject("Label"); TextMeshPro label = LiveCount.AddComponent <TextMeshPro>(); label.renderer.enabled = dcc; label.text = "Calories"; label.fontSize = 3; label.color = Color.white; label.font = Resources.Load <TMP_FontAsset>("Beon SDF No-Glow"); label.alignment = TextAlignmentOptions.Center; label.rectTransform.position = Plugin.counterPosition; }
private void MainGameSceneSetupDataOnDidFinishEvent(StandardLevelSceneSetupDataSO levelData, LevelCompletionResults results) { /* * * if (!NoFail && HasTimeScaleChanged && results != null && * results.levelEndStateType == LevelCompletionResults.LevelEndStateType.Cleared) * { * levelData.gameplayCoreSetupData.gameplayModifiers.noFail = true; * _resetNoFail = true; * } */ }
private void LevelData_didFinishEvent(StandardLevelSceneSetupDataSO arg1, LevelCompletionResults arg2) { if (arg2.levelEndStateType == LevelCompletionResults.LevelEndStateType.Quit) { return; } if (arg2.levelEndStateType == LevelCompletionResults.LevelEndStateType.Restart) { return; } if (GMPUI.repeatSong) { ReflectionUtil.SetProperty(arg2, "levelEndStateType", LevelCompletionResults.LevelEndStateType.Restart); } }
private IEnumerator <WaitForEndOfFrame> setupCamerasCoroutine() { yield return(new WaitForEndOfFrame()); StandardLevelSceneSetupDataSO levelSetup = Resources.FindObjectsOfTypeAll <StandardLevelSceneSetupDataSO>().FirstOrDefault(); Camera mainCamera = Camera.main; if (Plugin.IsHMDOn && levelSetup.gameplayCoreSetupData.gameplayModifiers.noFail) { mainCamera.cullingMask &= ~(1 << WallLayer); } else { mainCamera.cullingMask |= (1 << WallLayer); } try { LIV.SDK.Unity.LIV.FindObjectsOfType <LIV.SDK.Unity.LIV>().Where(x => livNames.Contains(x.name)).ToList().ForEach(l => { if (Plugin.IsLIVCameraOn) { LayersToMask.ForEach(i => { l.SpectatorLayerMask &= ~(1 << i); }); } }); GameObject.FindObjectsOfType <Camera>().Where(c => (c.name.ToLower().EndsWith(".cfg"))).ToList().ForEach(c => { if (_excludedCams.Contains(c.name.ToLower())) { LayersToMask.ForEach(i => { c.cullingMask |= (1 << i); }); } else { if (Plugin.IsCameraPlusOn) { LayersToMask.ForEach(i => { c.cullingMask &= ~(1 << i); }); } else { LayersToMask.ForEach(i => { c.cullingMask |= (1 << i); }); } } }); } catch (Exception ex) { Console.WriteLine($"[TransparentWall] {ex.Message}\n{ex.StackTrace}"); } }
Task GetCalories() { return(Task.Run(() => { while (true) { lvlData = Resources.FindObjectsOfTypeAll <StandardLevelSceneSetupDataSO>().FirstOrDefault(); saberRating = Resources.FindObjectsOfTypeAll <ScoreController>().FirstOrDefault(); if (saberRating != null) { break; } Thread.Sleep(10); } Init(); })); }
private static void LevelData_didFinishEvent(StandardLevelSceneSetupDataSO arg1, LevelCompletionResults arg2) { switch (arg2.levelEndStateType) { case LevelCompletionResults.LevelEndStateType.Quit: disabled = false; ModList.Clear(); break; case LevelCompletionResults.LevelEndStateType.Failed: disabled = false; ModList.Clear(); break; case LevelCompletionResults.LevelEndStateType.None: disabled = false; ModList.Clear(); break; } }
public static void GetSongInfo() { if (_mainGameSceneSetupData == null) { _mainGameSceneSetupData = Resources.FindObjectsOfTypeAll <StandardLevelSceneSetupDataSO>().FirstOrDefault(); } //Get notes count noteCount = _mainGameSceneSetupData.difficultyBeatmap.beatmapData.notesCount; PlayerDataModelSO playerData = Resources.FindObjectsOfTypeAll <PlayerDataModelSO>().FirstOrDefault(); PlayerLevelStatsData playerLevelData = playerData.currentLocalPlayer.GetPlayerLevelStatsData(_mainGameSceneSetupData.difficultyBeatmap.level.levelID, _mainGameSceneSetupData.difficultyBeatmap.difficulty); //Get Player Score if (playerScore == 0) { Log("Attempting to grab Local Score"); playerScore = playerLevelData.validScore ? playerLevelData.highScore : 0; } CalculatePercentage(); }
private void Start() { try { Plugin.RemovePatches(); Console.WriteLine("Darth Maul Loaded"); this._playerController = FindObjectOfType <PlayerController>(); this._head = ReflectionUtil.GetPrivateField <Transform>(_playerController, "_headTransform"); this.isDarthModeOn = Plugin.IsDarthModeOn; this.isOneHanded = Plugin.IsOneHanded; this.mainController = Plugin.MainController; this.isAutoDetect = Plugin.IsAutoDetect; this.separation = Plugin.Separation; hapticFeedbackHooks = new HapticFeedbackHooks(); hapticFeedbackHooks.StartHooking(); //var _mainGameSceneSetup = FindObjectOfType<MainGameSceneSetup>(); //_mainGameSceneSetupData = ReflectionUtil.GetPrivateField<MainGameSceneSetupData>(_mainGameSceneSetup, "_mainGameSceneSetupData"); levelSetup = Resources.FindObjectsOfTypeAll <StandardLevelSceneSetupDataSO>().FirstOrDefault(); GameplayCoreSceneSetup gameplayCoreSceneSetup = Resources.FindObjectsOfTypeAll <GameplayCoreSceneSetup>().First(); if (Plugin.IsDarthModeOn) { Plugin.ApplyPatches(); var _beatmapDataModel = ReflectionUtil.GetPrivateField <BeatmapDataModel>(gameplayCoreSceneSetup, "_beatmapDataModel"); var beatmapData = CreateTransformedBeatmapData(levelSetup.difficultyBeatmap.beatmapData.GetCopy(), levelSetup); if (beatmapData != null) { _beatmapDataModel.beatmapData = beatmapData; } } } catch (Exception ex) { Console.WriteLine(ex.Message + "\n" + ex.StackTrace); } }
public void SongFinished(StandardLevelSceneSetupDataSO sender, LevelCompletionResults levelCompletionResults, IDifficultyBeatmap difficultyBeatmap, GameplayModifiers gameplayModifiers, bool practice) { if (Client.Instance.InRadioMode) { PluginUI.instance.radioFlowCoordinator.lastDifficulty = difficultyBeatmap; PluginUI.instance.radioFlowCoordinator.lastResults = levelCompletionResults; } if (Config.Instance.SpectatorMode || Client.disableScoreSubmission || ScoreSubmission.Disabled || ScoreSubmission.ProlongedDisabled) { return; } PlayerDataModelSO _playerDataModel = Resources.FindObjectsOfTypeAll <PlayerDataModelSO>().First(); _playerDataModel.currentLocalPlayer.playerAllOverallStatsData.soloFreePlayOverallStatsData.UpdateWithLevelCompletionResults(levelCompletionResults); _playerDataModel.Save(); if (levelCompletionResults.levelEndStateType != LevelCompletionResults.LevelEndStateType.Failed && levelCompletionResults.levelEndStateType != LevelCompletionResults.LevelEndStateType.Cleared) { return; } PlayerDataModelSO.LocalPlayer currentLocalPlayer = _playerDataModel.currentLocalPlayer; bool cleared = levelCompletionResults.levelEndStateType == LevelCompletionResults.LevelEndStateType.Cleared; string levelID = difficultyBeatmap.level.levelID; BeatmapDifficulty difficulty = difficultyBeatmap.difficulty; PlayerLevelStatsData playerLevelStatsData = currentLocalPlayer.GetPlayerLevelStatsData(levelID, difficulty); bool newHighScore = playerLevelStatsData.highScore < levelCompletionResults.score; playerLevelStatsData.IncreaseNumberOfGameplays(); if (cleared) { playerLevelStatsData.UpdateScoreData(levelCompletionResults.score, levelCompletionResults.maxCombo, levelCompletionResults.fullCombo, levelCompletionResults.rank); Resources.FindObjectsOfTypeAll <PlatformLeaderboardsModel>().First().AddScore(difficultyBeatmap, levelCompletionResults.unmodifiedScore, gameplayModifiers); } }
private void OnSceneLoaded(Scene newScene, LoadSceneMode mode) { string templateText; if (!File.Exists(_templatePath)) { templateText = _defaultTemplate; File.WriteAllText(_templatePath, templateText); } else { templateText = File.ReadAllText(_templatePath); } if (newScene.name == MenuSceneName) { //Menu scene loaded File.WriteAllText(_statusPath, string.Empty); _beatmapCharacteristicSelectionViewController = Resources.FindObjectsOfTypeAll <BeatmapCharacteristicSelectionViewController>().FirstOrDefault(); if (_beatmapCharacteristicSelectionViewController == null) { return; } _beatmapCharacteristicSelectionViewController.didSelectBeatmapCharacteristicEvent += this.OnDidSelectBeatmapCharacteristicEvent; } else if (newScene.name != MenuSceneName) { _mainSetupData = Resources.FindObjectsOfTypeAll <StandardLevelSceneSetupDataSO>().FirstOrDefault(); if (_mainSetupData == null) { Console.WriteLine("Song Status: Error finding the scriptable objects required to update presence."); return; } //Main game scene loaded var diff = _mainSetupData.difficultyBeatmap; var song = diff.level; var mods = _mainSetupData.gameplayCoreSetupData.gameplayModifiers; var modsList = string.Empty; if (!mods.IsWithoutModifiers()) { modsList += mods.instaFail ? "Instant Fail, " : string.Empty; modsList += mods.batteryEnergy ? "Battery Energy, " : string.Empty; modsList += mods.disappearingArrows ? "Disappearing Arrows, " : string.Empty; modsList += mods.noBombs ? "No Bombs, " : string.Empty; modsList += mods.noObstacles ? "No Walls, " : string.Empty; modsList += mods.songSpeedMul != 1.0f ? "Speed " + mods.songSpeedMul + "x" : string.Empty; modsList = modsList.Trim(new char[] { ' ', ',' }); } var gameplayModeText = _gamemode == GameMode.OneSaber ? "One Saber" : _gamemode == GameMode.NoArrows ? "No Arrow" : "Standard"; var keywords = templateText.Split('{', '}'); templateText = ReplaceKeyword("songName", song.songName, keywords, templateText); templateText = ReplaceKeyword("songSubName", song.songSubName, keywords, templateText); templateText = ReplaceKeyword("authorName", song.songAuthorName, keywords, templateText); templateText = ReplaceKeyword("gamemode", gameplayModeText, keywords, templateText); templateText = ReplaceKeyword("difficulty", diff.difficulty.Name(), keywords, templateText); templateText = ReplaceKeyword("isNoFail", mods.noFail ? "No Fail" : string.Empty, keywords, templateText); templateText = ReplaceKeyword("modifiers", modsList, keywords, templateText); templateText = ReplaceKeyword("beatsPerMinute", song.beatsPerMinute.ToString(CultureInfo.InvariantCulture), keywords, templateText); templateText = ReplaceKeyword("notesCount", diff.beatmapData.notesCount.ToString(CultureInfo.InvariantCulture), keywords, templateText); templateText = ReplaceKeyword("obstaclesCount", diff.beatmapData.obstaclesCount.ToString(CultureInfo.InvariantCulture), keywords, templateText); File.WriteAllText(_statusPath, templateText); } }
private void OnActiveSceneChanged(Scene oldScene, Scene newScene) { GameStatus gameStatus = statusManager.gameStatus; gameStatus.scene = newScene.name; if (newScene.name == "Menu") { // Menu gameStatus.scene = "Menu"; // TODO: get the current song, mode and mods while in menu gameStatus.ResetMapInfo(); gameStatus.ResetPerformance(); statusManager.EmitStatusUpdate(ChangedProperties.AllButNoteCut, "menu"); } else if (newScene.name == "GameCore") { // In game gameStatus.scene = "Song"; levelSceneSetupData = FindFirstOrDefault <StandardLevelSceneSetupDataSO>(); gamePauseManager = FindFirstOrDefault <GamePauseManager>(); scoreController = FindFirstOrDefault <ScoreController>(); gameplayManager = FindFirstOrDefault <StandardLevelGameplayManager>(); beatmapObjectCallbackController = FindFirstOrDefault <BeatmapObjectCallbackController>(); gameplayModifiersSO = FindFirstOrDefault <GameplayModifiersModelSO>(); audioTimeSyncController = FindFirstOrDefault <AudioTimeSyncController>(); playerHeadAndObstacleInteraction = FindFirstOrDefault <PlayerHeadAndObstacleInteraction>(); gameEnergyCounter = FindFirstOrDefault <GameEnergyCounter>(); // Register event listeners // private GameEvent GamePauseManager#_gameDidPauseSignal AddSubscriber(gamePauseManager, "_gameDidPauseSignal", OnGamePause); // private GameEvent GamePauseManager#_gameDidResumeSignal AddSubscriber(gamePauseManager, "_gameDidResumeSignal", OnGameResume); // public ScoreController#noteWasCutEvent<NoteData, NoteCutInfo, int multiplier> // called after AfterCutScoreBuffer is created scoreController.noteWasCutEvent += OnNoteWasCut; // public ScoreController#noteWasMissedEvent<NoteData, int multiplier> scoreController.noteWasMissedEvent += OnNoteWasMissed; // public ScoreController#scoreDidChangeEvent<int> // score scoreController.scoreDidChangeEvent += OnScoreDidChange; // public ScoreController#comboDidChangeEvent<int> // combo scoreController.comboDidChangeEvent += OnComboDidChange; // public ScoreController#multiplierDidChangeEvent<int, float> // multiplier, progress [0..1] scoreController.multiplierDidChangeEvent += OnMultiplierDidChange; // private GameEvent GameplayManager#_levelFinishedSignal AddSubscriber(gameplayManager, "_levelFinishedSignal", OnLevelFinished); // private GameEvent GameplayManager#_levelFailedSignal AddSubscriber(gameplayManager, "_levelFailedSignal", OnLevelFailed); // public event Action<BeatmapEventData> BeatmapObjectCallbackController#beatmapEventDidTriggerEvent beatmapObjectCallbackController.beatmapEventDidTriggerEvent += OnBeatmapEventDidTrigger; IDifficultyBeatmap diff = levelSceneSetupData.difficultyBeatmap; IBeatmapLevel level = diff.level; // TODO: Figure out how to detect game mode. // gameStatus.mode = levelSceneSetupData.gameplayCoreSetupData.gameplayModifiers.ToString(); GameplayModifiers gameplayModifiers = levelSceneSetupData.gameplayCoreSetupData.gameplayModifiers; PlayerSpecificSettings playerSettings = levelSceneSetupData.gameplayCoreSetupData.playerSpecificSettings; PracticeSettings practiceSettings = levelSceneSetupData.gameplayCoreSetupData.practiceSettings; float songSpeedMul = gameplayModifiers.songSpeedMul; if (practiceSettings != null) { songSpeedMul = practiceSettings.songSpeedMul; } float modifierMultiplier = gameplayModifiersSO.GetTotalMultiplier(gameplayModifiers); gameStatus.songName = level.songName; gameStatus.songSubName = level.songSubName; gameStatus.songAuthorName = level.songAuthorName; gameStatus.songBPM = level.beatsPerMinute; gameStatus.songTimeOffset = (long)(level.songTimeOffset * 1000f / songSpeedMul); gameStatus.length = (long)(level.audioClip.length * 1000f / songSpeedMul); gameStatus.start = GetCurrentTime() - (long)(audioTimeSyncController.songTime * 1000f / songSpeedMul); if (practiceSettings != null) { gameStatus.start -= (long)(practiceSettings.startSongTime * 1000f / songSpeedMul); } gameStatus.paused = 0; gameStatus.difficulty = diff.difficulty.Name(); gameStatus.notesCount = diff.beatmapData.notesCount; gameStatus.bombsCount = diff.beatmapData.bombsCount; gameStatus.obstaclesCount = diff.beatmapData.obstaclesCount; gameStatus.maxScore = ScoreController.GetScoreForGameplayModifiersScoreMultiplier(ScoreController.MaxScoreForNumberOfNotes(diff.beatmapData.notesCount), modifierMultiplier); gameStatus.maxRank = RankModel.MaxRankForGameplayModifiers(gameplayModifiers, gameplayModifiersSO).ToString(); try { // From https://support.unity3d.com/hc/en-us/articles/206486626-How-can-I-get-pixels-from-unreadable-textures- var texture = level.coverImage.texture; var active = RenderTexture.active; var temporary = RenderTexture.GetTemporary( texture.width, texture.height, 0, RenderTextureFormat.Default, RenderTextureReadWrite.Linear ); Graphics.Blit(texture, temporary); RenderTexture.active = temporary; var cover = new Texture2D(texture.width, texture.height); cover.ReadPixels(new Rect(0, 0, temporary.width, temporary.height), 0, 0); cover.Apply(); RenderTexture.active = active; RenderTexture.ReleaseTemporary(temporary); gameStatus.songCover = System.Convert.ToBase64String( ImageConversion.EncodeToPNG(cover) ); } catch { gameStatus.songCover = null; } gameStatus.ResetPerformance(); gameStatus.modifierMultiplier = modifierMultiplier; gameStatus.songSpeedMultiplier = songSpeedMul; gameStatus.batteryLives = gameEnergyCounter.batteryLives; gameStatus.modObstacles = gameplayModifiers.enabledObstacleType.ToString(); gameStatus.modInstaFail = gameplayModifiers.instaFail; gameStatus.modNoFail = gameplayModifiers.noFail; gameStatus.modBatteryEnergy = gameplayModifiers.batteryEnergy; gameStatus.modDisappearingArrows = gameplayModifiers.disappearingArrows; gameStatus.modNoBombs = gameplayModifiers.noBombs; gameStatus.modSongSpeed = gameplayModifiers.songSpeed.ToString(); gameStatus.modFailOnSaberClash = gameplayModifiers.failOnSaberClash; gameStatus.modStrictAngles = gameplayModifiers.strictAngles; gameStatus.staticLights = playerSettings.staticLights; gameStatus.leftHanded = playerSettings.leftHanded; gameStatus.swapColors = playerSettings.swapColors; gameStatus.playerHeight = playerSettings.playerHeight; gameStatus.disableSFX = playerSettings.disableSFX; gameStatus.noHUD = playerSettings.noTextsAndHuds; gameStatus.advancedHUD = playerSettings.advancedHud; statusManager.EmitStatusUpdate(ChangedProperties.AllButNoteCut, "songStart"); } }
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"); StandardLevelSceneSetup slsSetup = Resources.FindObjectsOfTypeAll <StandardLevelSceneSetup>().FirstOrDefault(); if (slsSetup == null) { ChromaLogger.Log("Failed to find StandardLevelSceneSetup", ChromaLogger.Level.WARNING); return; } StandardLevelSceneSetupDataSO slsData = slsSetup.standardLevelSceneSetupData; if (slsData == null) { ChromaLogger.Log("Failed to obtain StandardLevelSceneSetupDataSO from StandardLevelSceneSetup", ChromaLogger.Level.WARNING); return; } PlayerSpecificSettings playerSettings = slsData.gameplayCoreSetupData.playerSpecificSettings; ChromaLogger.Log("SLSSetup, SLSData, and PlayerSettings!", ChromaLogger.Level.DEBUG); //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); } } }
private void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) { if (scene.name == ("Menu")) { activateDuringIsolated = false; Log("Switched to Menu"); SharedCoroutineStarter.instance.StartCoroutine(GrabPP()); if (_hasRegistered == false) { try { TwitchConnection.Instance.StartConnection(); TwitchConnection.Instance.RegisterOnMessageReceived(TwitchConnection_OnMessageReceived); if (multiInstalled) { TwitchConnection.Instance.RegisterOnMessageReceived(multi.TwitchConnectionMulti_OnMessageReceived); } _hasRegistered = true; } catch (Exception ex) { Log("Failed To Connect with Async Twitch, Check Config and Internet Connection"); Log(ex.ToString()); } } var controllers = Resources.FindObjectsOfTypeAll <VRController>(); if (controllers != null) { foreach (VRController controller in controllers) { if (controller != null) { if (controller.ToString() == "ControllerLeft (VRController)") { leftController = controller; } if (controller.ToString() == "ControllerRight (VRController)") { rightController = controller; } } // Log(controller.ToString()); } // Log("Left:" + leftController.ToString()); // Log("Right: " + rightController.ToString()); } } if (scene.name == "GameCore") { RemovePatches(); } if (_mainSettingsModel == null) { var menu = Resources.FindObjectsOfTypeAll <MainMenuViewController>().FirstOrDefault(); if (menu != null) { _mainSettingsModel = menu.GetField <MainSettingsModel>("_mainSettingsModel"); _mainSettingsModel.Load(); Log("RUMBLE: " + _mainSettingsModel.controllersRumbleEnabled.ToString()); if (!setDefaultRumble) { defaultRumble = _mainSettingsModel.controllersRumbleEnabled; ModPrefs.SetInt("GameplayModifiersPlus", "GameRumbleSetting", _mainSettingsModel.controllersRumbleEnabled ? 1 : 0); setDefaultRumble = true; Log("Set Default Rumble Value"); } } } if (_mainSettingsModel != null) { defaultRumble = ModPrefs.GetInt("GameplayModifiersPlus", "GameRumbleSetting", -1, false) != 1 ? false : true; _mainSettingsModel.controllersRumbleEnabled = defaultRumble; _mainSettingsModel.Save(); } paused = false; if (!customColorsInstalled) { if (colorA != null) { colorA.SetColor(defColorA); } if (colorB != null) { colorB.SetColor(defColorB); } } // try // { if (scene.name == "EmptyTransition") { Log("Resetting Chat Powers Object"); if (chatPowers != null) { GameObject.Destroy(chatPowers); } } if (chatPowers == null) { Log("Null Creation of Chat Powers Object"); chatPowers = new GameObject("Chat Powers"); GameObject.DontDestroyOnLoad(chatPowers); twitchPowers = chatPowers.AddComponent <TwitchPowers>(); } // } // catch(Exception ex) // { // Log(ex.ToString()); // } GMPDisplay display = chatPowers.GetComponent <GMPDisplay>(); if (display != null) { display.Destroy(); GameObject.Destroy(display); } ReadPrefs(); if (GMPUI.chatIntegration) { if (twitchPowers != null) { cooldowns.ResetCooldowns(); TwitchPowers.ResetPowers(false); twitchPowers.StopAllCoroutines(); } if (ChatConfig.resetChargesperLevel) { charges = 0; } } // twitchCommands.StopAllCoroutines(); haveSongNJS = false; if (soundIsPlaying == true) { gnomeSound.Stop(); } soundIsPlaying = false; isValidScene = false; playerInfo = false; if (arg0.name == "EmpyTransition" && chatPowers != null) { GameObject.Destroy(chatPowers); } if (scene.name == "GameCore") { if (BS_Utils.Gameplay.Gamemode.IsIsolatedLevel && !activateDuringIsolated) { return; } GameObject.Destroy(GameObject.Find("Color Setter")); environmentColorsSetter = Resources.FindObjectsOfTypeAll <EnvironmentColorsSetter>().FirstOrDefault(); soundEffectManager = Resources.FindObjectsOfTypeAll <NoteCutSoundEffectManager>().First(); levelData = Resources.FindObjectsOfTypeAll <StandardLevelSceneSetupDataSO>().First(); spawnController = Resources.FindObjectsOfTypeAll <BeatmapObjectSpawnController>().First(); energyCounter = Resources.FindObjectsOfTypeAll <GameEnergyCounter>().First(); energyPanel = Resources.FindObjectsOfTypeAll <GameEnergyUIPanel>().First(); ColorManager = Resources.FindObjectsOfTypeAll <ColorManager>().First(); spawnController.noteDidStartJumpEvent += SpawnController_ModifiedJump; spawnController.noteWasCutEvent += SpawnController_ScaleRemoveCut; spawnController.noteWasMissedEvent += SpawnController_ScaleRemoveMiss; currentSongSpeed = levelData.gameplayCoreSetupData.gameplayModifiers.songSpeedMul; levelData.didFinishEvent += LevelData_didFinishEvent; if (!Multiplayer.MultiMain.multiActive) { if (GMPUI.chatIntegration && ChatConfig.maxCharges > 0) { chatPowers.AddComponent <GMPDisplay>(); } if (GMPUI.chatIntegration && ChatConfig.timeForCharges > 0) { twitchPowers.StartCoroutine(TwitchPowers.ChargeOverTime()); } } pauseManager = Resources.FindObjectsOfTypeAll <StandardLevelGameplayManager>().First(); var colors = Resources.FindObjectsOfTypeAll <SimpleColorSO>(); foreach (SimpleColorSO color in colors) { // Log(color.name); if (color.name == "Color0") { colorA = color; } if (color.name == "Color1") { colorB = color; } } oldColorA.SetColor(colorA); oldColorB.SetColor(colorB); Log(colorA.color.ToString()); if (GMPUI.chatIntegration && charges <= ChatConfig.maxCharges) { charges += ChatConfig.chargesPerLevel; if (charges > ChatConfig.maxCharges) { charges = ChatConfig.maxCharges; } // TwitchConnection.Instance.SendChatMessage("Current Charges: " + charges); } // ReflectionUtil.SetProperty(typeof(PracticePlugin.Plugin), "TimeScale", 1f); isValidScene = true; AudioTimeSync = Resources.FindObjectsOfTypeAll <AudioTimeSyncController>().FirstOrDefault(); if (AudioTimeSync != null) { songAudio = AudioTimeSync.GetField <AudioSource>("_audioSource"); if (songAudio != null) { Log("Audio not null"); } Log("Object Found"); } //Get Sabers player = Resources.FindObjectsOfTypeAll <PlayerController>().FirstOrDefault(); if (player != null) { leftSaber = player.leftSaber; rightSaber = player.rightSaber; playerInfo = true; } else { playerInfo = false; Log("Player is null"); } CheckGMPModifiers(); } }
public static BeatmapData CreateTransformedBeatmapData(BeatmapData beatmapData, StandardLevelSceneSetupDataSO levelSetup) { BeatmapData beatmapData2 = beatmapData; if (selectedCharacteristic == "No Arrows") { beatmapData2 = BeatmapDataNoArrowsTransform.CreateTransformedData(beatmapData2); } //This covers all of the modifiers and player settings that were here previously beatmapData2 = BeatDataTransformHelper.CreateTransformedBeatmapData(beatmapData2, levelSetup.gameplayCoreSetupData.gameplayModifiers, levelSetup.gameplayCoreSetupData.practiceSettings, levelSetup.gameplayCoreSetupData.playerSpecificSettings); if (beatmapData2 == beatmapData) { beatmapData2 = beatmapData.GetCopy(); } return(beatmapData2); }
private static void FinishSong(StandardLevelSceneSetupDataSO sender, LevelCompletionResults levelCompletionResults) { GameController.Instance.SongFinished(sender, levelCompletionResults, _difficultyBeatmap, _gameplayModifiers); }
private void OnSceneTransitioned(Scene activeScene) { GameObject.Destroy(GameObject.Find("SongLoader Color Setter")); customSongColors = IllusionPlugin.ModPrefs.GetBool("Songloader", "customSongColors", true, true); customSongPlatforms = IllusionPlugin.ModPrefs.GetBool("Songloader", "customSongPlatforms", true, true); if (AreSongsLoading) { //Scene changing while songs are loading. Since we are using a separate thread while loading, this is bad and could cause a crash. //So we have to stop loading. if (_loadingTask != null) { _loadingTask.Cancel(); _loadingCancelled = true; AreSongsLoading = false; LoadingProgress = 0; StopAllCoroutines(); _progressBar.ShowMessage("Loading cancelled\n<size=80%>Press Ctrl+R to refresh</size>"); Log("Loading was cancelled by player since they loaded another scene."); } } StartCoroutine(WaitRemoveScores()); if (activeScene.name == MenuSceneName) { CurrentLevelPlaying = null; if (CustomLevelCollectionSO == null) { var levelCollectionSO = Resources.FindObjectsOfTypeAll <LevelCollectionSO>().FirstOrDefault(); CustomLevelCollectionSO = CustomLevelCollectionSO.ReplaceOriginal(levelCollectionSO); } else { CustomLevelCollectionSO.ReplaceReferences(); } if (_standardLevelDetailViewController == null) { _standardLevelDetailViewController = Resources.FindObjectsOfTypeAll <StandardLevelDetailViewController>().FirstOrDefault(); if (_standardLevelDetailViewController == null) { return; } _standardLevelDetailViewController.didPressPlayButtonEvent += StandardLevelDetailControllerOnDidPressPlayButtonEvent; } if (_LevelListViewController == null) { _LevelListViewController = Resources.FindObjectsOfTypeAll <LevelListViewController>().FirstOrDefault(); if (_LevelListViewController == null) { return; } _LevelListViewController.didSelectLevelEvent += StandardLevelListViewControllerOnDidSelectLevelEvent; } if (_characteristicViewController == null) { _characteristicViewController = Resources.FindObjectsOfTypeAll <BeatmapCharacteristicSelectionViewController>().FirstOrDefault(); if (_characteristicViewController == null) { return; } _characteristicViewController.didSelectBeatmapCharacteristicEvent += OnDidSelectBeatmapCharacteristicEvent; } if (CustomPlatformsPresent) { CheckForPreviousPlatform(); } } else if (activeScene.name == GameSceneName) { _standardLevelSceneSetupData = Resources.FindObjectsOfTypeAll <StandardLevelSceneSetupDataSO>().FirstOrDefault(); if (_standardLevelSceneSetupData == null) { return; } var level = _standardLevelSceneSetupData.difficultyBeatmap; var beatmap = level as CustomLevel.CustomDifficultyBeatmap; if (beatmap != null) { CurrentLevelPlaying = beatmap; //The note jump movement speed now gets set in the Start method, so we're too early here. We have to wait a bit before overriding. Invoke(nameof(DelayedNoteJumpMovementSpeedFix), 0.1f); } if (NoteHitVolumeChanger.PrefabFound) { return; } var song = CustomLevels.FirstOrDefault(x => x.levelID == level.level.levelID); if (song == null) { return; } NoteHitVolumeChanger.SetVolume(song.customSongInfo.noteHitVolume, song.customSongInfo.noteMissVolume); //Set environment if the song has customEnvironment if (CustomPlatformsPresent) { CheckCustomSongEnvironment(song); } //Set enviroment colors for the song if it has song specific colors if (customSongColors) { song.SetSongColors(CurrentLevelPlaying.colorLeft, CurrentLevelPlaying.colorRight, CurrentLevelPlaying.hasCustomColors); } } }
private void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) { paused = false; if (!customColorsInstalled) { if (colorA != null) { colorA.SetColor(defColorA); } if (colorB != null) { colorB.SetColor(defColorB); } } // try // { if (scene.name == "EmptyTransition") { Log("Resetting Chat Powers Object"); if (chatPowers != null) { GameObject.Destroy(chatPowers); } } if (chatPowers == null) { Log("Null Creation of Chat Powers Object"); chatPowers = new GameObject("Chat Powers"); twitchPowers = chatPowers.AddComponent <TwitchPowers>(); GameObject.DontDestroyOnLoad(chatPowers); } // } // catch(Exception ex) // { // Log(ex.ToString()); // } GMPDisplay display = chatPowers.GetComponent <GMPDisplay>(); if (display != null) { display.Destroy(); GameObject.Destroy(display); } ReadPrefs(); if (GMPUI.chatIntegration) { if (twitchPowers != null) { cooldowns.ResetCooldowns(); TwitchPowers.ResetPowers(false); twitchPowers.StopAllCoroutines(); } if (Config.resetChargesperLevel) { charges = 0; } } // twitchCommands.StopAllCoroutines(); haveSongNJS = false; invalidForScoring = false; if (soundIsPlaying == true) { gnomeSound.Stop(); } soundIsPlaying = false; isValidScene = false; playerInfo = false; if (arg0.name == "EmpyTransition" && chatPowers != null) { GameObject.Destroy(chatPowers); } if (scene.name == ("Menu")) { Log("Switched to Menu"); SharedCoroutineStarter.instance.StartCoroutine(GrabPP()); if (_hasRegistered == false) { TwitchConnection.Instance.StartConnection(); TwitchConnection.Instance.RegisterOnMessageReceived(TwitchConnection_OnMessageReceived); _hasRegistered = true; } var controllers = Resources.FindObjectsOfTypeAll <VRController>(); if (controllers != null) { foreach (VRController controller in controllers) { if (controller != null) { if (controller.ToString() == "ControllerLeft (VRController)") { leftController = controller; } if (controller.ToString() == "ControllerRight (VRController)") { rightController = controller; } } // Log(controller.ToString()); } Log("Left:" + leftController.ToString()); Log("Right: " + rightController.ToString()); } } if (scene.name == "GameCore") { environmentColorsSetter = Resources.FindObjectsOfTypeAll <EnvironmentColorsSetter>().FirstOrDefault(); soundEffectManager = Resources.FindObjectsOfTypeAll <NoteCutSoundEffectManager>().First(); levelData = Resources.FindObjectsOfTypeAll <StandardLevelSceneSetupDataSO>().First(); spawnController = Resources.FindObjectsOfTypeAll <BeatmapObjectSpawnController>().First(); energyCounter = Resources.FindObjectsOfTypeAll <GameEnergyCounter>().First(); energyPanel = Resources.FindObjectsOfTypeAll <GameEnergyUIPanel>().First(); spawnController.noteDidStartJumpEvent += SpawnController_ModifiedJump; spawnController.noteWasCutEvent += SpawnController_ScaleRemoveCut; spawnController.noteWasMissedEvent += SpawnController_ScaleRemoveMiss; currentSongSpeed = levelData.gameplayCoreSetupData.gameplayModifiers.songSpeedMul; levelData.didFinishEvent += LevelData_didFinishEvent; if (GMPUI.njsRandom) { twitchPowers.StartCoroutine(TwitchPowers.RandomNJS()); } Log(GMPUI.swapSabers.ToString()); if (GMPUI.noArrows) { twitchPowers.StartCoroutine(TwitchPowers.NoArrows()); } if (GMPUI.chatIntegration && Config.maxCharges > 0) { chatPowers.AddComponent <GMPDisplay>(); } if (Config.timeForCharges > 0) { twitchPowers.StartCoroutine(TwitchPowers.ChargeOverTime()); } pauseManager = Resources.FindObjectsOfTypeAll <StandardLevelGameplayManager>().First(); var colors = Resources.FindObjectsOfTypeAll <SimpleColorSO>(); foreach (SimpleColorSO color in colors) { Log(color.name); if (color.name == "Color0") { colorA = color; } if (color.name == "Color1") { colorB = color; } } oldColorA.SetColor(colorA); oldColorB.SetColor(colorB); Log(colorA.color.ToString()); if (GMPUI.chatIntegration && charges <= Config.maxCharges) { charges += Config.chargesPerLevel; if (charges > Config.maxCharges) { charges = Config.maxCharges; } // TwitchConnection.Instance.SendChatMessage("Current Charges: " + charges); } // ReflectionUtil.SetProperty(typeof(PracticePlugin.Plugin), "TimeScale", 1f); isValidScene = true; AudioTimeSync = Resources.FindObjectsOfTypeAll <AudioTimeSyncController>().FirstOrDefault(); if (AudioTimeSync != null) { songAudio = AudioTimeSync.GetField <AudioSource>("_audioSource"); if (songAudio != null) { Log("Audio not null"); } Log("Object Found"); } //Get Sabers player = Resources.FindObjectsOfTypeAll <PlayerController>().FirstOrDefault(); if (player != null) { leftSaber = player.leftSaber; rightSaber = player.rightSaber; playerInfo = true; } else { playerInfo = false; Log("Player is null"); } Log(leftSaber.handlePos.ToString()); Log(leftSaber.saberBladeTopPos.ToString()); if (GMPUI.swapSabers) { Log("Testing Ground Active"); try { SharedCoroutineStarter.instance.StartCoroutine(TwitchPowers.TestingGround(5f)); } catch (Exception ex) { Log(ex.ToString()); } } // SharedCoroutineStarter.instance.StartCoroutine(SwapSabers(leftSaber, rightSaber)); if (GMPUI.gnomeOnMiss == true) { invalidForScoring = true; if (spawnController != null) { spawnController.noteWasMissedEvent += delegate(BeatmapObjectSpawnController beatmapObjectSpawnController2, NoteController noteController) { if (noteController.noteData.noteType != NoteType.Bomb) { try { twitchPowers.StartCoroutine(TwitchPowers.SpecialEvent()); Log("Gnoming"); } catch (Exception ex) { Log(ex.ToString()); } } }; spawnController.noteWasCutEvent += delegate(BeatmapObjectSpawnController beatmapObjectSpawnController2, NoteController noteController, NoteCutInfo noteCutInfo) { if (!noteCutInfo.allIsOK) { twitchPowers.StartCoroutine(TwitchPowers.SpecialEvent()); Log("Gnoming"); } }; } } if (GMPUI.bulletTime || GMPUI.chatIntegration || GMPUI.fixedNoteScale != 1f) { invalidForScoring = true; } /* * if(GMPUI.superHot == true) * { * startGMPUI.superHot = false; * SharedCoroutineStarter.instance.StartCoroutine(Wait(1f)); * * } * */ } }
//private BeatmapObjectCallbackController beatmapObjectCallbackController; public void SceneManagerOnActiveSceneChanged(Scene oldScene, Scene newScene) { if (newScene.name == "GameCore") { gameStatus = new GameStatus(); levelSceneSetupData = FindFirstOrDefault <StandardLevelSceneSetupDataSO>(); //gamePauseManager = FindFirstOrDefault<GamePauseManager>(); scoreController = FindFirstOrDefault <ScoreController>(); gameplayModifiersSO = FindFirstOrDefault <GameplayModifiersModelSO>(); audioTimeSyncController = FindFirstOrDefault <AudioTimeSyncController>(); //playerHeadAndObstacleInteraction = FindFirstOrDefault<PlayerHeadAndObstacleInteraction>(); gameEnergyCounter = FindFirstOrDefault <GameEnergyCounter>(); gameplayManager = FindFirstOrDefault <StandardLevelGameplayManager>(); //beatmapObjectCallbackController = FindFirstOrDefault<BeatmapObjectCallbackController>(); // Register event listeners // private GameEvent GamePauseManager#_gameDidPauseSignal //AddSubscriber(gamePauseManager, "_gameDidPauseSignal", OnGamePause); // private GameEvent GamePauseManager#_gameDidResumeSignal //AddSubscriber(gamePauseManager, "_gameDidResumeSignal", OnGameResume); // public ScoreController#noteWasCutEvent<NoteData, NoteCutInfo, int multiplier> // called after AfterCutScoreBuffer is created scoreController.noteWasCutEvent += OnNoteWasCut; // public ScoreController#noteWasMissedEvent<NoteData, int multiplier> scoreController.noteWasMissedEvent += OnNoteWasMissed; // public ScoreController#scoreDidChangeEvent<int> // score scoreController.scoreDidChangeEvent += OnScoreDidChange; // public ScoreController#comboDidChangeEvent<int> // combo scoreController.comboDidChangeEvent += OnComboDidChange; // public ScoreController#multiplierDidChangeEvent<int, float> // multiplier, progress [0..1] scoreController.multiplierDidChangeEvent += OnMultiplierDidChange; // private GameEvent GameplayManager#_levelFinishedSignal AddSubscriber(gameplayManager, "_levelFinishedSignal", OnLevelFinished); // private GameEvent GameplayManager#_levelFailedSignal AddSubscriber(gameplayManager, "_levelFailedSignal", OnLevelFailed); // public event Action<BeatmapEventData> BeatmapObjectCallbackController#beatmapEventDidTriggerEvent //beatmapObjectCallbackController.beatmapEventDidTriggerEvent += OnBeatmapEventDidTrigger; IDifficultyBeatmap diff = levelSceneSetupData.difficultyBeatmap; IBeatmapLevel level = diff.level; GameplayModifiers gameplayModifiers = levelSceneSetupData.gameplayCoreSetupData.gameplayModifiers; PlayerSpecificSettings playerSettings = levelSceneSetupData.gameplayCoreSetupData.playerSpecificSettings; PracticeSettings practiceSettings = levelSceneSetupData.gameplayCoreSetupData.practiceSettings; float songSpeedMul = gameplayModifiers.songSpeedMul; if (practiceSettings != null) { songSpeedMul = practiceSettings.songSpeedMul; } float modifierMultiplier = gameplayModifiersSO.GetTotalMultiplier(gameplayModifiers); var songInfo = FindLevelInfancyWay(levelSceneSetupData.difficultyBeatmap.level.levelID); gameStatus.songHash = level.levelID.Substring(0, Math.Max(0, level.levelID.IndexOf('∎'))); gameStatus.songBeatSaverID = songInfo == null ? null : ParseIdFromSongPath(songInfo); gameStatus.songFilePath = songInfo?.path; gameStatus.songName = level.songName; gameStatus.songSubName = level.songSubName; gameStatus.songAuthorName = level.songAuthorName; gameStatus.songBPM = level.beatsPerMinute; gameStatus.noteJumpSpeed = diff.noteJumpMovementSpeed; gameStatus.songTimeOffset = (long)(level.songTimeOffset * 1000f / songSpeedMul); gameStatus.length = (long)(level.audioClip.length * 1000f / songSpeedMul); gameStatus.start = GetCurrentTime() - (long)(audioTimeSyncController.songTime * 1000f / songSpeedMul); if (practiceSettings != null) { gameStatus.start -= (long)(practiceSettings.startSongTime * 1000f / songSpeedMul); } gameStatus.paused = 0; gameStatus.difficulty = diff.difficulty.Name(); gameStatus.notesCount = diff.beatmapData.notesCount; gameStatus.bombsCount = diff.beatmapData.bombsCount; gameStatus.obstaclesCount = diff.beatmapData.obstaclesCount; gameStatus.maxScore = ScoreController.GetScoreForGameplayModifiersScoreMultiplier(ScoreController.MaxScoreForNumberOfNotes(diff.beatmapData.notesCount), modifierMultiplier); gameStatus.maxPossibleScore = ScoreController.MaxScoreForNumberOfNotes(diff.beatmapData.notesCount); gameStatus.maxRank = RankModel.MaxRankForGameplayModifiers(gameplayModifiers, gameplayModifiersSO).ToString(); gameStatus.ResetPerformance(); gameStatus.modifierMultiplier = modifierMultiplier; gameStatus.songSpeedMultiplier = songSpeedMul; gameStatus.batteryLives = gameEnergyCounter.batteryLives; gameStatus.modObstacles = gameplayModifiers.enabledObstacleType.ToString(); gameStatus.modInstaFail = gameplayModifiers.instaFail; gameStatus.modNoFail = gameplayModifiers.noFail; gameStatus.modBatteryEnergy = gameplayModifiers.batteryEnergy; gameStatus.modDisappearingArrows = gameplayModifiers.disappearingArrows; gameStatus.modNoBombs = gameplayModifiers.noBombs; gameStatus.modSongSpeed = gameplayModifiers.songSpeed.ToString(); gameStatus.modFailOnSaberClash = gameplayModifiers.failOnSaberClash; gameStatus.modStrictAngles = gameplayModifiers.strictAngles; } }