示例#1
0
        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);
        }
示例#2
0
        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());
        }