2020-05-26 17:12:19 +08:00
|
|
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
|
|
|
// See the LICENCE file in the repository root for full licence text.
|
|
|
|
|
|
|
|
using System;
|
|
|
|
using System.Collections.Generic;
|
2020-05-28 18:57:58 +08:00
|
|
|
using System.Linq;
|
2020-07-22 17:52:25 +08:00
|
|
|
using JetBrains.Annotations;
|
2020-05-26 17:12:19 +08:00
|
|
|
using Newtonsoft.Json;
|
|
|
|
using Newtonsoft.Json.Converters;
|
2021-11-04 11:30:19 +08:00
|
|
|
using osu.Game.Beatmaps;
|
2020-07-22 17:29:50 +08:00
|
|
|
using osu.Game.Online.API;
|
2021-11-04 17:02:44 +08:00
|
|
|
using osu.Game.Online.API.Requests.Responses;
|
2021-11-15 15:13:03 +08:00
|
|
|
using osu.Game.Rulesets;
|
2020-05-28 19:07:51 +08:00
|
|
|
using osu.Game.Rulesets.Mods;
|
2020-05-26 17:12:19 +08:00
|
|
|
using osu.Game.Rulesets.Scoring;
|
|
|
|
using osu.Game.Scoring;
|
|
|
|
|
2020-12-25 12:38:11 +08:00
|
|
|
namespace osu.Game.Online.Rooms
|
2020-05-26 17:12:19 +08:00
|
|
|
{
|
2020-07-22 17:37:00 +08:00
|
|
|
public class MultiplayerScore
|
2020-05-26 17:12:19 +08:00
|
|
|
{
|
|
|
|
[JsonProperty("id")]
|
2021-02-16 18:29:40 +08:00
|
|
|
public long ID { get; set; }
|
2020-05-26 17:12:19 +08:00
|
|
|
|
2020-05-28 18:58:07 +08:00
|
|
|
[JsonProperty("user")]
|
2021-11-04 17:02:44 +08:00
|
|
|
public APIUser User { get; set; }
|
2020-05-26 17:12:19 +08:00
|
|
|
|
|
|
|
[JsonProperty("rank")]
|
|
|
|
[JsonConverter(typeof(StringEnumConverter))]
|
|
|
|
public ScoreRank Rank { get; set; }
|
|
|
|
|
|
|
|
[JsonProperty("total_score")]
|
|
|
|
public long TotalScore { get; set; }
|
|
|
|
|
|
|
|
[JsonProperty("accuracy")]
|
|
|
|
public double Accuracy { get; set; }
|
|
|
|
|
|
|
|
[JsonProperty("max_combo")]
|
|
|
|
public int MaxCombo { get; set; }
|
|
|
|
|
|
|
|
[JsonProperty("mods")]
|
|
|
|
public APIMod[] Mods { get; set; }
|
|
|
|
|
|
|
|
[JsonProperty("statistics")]
|
|
|
|
public Dictionary<HitResult, int> Statistics = new Dictionary<HitResult, int>();
|
|
|
|
|
|
|
|
[JsonProperty("passed")]
|
|
|
|
public bool Passed { get; set; }
|
|
|
|
|
|
|
|
[JsonProperty("ended_at")]
|
|
|
|
public DateTimeOffset EndedAt { get; set; }
|
|
|
|
|
2020-07-22 17:52:25 +08:00
|
|
|
/// <summary>
|
|
|
|
/// The position of this score, starting at 1.
|
|
|
|
/// </summary>
|
|
|
|
[JsonProperty("position")]
|
|
|
|
public int? Position { get; set; }
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Any scores in the room around this score.
|
|
|
|
/// </summary>
|
|
|
|
[JsonProperty("scores_around")]
|
|
|
|
[CanBeNull]
|
|
|
|
public MultiplayerScoresAround ScoresAround { get; set; }
|
|
|
|
|
2021-11-15 15:13:03 +08:00
|
|
|
public ScoreInfo CreateScoreInfo(RulesetStore rulesets, PlaylistItem playlistItem, [NotNull] BeatmapInfo beatmap)
|
2020-05-26 17:12:19 +08:00
|
|
|
{
|
2020-05-28 19:07:51 +08:00
|
|
|
var rulesetInstance = playlistItem.Ruleset.Value.CreateInstance();
|
|
|
|
|
2020-05-26 17:12:19 +08:00
|
|
|
var scoreInfo = new ScoreInfo
|
|
|
|
{
|
|
|
|
OnlineScoreID = ID,
|
|
|
|
TotalScore = TotalScore,
|
|
|
|
MaxCombo = MaxCombo,
|
2021-11-04 11:30:19 +08:00
|
|
|
BeatmapInfo = beatmap,
|
2020-05-26 17:12:19 +08:00
|
|
|
BeatmapInfoID = playlistItem.BeatmapID,
|
2021-11-15 15:13:03 +08:00
|
|
|
Ruleset = rulesets.GetRuleset(playlistItem.RulesetID),
|
2020-05-26 17:12:19 +08:00
|
|
|
RulesetID = playlistItem.RulesetID,
|
2020-05-28 19:07:54 +08:00
|
|
|
Statistics = Statistics,
|
2020-05-28 18:58:07 +08:00
|
|
|
User = User,
|
2020-05-26 17:12:19 +08:00
|
|
|
Accuracy = Accuracy,
|
|
|
|
Date = EndedAt,
|
|
|
|
Hash = string.Empty, // todo: temporary?
|
|
|
|
Rank = Rank,
|
2020-07-28 21:08:10 +08:00
|
|
|
Mods = Mods?.Select(m => m.ToMod(rulesetInstance)).ToArray() ?? Array.Empty<Mod>(),
|
|
|
|
Position = Position,
|
2020-05-26 17:12:19 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
return scoreInfo;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|