// Purposefully ignore modifiers here - only 2 maps have them enabled and it doesn't make much sense to just filter to those two private static float GetHighestPP(IPreviewBeatmapLevel previewBeatmapLevel, bool ppGain) { float maxPP = 0; var id = SongDataUtils.GetHash(previewBeatmapLevel.levelID); // Check if in SDC if (SongDataCore.Plugin.Songs.Data.Songs.ContainsKey(id)) { // Loop through each diff foreach (var diff in SongDataCore.Plugin.Songs.Data.Songs[id].diffs) { var difficulty = SongDataUtils.GetBeatmapDifficulty(diff.diff); var songID = new SongID(id, difficulty); // Only go through ranked songs if (SongDataUtils.IsRankedSong(songID)) { float pp = PPUtils.CalculatePP(songID, AccLoader.instance.GetAcc(songID)); if (ppGain) { pp = PPUtils.GetPPGain(pp, songID); } maxPP = pp > maxPP ? pp : maxPP; } } return(maxPP); } return(0); }
IEnumerator FindDifficultyBeatmap() { yield return(new WaitUntil(() => BS_Utils.Plugin.LevelData.IsSet)); _difficultyBeatmap = BS_Utils.Plugin.LevelData.GameplayCoreSceneSetupData.difficultyBeatmap; _songID = new SongID(SongDataUtils.GetHash(_difficultyBeatmap.level.levelID), _difficultyBeatmap.difficulty); _rawPP = SongDataUtils.GetRawPP(_songID); // modifiers var gameplayModifiersModelSO = Resources.FindObjectsOfTypeAll <GameplayModifiersModelSO>().FirstOrDefault(); var gameplayModifiers = BS_Utils.Plugin.LevelData.GameplayCoreSceneSetupData.gameplayModifiers; _multiplier = gameplayModifiersModelSO.GetTotalMultiplier(gameplayModifiers); _multiplier = (Config.ignoreNoFail && gameplayModifiers.noFail) ? _multiplier + 0.5 : _multiplier; // Only update for ranked songs if (SongDataUtils.IsRankedSong(_songID)) { yield return(new WaitUntil(() => _beatmapObjectManager != null)); _beatmapObjectManager.noteWasCutEvent += OnNoteCut; _beatmapObjectManager.noteWasMissedEvent += OnNoteMissed; yield return(new WaitUntil(() => _scoreController != null)); _scoreController.scoreDidChangeEvent += OnScoreChange; if (!Config.hideOnStart) { UpdateCounter(); } } }
public override void CounterInit() { var id = SongDataUtils.GetHash(difficultyBeatmap.level.levelID); songID = new SongID(id, difficultyBeatmap.difficulty); // Don't show anything for unranked songs or if data not initialized if (!ppUtils.DataInitialized() || !ppUtils.IsRanked(songID)) { return; } var gameplayModifiersModelSO = IPA.Utilities.FieldAccessor <RelativeScoreAndImmediateRankCounter, GameplayModifiersModelSO> .Get(relativeScoreAndImmediateRank, "_gameplayModifiersModel"); GameplayModifiers updatedModifiers = ppUtils.AllowedPositiveModifiers(songID) ? gameplayModifiers : GameplayModifierUtils.RemovePositiveModifiers(gameplayModifiers); _multiplier = GameplayModifierUtils.CalculateMultiplier(gameplayModifiersModelSO, updatedModifiers); counter = CanvasUtility.CreateTextFromSettings(Settings); counter.fontSize = 3; relativeScoreAndImmediateRank.relativeScoreOrImmediateRankDidChangeEvent += ScoreUpdated; UpdateCounterText(ppUtils.CalculatePP(songID, _multiplier, ppUtils.AllowedPositiveModifiers(songID))); if (PluginSettings.Instance.relativeGain) { var highScore = playerDataModel.playerData.GetPlayerLevelStatsData(difficultyBeatmap).highScore; if (highScore == 0) { _pbPP = 0; return; } var maxScore = ScoreModel.ComputeMaxMultipliedScoreForBeatmap(beatmapData); var acc = (float)highScore / maxScore; _pbPP = ppUtils.CalculatePP(songID, acc, ppUtils.AllowedPositiveModifiers(songID)); } }
public void OnLevelSelected(LevelCollectionViewController levelCollectionViewController, IPreviewBeatmapLevel previewBeatmapLevel) { PP_HelperController.instance.setId(SongDataUtils.GetHash(previewBeatmapLevel.levelID)); }