private static async void LoadBeatmapLevelAsync(IPreviewBeatmapLevel selectedLevel, Action <bool, IBeatmapLevel> callback) { var token = new CancellationTokenSource(); var _beatmapLevelsModel = Resources.FindObjectsOfTypeAll <BeatmapLevelsModel>().FirstOrDefault(); var _loadedPreviewBeatmapLevels = _beatmapLevelsModel.GetPrivateField <Dictionary <string, IPreviewBeatmapLevel> >("_loadedPreviewBeatmapLevels"); bool containsKey = _loadedPreviewBeatmapLevels.ContainsKey(selectedLevel.levelID); if (!containsKey) { _loadedPreviewBeatmapLevels.Add(selectedLevel.levelID, selectedLevel); } BeatmapLevelsModel.GetBeatmapLevelResult getBeatmapLevelResult = await _beatmapLevelsModel.GetBeatmapLevelAsync(selectedLevel.levelID, token.Token); callback?.Invoke(!getBeatmapLevelResult.isError, getBeatmapLevelResult.beatmapLevel); }
private async Task <IDifficultyBeatmap> NextDifficultyBeatmap() { IPreviewBeatmapLevel previewBeatmapLevel = _previewBeatmapLevels[_random.Next(0, _previewBeatmapLevels.Length)]; BeatmapLevelsModel.GetBeatmapLevelResult getBeatmapLevelResult = await _beatmapLevelsModel.GetBeatmapLevelAsync(previewBeatmapLevel.levelID, CancellationToken.None); if (getBeatmapLevelResult.isError) { return(await NextDifficultyBeatmap()); } IDifficultyBeatmapSet?difficultyBeatmapSet = getBeatmapLevelResult.beatmapLevel.beatmapLevelData.difficultyBeatmapSets.FirstOrDefault(x => x.beatmapCharacteristic.serializedName == _gameplayCoreSceneSetupData.difficultyBeatmap.parentDifficultyBeatmapSet.beatmapCharacteristic.serializedName) ?? getBeatmapLevelResult.beatmapLevel.beatmapLevelData.difficultyBeatmapSets.First(); IDifficultyBeatmap difficultyBeatmap = difficultyBeatmapSet.difficultyBeatmaps.FirstOrDefault(x => x.difficultyRank <= _gameplayCoreSceneSetupData.difficultyBeatmap.difficultyRank) ?? difficultyBeatmapSet.difficultyBeatmaps.Last(x => x.difficultyRank > _gameplayCoreSceneSetupData.difficultyBeatmap.difficultyRank); string[]? requirements = SongCore.Collections.RetrieveExtraSongData(previewBeatmapLevel.levelID)?._difficulties?.First(x => x._difficulty == difficultyBeatmap.difficulty).additionalDifficultyData._requirements; return(requirements?.All(x => SongCore.Collections.capabilities.Contains(x)) ?? true ? difficultyBeatmap : await NextDifficultyBeatmap()); }