mirror of https://github.com/ppy/osu
Recommend from all rulesets
This commit is contained in:
parent
dd6c9173da
commit
00d1cf1ce2
|
@ -44,16 +44,27 @@ private void load()
|
||||||
/// <returns>The recommended difficulty, or null if a recommendation could not be provided.</returns>
|
/// <returns>The recommended difficulty, or null if a recommendation could not be provided.</returns>
|
||||||
public BeatmapInfo GetRecommendedBeatmap(IEnumerable<BeatmapInfo> beatmaps)
|
public BeatmapInfo GetRecommendedBeatmap(IEnumerable<BeatmapInfo> beatmaps)
|
||||||
{
|
{
|
||||||
if (recommendedStarDifficulty.TryGetValue(ruleset.Value, out var stars))
|
if (!recommendedStarDifficulty.Any())
|
||||||
|
return null;
|
||||||
|
|
||||||
|
BeatmapInfo beatmap = null;
|
||||||
|
|
||||||
|
foreach (var r in getBestRulesetOrder())
|
||||||
{
|
{
|
||||||
return beatmaps.OrderBy(b =>
|
if (!recommendedStarDifficulty.TryGetValue(ruleset.Value, out var stars))
|
||||||
|
break;
|
||||||
|
|
||||||
|
beatmap = beatmaps.Where(b => b.Ruleset.Equals(r)).OrderBy(b =>
|
||||||
{
|
{
|
||||||
var difference = b.StarDifficulty - stars;
|
var difference = b.StarDifficulty - stars;
|
||||||
return difference >= 0 ? difference * 2 : difference * -1; // prefer easier over harder
|
return difference >= 0 ? difference * 2 : difference * -1; // prefer easier over harder
|
||||||
}).FirstOrDefault();
|
}).FirstOrDefault();
|
||||||
|
|
||||||
|
if (beatmap != null)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return beatmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void calculateRecommendedDifficulties()
|
private void calculateRecommendedDifficulties()
|
||||||
|
@ -72,6 +83,26 @@ private void calculateRecommendedDifficulties()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IEnumerable<RulesetInfo> bestRulesetOrder;
|
||||||
|
|
||||||
|
private IEnumerable<RulesetInfo> getBestRulesetOrder()
|
||||||
|
{
|
||||||
|
if (bestRulesetOrder != null)
|
||||||
|
return bestRulesetOrder;
|
||||||
|
|
||||||
|
var otherRulesets = recommendedStarDifficulty.ToList()
|
||||||
|
.Where(pair => !pair.Key.Equals(ruleset.Value))
|
||||||
|
.OrderBy(pair => pair.Value)
|
||||||
|
.Select(pair => pair.Key)
|
||||||
|
.Reverse();
|
||||||
|
|
||||||
|
var rulesetList = new List<RulesetInfo>(new[] { ruleset.Value });
|
||||||
|
rulesetList.AddRange(otherRulesets);
|
||||||
|
|
||||||
|
bestRulesetOrder = rulesetList;
|
||||||
|
return rulesetList;
|
||||||
|
}
|
||||||
|
|
||||||
public void APIStateChanged(IAPIProvider api, APIState state)
|
public void APIStateChanged(IAPIProvider api, APIState state)
|
||||||
{
|
{
|
||||||
switch (state)
|
switch (state)
|
||||||
|
|
Loading…
Reference in New Issue