mirror of
https://github.com/ppy/osu.git
synced 2025-02-07 00:52:59 +08:00
Use online ruleset_id to build local score models
This commit is contained in:
parent
c88e906cb6
commit
b4f35f330c
@ -77,11 +77,14 @@ namespace osu.Game.Online.Rooms
|
|||||||
[CanBeNull]
|
[CanBeNull]
|
||||||
public MultiplayerScoresAround ScoresAround { get; set; }
|
public MultiplayerScoresAround ScoresAround { get; set; }
|
||||||
|
|
||||||
public ScoreInfo CreateScoreInfo(ScoreManager scoreManager, RulesetStore rulesets, PlaylistItem playlistItem, [NotNull] BeatmapInfo beatmap)
|
[JsonProperty("ruleset_id")]
|
||||||
|
public int RulesetId { get; set; }
|
||||||
|
|
||||||
|
public ScoreInfo CreateScoreInfo(ScoreManager scoreManager, RulesetStore rulesets, [NotNull] BeatmapInfo beatmap)
|
||||||
{
|
{
|
||||||
var ruleset = rulesets.GetRuleset(playlistItem.RulesetID);
|
var ruleset = rulesets.GetRuleset(RulesetId);
|
||||||
if (ruleset == null)
|
if (ruleset == null)
|
||||||
throw new InvalidOperationException($"Couldn't create score with unknown ruleset: {playlistItem.RulesetID}");
|
throw new InvalidOperationException($"Couldn't create score with unknown ruleset: {RulesetId}");
|
||||||
|
|
||||||
var rulesetInstance = ruleset.CreateInstance();
|
var rulesetInstance = ruleset.CreateInstance();
|
||||||
|
|
||||||
@ -91,7 +94,7 @@ namespace osu.Game.Online.Rooms
|
|||||||
TotalScore = TotalScore,
|
TotalScore = TotalScore,
|
||||||
MaxCombo = MaxCombo,
|
MaxCombo = MaxCombo,
|
||||||
BeatmapInfo = beatmap,
|
BeatmapInfo = beatmap,
|
||||||
Ruleset = rulesets.GetRuleset(playlistItem.RulesetID) ?? throw new InvalidOperationException($"Ruleset with ID of {playlistItem.RulesetID} not found locally"),
|
Ruleset = ruleset,
|
||||||
Passed = Passed,
|
Passed = Passed,
|
||||||
Statistics = Statistics,
|
Statistics = Statistics,
|
||||||
MaximumStatistics = MaximumStatistics,
|
MaximumStatistics = MaximumStatistics,
|
||||||
|
@ -142,10 +142,10 @@ namespace osu.Game.Screens.OnlinePlay.DailyChallenge
|
|||||||
|
|
||||||
request.Success += req => Schedule(() =>
|
request.Success += req => Schedule(() =>
|
||||||
{
|
{
|
||||||
var best = req.Scores.Select(s => s.CreateScoreInfo(scoreManager, rulesets, playlistItem, beatmap.Value.BeatmapInfo)).ToArray();
|
var best = req.Scores.Select(s => s.CreateScoreInfo(scoreManager, rulesets, beatmap.Value.BeatmapInfo)).ToArray();
|
||||||
|
|
||||||
userBestScore.Value = req.UserScore;
|
userBestScore.Value = req.UserScore;
|
||||||
var userBest = userBestScore.Value?.CreateScoreInfo(scoreManager, rulesets, playlistItem, beatmap.Value.BeatmapInfo);
|
var userBest = userBestScore.Value?.CreateScoreInfo(scoreManager, rulesets, beatmap.Value.BeatmapInfo);
|
||||||
|
|
||||||
cancellationTokenSource?.Cancel();
|
cancellationTokenSource?.Cancel();
|
||||||
cancellationTokenSource = null;
|
cancellationTokenSource = null;
|
||||||
|
@ -189,7 +189,7 @@ namespace osu.Game.Screens.OnlinePlay.Playlists
|
|||||||
/// <param name="pivot">An optional pivot around which the scores were retrieved.</param>
|
/// <param name="pivot">An optional pivot around which the scores were retrieved.</param>
|
||||||
protected virtual ScoreInfo[] PerformSuccessCallback(Action<IEnumerable<ScoreInfo>> callback, List<MultiplayerScore> scores, MultiplayerScores? pivot = null)
|
protected virtual ScoreInfo[] PerformSuccessCallback(Action<IEnumerable<ScoreInfo>> callback, List<MultiplayerScore> scores, MultiplayerScores? pivot = null)
|
||||||
{
|
{
|
||||||
var scoreInfos = scores.Select(s => s.CreateScoreInfo(ScoreManager, Rulesets, PlaylistItem, Beatmap.Value.BeatmapInfo)).OrderByTotalScore().ToArray();
|
var scoreInfos = scores.Select(s => s.CreateScoreInfo(ScoreManager, Rulesets, Beatmap.Value.BeatmapInfo)).OrderByTotalScore().ToArray();
|
||||||
|
|
||||||
// Invoke callback to add the scores. Exclude the score provided to this screen since it's added already.
|
// Invoke callback to add the scores. Exclude the score provided to this screen since it's added already.
|
||||||
callback.Invoke(scoreInfos.Where(s => s.OnlineID != Score?.OnlineID));
|
callback.Invoke(scoreInfos.Where(s => s.OnlineID != Score?.OnlineID));
|
||||||
|
Loading…
Reference in New Issue
Block a user