Calculate best ruleset order only once

This commit is contained in:
Endrik Tombak
2020-04-15 18:14:51 +03:00
parent 47187ec14c
commit b5c1752f0a

View File

@ -32,8 +32,6 @@ namespace osu.Game.Screens.Select
private void load() private void load()
{ {
api.Register(this); api.Register(this);
ruleset.ValueChanged += _ => bestRulesetOrder = null;
} }
/// <summary> /// <summary>
@ -90,19 +88,22 @@ namespace osu.Game.Screens.Select
private IEnumerable<RulesetInfo> getBestRulesetOrder() private IEnumerable<RulesetInfo> getBestRulesetOrder()
{ {
if (bestRulesetOrder != null) if (bestRulesetOrder != null)
return bestRulesetOrder; return moveCurrentRulesetToFirst();
var otherRulesets = recommendedStarDifficulty.ToList() bestRulesetOrder = recommendedStarDifficulty.ToList()
.Where(pair => !pair.Key.Equals(ruleset.Value))
.OrderBy(pair => pair.Value) .OrderBy(pair => pair.Value)
.Select(pair => pair.Key) .Select(pair => pair.Key)
.Reverse(); .Reverse();
var rulesetList = new List<RulesetInfo>(new[] { ruleset.Value }); return moveCurrentRulesetToFirst();
rulesetList.AddRange(otherRulesets); }
bestRulesetOrder = rulesetList; private IEnumerable<RulesetInfo> moveCurrentRulesetToFirst()
return rulesetList; {
var orderedRulesets = bestRulesetOrder.ToList();
orderedRulesets.Remove(ruleset.Value);
orderedRulesets.Insert(0, ruleset.Value);
return orderedRulesets;
} }
public void APIStateChanged(IAPIProvider api, APIState state) public void APIStateChanged(IAPIProvider api, APIState state)