// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; using System.Linq; using osu.Framework.Bindables; using osu.Game.Beatmaps; using osu.Game.Rulesets.Filter; using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Mods; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Scoring.Legacy; using osu.Game.Screens.Select; using osu.Game.Screens.Select.Filter; namespace osu.Game.Rulesets.Mania { public class ManiaFilterCriteria : IRulesetFilterCriteria { private FilterCriteria.OptionalRange keys; public bool Matches(BeatmapInfo beatmapInfo, FilterCriteria criteria) { return !keys.HasFilter || keys.IsInRange(ManiaBeatmapConverter.GetColumnCount(LegacyBeatmapConversionDifficultyInfo.FromBeatmapInfo(beatmapInfo), criteria.Mods)); } public bool TryParseCustomKeywordCriteria(string key, Operator op, string value) { switch (key) { case "key": case "keys": return FilterQueryParser.TryUpdateCriteriaRange(ref keys, op, value); } return false; } public bool FilterMayChangeFromMods(ValueChangedEvent> mods) { if (keys.HasFilter) { // Interpreting as the Mod type is required for equality comparison. HashSet oldSet = mods.OldValue.OfType().AsEnumerable().ToHashSet(); HashSet newSet = mods.NewValue.OfType().AsEnumerable().ToHashSet(); if (!oldSet.SetEquals(newSet)) return true; } return false; } } }