Remove local score copying in GetScoresRequest to allow APIScoreInfo.Beatmap to be APIBeatmap

This commit is contained in:
Dean Herbert
2021-10-29 14:14:25 +09:00
parent 54073d8a1e
commit 3f030cebf4
6 changed files with 16 additions and 46 deletions

View File

@ -9,7 +9,6 @@ using osu.Game.Online.API.Requests.Responses;
using osu.Game.Rulesets.Mods;
using System.Text;
using System.Collections.Generic;
using System.Diagnostics;
namespace osu.Game.Online.API.Requests
{
@ -32,27 +31,6 @@ namespace osu.Game.Online.API.Requests
this.scope = scope;
this.ruleset = ruleset ?? throw new ArgumentNullException(nameof(ruleset));
this.mods = mods ?? Array.Empty<IMod>();
Success += onSuccess;
}
private void onSuccess(APIScoresCollection r)
{
Debug.Assert(ruleset.OnlineID >= 0);
foreach (APIScoreInfo score in r.Scores)
{
score.Beatmap = beatmapInfo;
score.OnlineRulesetID = ruleset.OnlineID;
}
var userScore = r.UserScore;
if (userScore != null)
{
userScore.Score.Beatmap = beatmapInfo;
userScore.Score.OnlineRulesetID = ruleset.OnlineID;
}
}
protected override string Target => $@"beatmaps/{beatmapInfo.OnlineBeatmapID}/scores{createQueryParameters()}";

View File

@ -39,7 +39,7 @@ namespace osu.Game.Online.API.Requests.Responses
public DateTimeOffset Date { get; set; }
[JsonProperty(@"beatmap")]
public IBeatmapInfo Beatmap { get; set; }
public APIBeatmap Beatmap { get; set; }
[JsonProperty("accuracy")]
public double Accuracy { get; set; }
@ -71,10 +71,8 @@ namespace osu.Game.Online.API.Requests.Responses
[JsonConverter(typeof(StringEnumConverter))]
public ScoreRank Rank { get; set; }
IBeatmapInfo IScoreInfo.Beatmap => Beatmap;
// TODO: nuke
public ScoreInfo CreateScoreInfo(RulesetStore rulesets)
// TODO: This function will eventually be going away.
public ScoreInfo CreateScoreInfo(RulesetStore rulesets, BeatmapInfo beatmap = null)
{
var ruleset = rulesets.GetRuleset(OnlineRulesetID);
@ -94,7 +92,6 @@ namespace osu.Game.Online.API.Requests.Responses
OnlineScoreID = OnlineID,
Date = Date,
PP = PP,
BeatmapInfo = Beatmap.ToBeatmapInfo(rulesets),
RulesetID = OnlineRulesetID,
Hash = Replay ? "online" : string.Empty, // todo: temporary?
Rank = Rank,
@ -102,6 +99,9 @@ namespace osu.Game.Online.API.Requests.Responses
Mods = mods,
};
if (beatmap != null)
scoreInfo.BeatmapInfo = beatmap;
if (Statistics != null)
{
foreach (var kvp in Statistics)
@ -138,19 +138,10 @@ namespace osu.Game.Online.API.Requests.Responses
return scoreInfo;
}
[JsonProperty(@"beatmapset")]
public APIBeatmapSet Metadata
{
set
{
// in the deserialisation case we need to ferry this data across.
if (Beatmap is APIBeatmap apiBeatmap)
apiBeatmap.BeatmapSet = value;
}
}
public IRulesetInfo Ruleset => new RulesetInfo { ID = OnlineRulesetID };
IBeatmapInfo IScoreInfo.Beatmap => Beatmap;
Dictionary<HitResult, int> IScoreInfo.Statistics => new Dictionary<HitResult, int>(); // TODO: implement... maybe. hitresults have weird mappings per ruleset it would seem.
}
}

View File

@ -2,6 +2,7 @@
// See the LICENCE file in the repository root for full licence text.
using Newtonsoft.Json;
using osu.Game.Beatmaps;
using osu.Game.Rulesets;
using osu.Game.Scoring;
@ -15,10 +16,10 @@ namespace osu.Game.Online.API.Requests.Responses
[JsonProperty(@"score")]
public APIScoreInfo Score;
public ScoreInfo CreateScoreInfo(RulesetStore rulesets)
public ScoreInfo CreateScoreInfo(RulesetStore rulesets, BeatmapInfo beatmap = null)
{
var score = Score.CreateScoreInfo(rulesets);
var score = Score.CreateScoreInfo(rulesets, beatmap);
score.Position = Position;
return score;
}