protected override void Client_MatchInfoUpdated(Match match) { base.Client_MatchInfoUpdated(match); if (match == Match) { Match = match; _playerList.Players = match.Players; if (!isHost && _songDetail && _songDetail.isInViewControllerHierarchy && match.SelectedLevel != null && match.SelectedCharacteristic != null) { UnityMainThreadDispatcher.Instance().Enqueue(() => { //`CurrentlySelectedDifficulty` is reset by SetSelectedCharacteristic, so we save it here //Usually this is intended behavior so that a new difficulty is selected //when the new characteristic doesn't have a corresponding difficulty to the one //that was previously selected. However... We don't want that here. Here, we //know that the CurrentlySelectedDifficulty *should* be available on the new //characteristic, if the coordinator/leader hasn't messed up, and often changes simultaneously var selectedDifficulty = (int)match.SelectedDifficulty; _songDetail.SetSelectedCharacteristic(match.SelectedCharacteristic.SerializedName); _songDetail.SetSelectedDifficulty(selectedDifficulty); }); } } }
private void songSelection_SongSelected(GameplayParameters parameters) { _currentParameters = parameters; SongUtils.LoadSong(parameters.Beatmap.LevelId, (loadedLevel) => { PresentViewController(_songDetail, () => { _songDetail.SetSelectedSong(loadedLevel); _songDetail.SetSelectedDifficulty((int)parameters.Beatmap.Difficulty); _songDetail.SetSelectedCharacteristic(parameters.Beatmap.Characteristic.SerializedName); if (_globalLeaderboard == null) { _globalLeaderboard = Resources.FindObjectsOfTypeAll <PlatformLeaderboardViewController>().First(); _globalLeaderboard.name = "Global Leaderboard"; } _globalLeaderboard.SetData(SongUtils.GetClosestDifficultyPreferLower(loadedLevel, (BeatmapDifficulty)(int)parameters.Beatmap.Difficulty, parameters.Beatmap.Characteristic.SerializedName)); SetRightScreenViewController(_globalLeaderboard, ViewController.AnimationType.In); _customLeaderboard = BeatSaberUI.CreateViewController <CustomLeaderboard>(); PlayerUtils.GetPlatformUserData(RequestLeaderboardWhenResolved); SetLeftScreenViewController(_customLeaderboard, ViewController.AnimationType.In); }); }); }