/// <summary> /// Sort and store a list of already filtered songs. Sorting is optional. /// </summary> /// <param name="filteredLevels">Levels that have already been filtered</param> /// <param name="sortSongs">Sort the songs before storing.</param> public void SetupFromPrefilteredLevels(IPreviewBeatmapLevel[] filteredLevels, Sprite coverImage = null, bool sortSongs = true) { this.coverImage = coverImage != null ? coverImage : UIUtilities.DefaultCoverImage; if (sortSongs) { filteredLevels = SongSortModule.SortSongs(filteredLevels); } _beatmapLevelCollection.SetPrivateField("_levels", filteredLevels, typeof(BeatmapLevelCollection)); }
/// <summary> /// Sort and store a list of already filtered songs. Sorting is optional. /// </summary> /// <param name="filteredLevels">Levels that have already been filtered</param> /// <param name="sortSongs">Sort the songs before storing.</param> public void SetupFromPrefilteredLevels(IPreviewBeatmapLevel[] filteredLevels, bool sortSongs = true) { if (coverImage == null) { coverImage = UIUtilities.DefaultCoverImage; } if (sortSongs) { filteredLevels = SongSortModule.SortSongs(filteredLevels); } _beatmapLevelCollection.SetPrivateField("_levels", filteredLevels, typeof(BeatmapLevelCollection)); }
/// <summary> /// Applies filter settings and then filters, sorts, and stores the resulting levels from the provided level collection. /// </summary> /// <param name="levels">Levels to filter and sort.</param> /// <param name="applyStagedSettings">Apply the staged filter settings before using the filter.</param> /// <returns>True if at least one filter has been applied, otherwise false.</returns> public bool SetupFromUnfilteredLevels(IPreviewBeatmapLevel[] levels, Sprite coverImage = null, bool applyStagedSettings = true) { this.coverImage = coverImage != null ? coverImage : UIUtilities.DefaultCoverImage; if (FilterList.ApplyFilter(levels, out var filteredLevels, applyStagedSettings)) { IPreviewBeatmapLevel[] filteredAndSortedLevels = SongSortModule.SortSongs(filteredLevels); _beatmapLevelCollection.SetPrivateField("_levels", filteredAndSortedLevels, typeof(BeatmapLevelCollection)); return(true); } return(false); }
private void SelectSavedLevelPack() { string lastLevelPackString = PluginConfig.LastLevelPackID; int separatorPos = lastLevelPackString.IndexOf(PluginConfig.LastLevelPackIDSeparator); if (separatorPos < 0 || separatorPos + PluginConfig.LastLevelPackIDSeparator.Length >= lastLevelPackString.Length) { goto OnError; } string lastLevelPackCollectionTitle = lastLevelPackString.Substring(0, separatorPos); string lastLevelPackID = lastLevelPackString.Substring(separatorPos + PluginConfig.LastLevelPackIDSeparator.Length); TabBarViewController tabBarVC = LevelFilteringNavigationController.GetPrivateField <TabBarViewController>("_tabBarViewController"); TabBarViewController.TabBarItem[] tabBarItems = tabBarVC.GetPrivateField <TabBarViewController.TabBarItem[]>("_items"); var item = tabBarItems.FirstOrDefault(x => x.title == lastLevelPackCollectionTitle); if (item == null) { goto OnError; } int itemIndex = Array.IndexOf(tabBarItems, item); if (itemIndex < 0) { goto OnError; } var tabBarDatas = LevelFilteringNavigationController.GetPrivateField <object[]>("_tabBarDatas"); if (itemIndex >= tabBarDatas.Length) { goto OnError; } var levelPacks = tabBarDatas[itemIndex].GetField <IAnnotatedBeatmapLevelCollection[]>("annotatedBeatmapLevelCollections"); IAnnotatedBeatmapLevelCollection levelPack = levelPacks.FirstOrDefault(x => x.collectionName == lastLevelPackID || (x is IBeatmapLevelPack && ((IBeatmapLevelPack)x).packID == lastLevelPackID)); if (levelPack == null) { goto OnError; } // this should trigger the LevelPackSelected() delegate and sort the level pack as well LevelFilteringNavigationController.SelectAnnotatedBeatmapLevelCollection(levelPack); // try to select last level as well string[] lastLevelData = PluginConfig.LastLevelID.Split(new string[] { PluginConfig.LastLevelIDSeparator }, StringSplitOptions.None); if (lastLevelData.Length != 3) { return; } string levelID = lastLevelData[0]; IPreviewBeatmapLevel level = levelPack.beatmapLevelCollection.beatmapLevels.FirstOrDefault(x => x.levelID == levelID); if (level != null) { SelectLevel(level); } else { // could not find level with levelID // either song was deleted or is a WIP level and was changed // try using song name and level author as fallback string songName = lastLevelData[1]; string levelAuthor = lastLevelData[2]; level = levelPack.beatmapLevelCollection.beatmapLevels.FirstOrDefault(x => x.songName == songName && x.levelAuthorName == levelAuthor); if (level != null) { SelectLevel(level); } } return; OnError: SongSortModule.ResetSortMode(); ButtonPanel.instance.UpdateSortButtons(); }