osu/osu.Game/Users/UserStatistics.cs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

121 lines
2.9 KiB
C#
Raw Normal View History

// 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.
2018-04-13 09:19:50 +00:00
2018-12-22 15:51:24 +00:00
using System;
2017-06-15 13:13:40 +00:00
using Newtonsoft.Json;
2021-07-23 20:37:08 +00:00
using osu.Framework.Localisation;
using osu.Game.Online.API.Requests.Responses;
2018-12-22 15:51:24 +00:00
using osu.Game.Scoring;
using osu.Game.Utils;
2018-04-13 09:19:50 +00:00
2017-06-15 13:13:40 +00:00
namespace osu.Game.Users
{
public class UserStatistics
{
2019-11-27 18:56:22 +00:00
[JsonProperty]
public APIUser User;
2019-11-27 18:56:22 +00:00
2017-06-15 13:13:40 +00:00
[JsonProperty(@"level")]
public LevelInfo Level;
2018-04-13 09:19:50 +00:00
public struct LevelInfo
2017-06-15 13:13:40 +00:00
{
[JsonProperty(@"current")]
public int Current;
2018-04-13 09:19:50 +00:00
2017-06-15 13:13:40 +00:00
[JsonProperty(@"progress")]
public int Progress;
}
2018-04-13 09:19:50 +00:00
[JsonProperty(@"is_ranked")]
public bool IsRanked;
[JsonProperty(@"global_rank")]
public int? GlobalRank;
[JsonProperty(@"country_rank")]
public int? CountryRank;
2021-02-19 04:40:12 +00:00
// populated via User model, as that's where the data currently lives.
2021-11-05 04:38:37 +00:00
public APIRankHistory RankHistory;
2021-02-19 04:40:12 +00:00
[JsonProperty(@"pp")]
public decimal? PP;
2017-06-15 13:13:40 +00:00
[JsonProperty(@"ranked_score")]
public long RankedScore;
2018-04-13 09:19:50 +00:00
2017-06-15 13:13:40 +00:00
[JsonProperty(@"hit_accuracy")]
public double Accuracy;
2018-04-13 09:19:50 +00:00
[JsonIgnore]
2021-07-23 20:37:08 +00:00
public LocalisableString DisplayAccuracy => (Accuracy / 100).FormatAccuracy();
2017-06-15 13:13:40 +00:00
[JsonProperty(@"play_count")]
public int PlayCount;
2018-04-13 09:19:50 +00:00
2018-12-22 15:51:24 +00:00
[JsonProperty(@"play_time")]
public int? PlayTime;
2017-06-15 13:13:40 +00:00
[JsonProperty(@"total_score")]
public long TotalScore;
2018-04-13 09:19:50 +00:00
2017-06-15 13:13:40 +00:00
[JsonProperty(@"total_hits")]
public int TotalHits;
2018-04-13 09:19:50 +00:00
2017-06-15 13:13:40 +00:00
[JsonProperty(@"maximum_combo")]
public int MaxCombo;
2018-04-13 09:19:50 +00:00
2017-06-15 13:13:40 +00:00
[JsonProperty(@"replays_watched_by_others")]
public int ReplaysWatched;
2018-04-13 09:19:50 +00:00
2017-06-15 13:13:40 +00:00
[JsonProperty(@"grade_counts")]
public Grades GradesCount;
2018-04-13 09:19:50 +00:00
public struct Grades
2017-06-15 13:13:40 +00:00
{
[JsonProperty(@"ssh")]
public int? SSPlus;
2018-04-13 09:19:50 +00:00
2017-06-15 13:13:40 +00:00
[JsonProperty(@"ss")]
public int SS;
2018-04-13 09:19:50 +00:00
[JsonProperty(@"sh")]
public int? SPlus;
2018-04-13 09:19:50 +00:00
2017-06-15 13:13:40 +00:00
[JsonProperty(@"s")]
public int S;
2018-04-13 09:19:50 +00:00
2017-06-15 13:13:40 +00:00
[JsonProperty(@"a")]
public int A;
2018-12-22 15:51:24 +00:00
2020-02-04 18:02:10 +00:00
public int this[ScoreRank rank]
2018-12-22 15:51:24 +00:00
{
2019-03-06 07:30:56 +00:00
get
2018-12-22 15:51:24 +00:00
{
2019-03-06 07:30:56 +00:00
switch (rank)
{
case ScoreRank.XH:
2020-02-04 18:02:10 +00:00
return SSPlus ?? 0;
2019-03-06 07:30:56 +00:00
case ScoreRank.X:
return SS;
2019-03-06 07:30:56 +00:00
case ScoreRank.SH:
2020-02-04 18:02:10 +00:00
return SPlus ?? 0;
2019-03-06 07:30:56 +00:00
case ScoreRank.S:
return S;
2019-03-06 07:30:56 +00:00
case ScoreRank.A:
return A;
2019-03-06 07:30:56 +00:00
default:
throw new ArgumentException($"API does not return {rank.ToString()}");
}
2018-12-22 15:51:24 +00:00
}
}
2017-06-15 13:13:40 +00:00
}
}
}