From c7a4d804baeaa8d6a6fcd6efb08128dc31a20af0 Mon Sep 17 00:00:00 2001 From: Krzysztof Gutkowski Date: Fri, 2 Oct 2026 23:50:39 +0200 Subject: [PATCH 1/5] Add ranked play division badges Requires https://github.com/ppy/osu-resources/pull/440. This PR adds components rendering both the full and compact variants of the badge displaying the user's division inside of ranked play. Also includes a proposed DTO for storing division metadata, which I hope will later be used when we get web to serve tier/division data to the client. I prefered doing this over implicitly assuming divisions start at 600, are spaced 100 ELO apart, etc. since the intention is to have this metadata served by web anyway. --- .../TestSceneCompactDivisionBadge.cs | 78 +++++++++++++++ .../RankedPlay/TestSceneDivisionBadge.cs | 71 ++++++++++++++ .../Requests/Responses/RankedPlayDivision.cs | 53 +++++++++++ .../Online/RankedPlay/CompactDivisionBadge.cs | 87 +++++++++++++++++ .../RankedPlay/Components/DivisionBadge.cs | 95 +++++++++++++++++++ 5 files changed, 384 insertions(+) create mode 100644 osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs create mode 100644 osu.Game.Tests/Visual/RankedPlay/TestSceneDivisionBadge.cs create mode 100644 osu.Game/Online/API/Requests/Responses/RankedPlayDivision.cs create mode 100644 osu.Game/Online/RankedPlay/CompactDivisionBadge.cs create mode 100644 osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/DivisionBadge.cs diff --git a/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs b/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs new file mode 100644 index 000000000000..77df9d45cb85 --- /dev/null +++ b/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs @@ -0,0 +1,78 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Linq; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.RankedPlay; +using osuTK; + +namespace osu.Game.Tests.Visual.RankedPlay +{ + public partial class TestSceneCompactDivisionBadge : OsuTestScene + { + public TestSceneCompactDivisionBadge() + { + Child = new GridContainer + { + RelativeSizeAxes = Axes.Both, + ColumnDimensions = new[] + { + new Dimension(), + new Dimension(), + }, + Content = new[] + { + new Drawable[] + { + new FillFlowContainer + { + AutoSizeAxes = Axes.Y, + Width = 150, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Direction = FillDirection.Full, + Spacing = new Vector2(10), + Children = DIVISIONS.Select(d => new CompactDivisionBadge(d)).ToArray(), + }, + new FillFlowContainer + { + AutoSizeAxes = Axes.Both, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Direction = FillDirection.Vertical, + Spacing = new Vector2(10), + ChildrenEnumerable = Enumerable.Range(1, 100).Where(i => i == 1 || i == 100 || i % 5 == 0).Select(i => new CompactDivisionBadge( + new RankedPlayDivision { Tier = Tier.Lustrous, DisplayName = "Lustrous", StartRating = 2400, EndRating = 3000 }, + i + )), + } + } + }, + }; + } + + public static readonly RankedPlayDivision[] DIVISIONS = + [ + new RankedPlayDivision { Key = "Bronze-I", Tier = Tier.Bronze, Division = Division.I, DisplayName = "Bronze I", StartRating = 600, EndRating = 699 }, + new RankedPlayDivision { Key = "Bronze-II", Tier = Tier.Bronze, Division = Division.II, DisplayName = "Bronze II", StartRating = 700, EndRating = 799 }, + new RankedPlayDivision { Key = "Bronze-III", Tier = Tier.Bronze, Division = Division.III, DisplayName = "Bronze III", StartRating = 800, EndRating = 899 }, + new RankedPlayDivision { Key = "Silver-I", Tier = Tier.Silver, Division = Division.I, DisplayName = "Silver I", StartRating = 900, EndRating = 999 }, + new RankedPlayDivision { Key = "Silver-II", Tier = Tier.Silver, Division = Division.II, DisplayName = "Silver II", StartRating = 1000, EndRating = 1099 }, + new RankedPlayDivision { Key = "Silver-III", Tier = Tier.Silver, Division = Division.III, DisplayName = "Silver III", StartRating = 1100, EndRating = 1199 }, + new RankedPlayDivision { Key = "Gold-I", Tier = Tier.Gold, Division = Division.I, DisplayName = "Gold I", StartRating = 1200, EndRating = 1299 }, + new RankedPlayDivision { Key = "Gold-II", Tier = Tier.Gold, Division = Division.II, DisplayName = "Gold II", StartRating = 1300, EndRating = 1399 }, + new RankedPlayDivision { Key = "Gold-III", Tier = Tier.Gold, Division = Division.III, DisplayName = "Gold III", StartRating = 1400, EndRating = 1499 }, + new RankedPlayDivision { Key = "Platinum-I", Tier = Tier.Platinum, Division = Division.I, DisplayName = "Platinum I", StartRating = 1500, EndRating = 1599 }, + new RankedPlayDivision { Key = "Platinum-II", Tier = Tier.Platinum, Division = Division.II, DisplayName = "Platinum II", StartRating = 1600, EndRating = 1699 }, + new RankedPlayDivision { Key = "Platinum-III", Tier = Tier.Platinum, Division = Division.III, DisplayName = "Platinum III", StartRating = 1700, EndRating = 1799 }, + new RankedPlayDivision { Key = "Rhodium-I", Tier = Tier.Rhodium, Division = Division.I, DisplayName = "Rhodium I", StartRating = 1800, EndRating = 1899 }, + new RankedPlayDivision { Key = "Rhodium-II", Tier = Tier.Rhodium, Division = Division.II, DisplayName = "Rhodium II", StartRating = 1900, EndRating = 1999 }, + new RankedPlayDivision { Key = "Rhodium-III", Tier = Tier.Rhodium, Division = Division.III, DisplayName = "Rhodium III", StartRating = 2000, EndRating = 2099 }, + new RankedPlayDivision { Key = "Radiant-I", Tier = Tier.Radiant, Division = Division.I, DisplayName = "Radiant I", StartRating = 2100, EndRating = 2199 }, + new RankedPlayDivision { Key = "Radiant-II", Tier = Tier.Radiant, Division = Division.II, DisplayName = "Radiant II", StartRating = 2200, EndRating = 2299 }, + new RankedPlayDivision { Key = "Radiant-III", Tier = Tier.Radiant, Division = Division.III, DisplayName = "Radiant III", StartRating = 2300, EndRating = 2399 }, + ]; + } +} diff --git a/osu.Game.Tests/Visual/RankedPlay/TestSceneDivisionBadge.cs b/osu.Game.Tests/Visual/RankedPlay/TestSceneDivisionBadge.cs new file mode 100644 index 000000000000..6158bea83d57 --- /dev/null +++ b/osu.Game.Tests/Visual/RankedPlay/TestSceneDivisionBadge.cs @@ -0,0 +1,71 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Linq; +using NUnit.Framework; +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Rulesets; +using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay.Components; +using osuTK; + +namespace osu.Game.Tests.Visual.RankedPlay +{ + public partial class TestSceneDivisionBadge : OsuTestScene + { + [Resolved] + private RulesetStore rulesetStore { get; set; } = null!; + + [TestCase("osu")] + [TestCase("taiko")] + [TestCase("fruits")] + [TestCase("mania")] + public void TestRuleset(string rulesetName) + { + var ruleset = rulesetStore.GetRuleset(rulesetName)!; + AddStep("create", () => + { + Child = new GridContainer + { + RelativeSizeAxes = Axes.Both, + ColumnDimensions = new[] + { + new Dimension(), + new Dimension(), + }, + Content = new[] + { + new Drawable[] + { + new FillFlowContainer + { + AutoSizeAxes = Axes.Y, + Width = 400, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Direction = FillDirection.Full, + Spacing = new Vector2(10), + ChildrenEnumerable = TestSceneCompactDivisionBadge.DIVISIONS.Select(d => new DivisionBadge(d, ruleset)), + }, + new FillFlowContainer + { + AutoSizeAxes = Axes.Both, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Direction = FillDirection.Vertical, + Spacing = new Vector2(10), + ChildrenEnumerable = Enumerable.Range(1, 100).Where(i => i == 1 || i == 100 || i % 20 == 0).Select(i => new DivisionBadge( + new RankedPlayDivision { Key = "Lustrous", Tier = Tier.Lustrous, DisplayName = "Lustrous", StartRating = 2400, EndRating = 3000 }, + ruleset, + i + )), + }, + }, + }, + }; + }); + } + } +} diff --git a/osu.Game/Online/API/Requests/Responses/RankedPlayDivision.cs b/osu.Game/Online/API/Requests/Responses/RankedPlayDivision.cs new file mode 100644 index 000000000000..0d3cde52d8fb --- /dev/null +++ b/osu.Game/Online/API/Requests/Responses/RankedPlayDivision.cs @@ -0,0 +1,53 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Diagnostics.CodeAnalysis; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace osu.Game.Online.API.Requests.Responses +{ + public class RankedPlayDivision + { + [JsonProperty(@"key")] + public string Key = string.Empty; + + [JsonProperty(@"tier")] + public Tier Tier; + + [JsonProperty(@"division")] + public Division Division; + + [JsonProperty(@"display_name")] + public string DisplayName = string.Empty; + + [JsonProperty(@"start_rating")] + public int StartRating; + + [JsonProperty("@end_rating")] + public int EndRating; + + public int Width => EndRating - StartRating + 1; + } + + [JsonConverter(typeof(StringEnumConverter))] + public enum Tier + { + Bronze, + Silver, + Gold, + Platinum, + Rhodium, + Radiant, + Lustrous, + } + + [SuppressMessage("ReSharper", "InconsistentNaming")] + [JsonConverter(typeof(StringEnumConverter))] + public enum Division + { + I = 1, + II = 2, + III = 3, + } +} diff --git a/osu.Game/Online/RankedPlay/CompactDivisionBadge.cs b/osu.Game/Online/RankedPlay/CompactDivisionBadge.cs new file mode 100644 index 000000000000..77a83f90e224 --- /dev/null +++ b/osu.Game/Online/RankedPlay/CompactDivisionBadge.cs @@ -0,0 +1,87 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Linq; +using osu.Framework.Allocation; +using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Extensions.LocalisationExtensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Cursor; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Graphics.Sprites; +using osu.Framework.Graphics.Textures; +using osu.Framework.Localisation; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Online.API.Requests.Responses; +using osuTK; +using osuTK.Graphics; + +namespace osu.Game.Online.RankedPlay +{ + public partial class CompactDivisionBadge : CompositeDrawable, IHasTooltip + { + private readonly RankedPlayDivision division; + private readonly int? rank; + + public CompactDivisionBadge(RankedPlayDivision division, int? rank = null) + { + if (division.Tier == Tier.Lustrous && rank == null) + throw new ArgumentException("Must specify a rank for Lustrous tier."); + + this.division = division; + this.rank = rank; + } + + [BackgroundDependencyLoader] + private void load(TextureStore textures) + { + Size = new Vector2(36, 19.5f); + + InternalChild = new Sprite + { + RelativeSizeAxes = Axes.Both, + Texture = textures.Get(@$"Online/RankedPlay/Tiers/Compact/{division.Tier}"), + }; + + if (division.Tier != Tier.Lustrous) + { + AddInternal(new FillFlowContainer + { + AutoSizeAxes = Axes.Both, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Direction = FillDirection.Horizontal, + Spacing = new Vector2(4), + ChildrenEnumerable = Enumerable.Range(1, (int)division.Division) + .Select(_ => new Container + { + Size = new Vector2(3, 10), + Masking = true, + CornerRadius = 1.5f, + Child = new Box + { + RelativeSizeAxes = Axes.Both, + Colour = Color4.Black.Opacity(0.75f), + }, + }), + }); + } + else if (rank != null) + { + AddInternal(new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Font = OsuFont.Torus.With(size: 18, weight: FontWeight.Bold), + Colour = Colour4.Black.Opacity(0.75f), + Text = rank.ToLocalisableString(@"N0"), + }); + } + } + + public LocalisableString TooltipText => division.DisplayName; + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/DivisionBadge.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/DivisionBadge.cs new file mode 100644 index 000000000000..856bd6812cc3 --- /dev/null +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/DivisionBadge.cs @@ -0,0 +1,95 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Cursor; +using osu.Framework.Graphics.Sprites; +using osu.Framework.Graphics.Textures; +using osu.Framework.Localisation; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.RankedPlay; +using osu.Game.Rulesets; +using osuTK; + +namespace osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay.Components +{ + public partial class DivisionBadge : CompositeDrawable, IHasTooltip + { + private readonly RankedPlayDivision division; + private readonly RulesetInfo ruleset; + private readonly int? rank; + + public DivisionBadge(RankedPlayDivision division, RulesetInfo ruleset, int? rank = null) + { + if (division.Tier == Tier.Lustrous && rank == null) + throw new ArgumentException("Must specify a rank for Lustrous tier."); + + this.division = division; + this.ruleset = ruleset; + this.rank = rank; + } + + [BackgroundDependencyLoader] + private void load(TextureStore textures) + { + Size = division.Tier switch + { + Tier.Bronze => new Vector2(120, 96), + Tier.Silver => new Vector2(120, 99.75f), + Tier.Gold => new Vector2(120, 100.5f), + Tier.Platinum => new Vector2(120, 107.25f), + Tier.Rhodium => new Vector2(120, 108), + Tier.Radiant => new Vector2(120, 112.5f), + Tier.Lustrous => new Vector2(120, 122.5f), + _ => throw new ArgumentOutOfRangeException() + }; + + InternalChildren = new Drawable[] + { + new Sprite + { + RelativeSizeAxes = Axes.Both, + Texture = textures.Get($@"Online/RankedPlay/Tiers/Base/{division.Tier}"), + FillMode = FillMode.Fit, + }, + new Sprite + { + Size = division.Tier switch + { + Tier.Bronze => new Vector2(33), + Tier.Silver => new Vector2(34.5f), + _ => new Vector2(36), + }, + Position = division.Tier switch + { + Tier.Bronze => new Vector2(43.5f, 24.75f), + Tier.Silver => new Vector2(42.75f, 27), + Tier.Gold => new Vector2(42, 23.25f), + Tier.Platinum => new Vector2(42, 28.5f), + Tier.Rhodium => new Vector2(42, 30), + Tier.Radiant => new Vector2(42, 33), + Tier.Lustrous => new Vector2(42, 43.5f), + _ => throw new ArgumentOutOfRangeException() + }, + Texture = textures.Get($@"Online/RankedPlay/Tiers/Rulesets/{ruleset.ShortName}"), + }, + new Sprite + { + RelativeSizeAxes = Axes.Both, + Texture = textures.Get($@"Online/RankedPlay/Tiers/Stars/{division.Key}"), + FillMode = FillMode.Fit, + }, + new CompactDivisionBadge(division, rank) + { + Anchor = Anchor.BottomCentre, + Origin = Anchor.BottomCentre, + }, + }; + } + + public LocalisableString TooltipText => division.DisplayName; + } +} From d9229188478c7a4be0ca4dc89c4bd4c9f45617fe Mon Sep 17 00:00:00 2001 From: Krzysztof Gutkowski Date: Wed, 7 Oct 2026 12:09:00 +0200 Subject: [PATCH 2/5] Move enums around --- .../TestSceneCompactDivisionBadge.cs | 41 ++++++++++--------- .../RankedPlay/TestSceneDivisionBadge.cs | 3 +- ...ayDivision.cs => APIRankedPlayDivision.cs} | 29 +++---------- .../Online/RankedPlay/CompactDivisionBadge.cs | 9 ++-- .../Online/RankedPlay/RankedPlayDivision.cs | 18 ++++++++ .../RankedPlay/Components/DivisionBadge.cs | 40 +++++++++--------- 6 files changed, 71 insertions(+), 69 deletions(-) rename osu.Game/Online/API/Requests/Responses/{RankedPlayDivision.cs => APIRankedPlayDivision.cs} (60%) create mode 100644 osu.Game/Online/RankedPlay/RankedPlayDivision.cs diff --git a/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs b/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs index 77df9d45cb85..63b41fd5f9c4 100644 --- a/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs +++ b/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs @@ -6,6 +6,7 @@ using osu.Framework.Graphics.Containers; using osu.Game.Online.API.Requests.Responses; using osu.Game.Online.RankedPlay; +using osu.Game.Scoring; using osuTK; namespace osu.Game.Tests.Visual.RankedPlay @@ -44,7 +45,7 @@ public TestSceneCompactDivisionBadge() Direction = FillDirection.Vertical, Spacing = new Vector2(10), ChildrenEnumerable = Enumerable.Range(1, 100).Where(i => i == 1 || i == 100 || i % 5 == 0).Select(i => new CompactDivisionBadge( - new RankedPlayDivision { Tier = Tier.Lustrous, DisplayName = "Lustrous", StartRating = 2400, EndRating = 3000 }, + new APIRankedPlayDivision { Tier = RankingTier.Lustrous, DisplayName = "Lustrous", StartRating = 2400, EndRating = 3000 }, i )), } @@ -53,26 +54,26 @@ public TestSceneCompactDivisionBadge() }; } - public static readonly RankedPlayDivision[] DIVISIONS = + public static readonly APIRankedPlayDivision[] DIVISIONS = [ - new RankedPlayDivision { Key = "Bronze-I", Tier = Tier.Bronze, Division = Division.I, DisplayName = "Bronze I", StartRating = 600, EndRating = 699 }, - new RankedPlayDivision { Key = "Bronze-II", Tier = Tier.Bronze, Division = Division.II, DisplayName = "Bronze II", StartRating = 700, EndRating = 799 }, - new RankedPlayDivision { Key = "Bronze-III", Tier = Tier.Bronze, Division = Division.III, DisplayName = "Bronze III", StartRating = 800, EndRating = 899 }, - new RankedPlayDivision { Key = "Silver-I", Tier = Tier.Silver, Division = Division.I, DisplayName = "Silver I", StartRating = 900, EndRating = 999 }, - new RankedPlayDivision { Key = "Silver-II", Tier = Tier.Silver, Division = Division.II, DisplayName = "Silver II", StartRating = 1000, EndRating = 1099 }, - new RankedPlayDivision { Key = "Silver-III", Tier = Tier.Silver, Division = Division.III, DisplayName = "Silver III", StartRating = 1100, EndRating = 1199 }, - new RankedPlayDivision { Key = "Gold-I", Tier = Tier.Gold, Division = Division.I, DisplayName = "Gold I", StartRating = 1200, EndRating = 1299 }, - new RankedPlayDivision { Key = "Gold-II", Tier = Tier.Gold, Division = Division.II, DisplayName = "Gold II", StartRating = 1300, EndRating = 1399 }, - new RankedPlayDivision { Key = "Gold-III", Tier = Tier.Gold, Division = Division.III, DisplayName = "Gold III", StartRating = 1400, EndRating = 1499 }, - new RankedPlayDivision { Key = "Platinum-I", Tier = Tier.Platinum, Division = Division.I, DisplayName = "Platinum I", StartRating = 1500, EndRating = 1599 }, - new RankedPlayDivision { Key = "Platinum-II", Tier = Tier.Platinum, Division = Division.II, DisplayName = "Platinum II", StartRating = 1600, EndRating = 1699 }, - new RankedPlayDivision { Key = "Platinum-III", Tier = Tier.Platinum, Division = Division.III, DisplayName = "Platinum III", StartRating = 1700, EndRating = 1799 }, - new RankedPlayDivision { Key = "Rhodium-I", Tier = Tier.Rhodium, Division = Division.I, DisplayName = "Rhodium I", StartRating = 1800, EndRating = 1899 }, - new RankedPlayDivision { Key = "Rhodium-II", Tier = Tier.Rhodium, Division = Division.II, DisplayName = "Rhodium II", StartRating = 1900, EndRating = 1999 }, - new RankedPlayDivision { Key = "Rhodium-III", Tier = Tier.Rhodium, Division = Division.III, DisplayName = "Rhodium III", StartRating = 2000, EndRating = 2099 }, - new RankedPlayDivision { Key = "Radiant-I", Tier = Tier.Radiant, Division = Division.I, DisplayName = "Radiant I", StartRating = 2100, EndRating = 2199 }, - new RankedPlayDivision { Key = "Radiant-II", Tier = Tier.Radiant, Division = Division.II, DisplayName = "Radiant II", StartRating = 2200, EndRating = 2299 }, - new RankedPlayDivision { Key = "Radiant-III", Tier = Tier.Radiant, Division = Division.III, DisplayName = "Radiant III", StartRating = 2300, EndRating = 2399 }, + new APIRankedPlayDivision { Key = "Bronze-I", Tier = RankingTier.Bronze, Division = Division.I, DisplayName = "Bronze I", StartRating = 600, EndRating = 699 }, + new APIRankedPlayDivision { Key = "Bronze-II", Tier = RankingTier.Bronze, Division = Division.II, DisplayName = "Bronze II", StartRating = 700, EndRating = 799 }, + new APIRankedPlayDivision { Key = "Bronze-III", Tier = RankingTier.Bronze, Division = Division.III, DisplayName = "Bronze III", StartRating = 800, EndRating = 899 }, + new APIRankedPlayDivision { Key = "Silver-I", Tier = RankingTier.Silver, Division = Division.I, DisplayName = "Silver I", StartRating = 900, EndRating = 999 }, + new APIRankedPlayDivision { Key = "Silver-II", Tier = RankingTier.Silver, Division = Division.II, DisplayName = "Silver II", StartRating = 1000, EndRating = 1099 }, + new APIRankedPlayDivision { Key = "Silver-III", Tier = RankingTier.Silver, Division = Division.III, DisplayName = "Silver III", StartRating = 1100, EndRating = 1199 }, + new APIRankedPlayDivision { Key = "Gold-I", Tier = RankingTier.Gold, Division = Division.I, DisplayName = "Gold I", StartRating = 1200, EndRating = 1299 }, + new APIRankedPlayDivision { Key = "Gold-II", Tier = RankingTier.Gold, Division = Division.II, DisplayName = "Gold II", StartRating = 1300, EndRating = 1399 }, + new APIRankedPlayDivision { Key = "Gold-III", Tier = RankingTier.Gold, Division = Division.III, DisplayName = "Gold III", StartRating = 1400, EndRating = 1499 }, + new APIRankedPlayDivision { Key = "Platinum-I", Tier = RankingTier.Platinum, Division = Division.I, DisplayName = "Platinum I", StartRating = 1500, EndRating = 1599 }, + new APIRankedPlayDivision { Key = "Platinum-II", Tier = RankingTier.Platinum, Division = Division.II, DisplayName = "Platinum II", StartRating = 1600, EndRating = 1699 }, + new APIRankedPlayDivision { Key = "Platinum-III", Tier = RankingTier.Platinum, Division = Division.III, DisplayName = "Platinum III", StartRating = 1700, EndRating = 1799 }, + new APIRankedPlayDivision { Key = "Rhodium-I", Tier = RankingTier.Rhodium, Division = Division.I, DisplayName = "Rhodium I", StartRating = 1800, EndRating = 1899 }, + new APIRankedPlayDivision { Key = "Rhodium-II", Tier = RankingTier.Rhodium, Division = Division.II, DisplayName = "Rhodium II", StartRating = 1900, EndRating = 1999 }, + new APIRankedPlayDivision { Key = "Rhodium-III", Tier = RankingTier.Rhodium, Division = Division.III, DisplayName = "Rhodium III", StartRating = 2000, EndRating = 2099 }, + new APIRankedPlayDivision { Key = "Radiant-I", Tier = RankingTier.Radiant, Division = Division.I, DisplayName = "Radiant I", StartRating = 2100, EndRating = 2199 }, + new APIRankedPlayDivision { Key = "Radiant-II", Tier = RankingTier.Radiant, Division = Division.II, DisplayName = "Radiant II", StartRating = 2200, EndRating = 2299 }, + new APIRankedPlayDivision { Key = "Radiant-III", Tier = RankingTier.Radiant, Division = Division.III, DisplayName = "Radiant III", StartRating = 2300, EndRating = 2399 }, ]; } } diff --git a/osu.Game.Tests/Visual/RankedPlay/TestSceneDivisionBadge.cs b/osu.Game.Tests/Visual/RankedPlay/TestSceneDivisionBadge.cs index 6158bea83d57..a7004231112f 100644 --- a/osu.Game.Tests/Visual/RankedPlay/TestSceneDivisionBadge.cs +++ b/osu.Game.Tests/Visual/RankedPlay/TestSceneDivisionBadge.cs @@ -8,6 +8,7 @@ using osu.Framework.Graphics.Containers; using osu.Game.Online.API.Requests.Responses; using osu.Game.Rulesets; +using osu.Game.Scoring; using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay.Components; using osuTK; @@ -57,7 +58,7 @@ public void TestRuleset(string rulesetName) Direction = FillDirection.Vertical, Spacing = new Vector2(10), ChildrenEnumerable = Enumerable.Range(1, 100).Where(i => i == 1 || i == 100 || i % 20 == 0).Select(i => new DivisionBadge( - new RankedPlayDivision { Key = "Lustrous", Tier = Tier.Lustrous, DisplayName = "Lustrous", StartRating = 2400, EndRating = 3000 }, + new APIRankedPlayDivision { Key = "Lustrous", Tier = RankingTier.Lustrous, DisplayName = "Lustrous", StartRating = 2400, EndRating = 3000 }, ruleset, i )), diff --git a/osu.Game/Online/API/Requests/Responses/RankedPlayDivision.cs b/osu.Game/Online/API/Requests/Responses/APIRankedPlayDivision.cs similarity index 60% rename from osu.Game/Online/API/Requests/Responses/RankedPlayDivision.cs rename to osu.Game/Online/API/Requests/Responses/APIRankedPlayDivision.cs index 0d3cde52d8fb..f0e1106f6844 100644 --- a/osu.Game/Online/API/Requests/Responses/RankedPlayDivision.cs +++ b/osu.Game/Online/API/Requests/Responses/APIRankedPlayDivision.cs @@ -1,19 +1,21 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -using System.Diagnostics.CodeAnalysis; using Newtonsoft.Json; using Newtonsoft.Json.Converters; +using osu.Game.Online.RankedPlay; +using osu.Game.Scoring; namespace osu.Game.Online.API.Requests.Responses { - public class RankedPlayDivision + public class APIRankedPlayDivision { [JsonProperty(@"key")] public string Key = string.Empty; [JsonProperty(@"tier")] - public Tier Tier; + [JsonConverter(typeof(StringEnumConverter))] + public RankingTier Tier; [JsonProperty(@"division")] public Division Division; @@ -29,25 +31,4 @@ public class RankedPlayDivision public int Width => EndRating - StartRating + 1; } - - [JsonConverter(typeof(StringEnumConverter))] - public enum Tier - { - Bronze, - Silver, - Gold, - Platinum, - Rhodium, - Radiant, - Lustrous, - } - - [SuppressMessage("ReSharper", "InconsistentNaming")] - [JsonConverter(typeof(StringEnumConverter))] - public enum Division - { - I = 1, - II = 2, - III = 3, - } } diff --git a/osu.Game/Online/RankedPlay/CompactDivisionBadge.cs b/osu.Game/Online/RankedPlay/CompactDivisionBadge.cs index 77a83f90e224..0580eb633fee 100644 --- a/osu.Game/Online/RankedPlay/CompactDivisionBadge.cs +++ b/osu.Game/Online/RankedPlay/CompactDivisionBadge.cs @@ -16,6 +16,7 @@ using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osu.Game.Online.API.Requests.Responses; +using osu.Game.Scoring; using osuTK; using osuTK.Graphics; @@ -23,12 +24,12 @@ namespace osu.Game.Online.RankedPlay { public partial class CompactDivisionBadge : CompositeDrawable, IHasTooltip { - private readonly RankedPlayDivision division; + private readonly APIRankedPlayDivision division; private readonly int? rank; - public CompactDivisionBadge(RankedPlayDivision division, int? rank = null) + public CompactDivisionBadge(APIRankedPlayDivision division, int? rank = null) { - if (division.Tier == Tier.Lustrous && rank == null) + if (division.Tier == RankingTier.Lustrous && rank == null) throw new ArgumentException("Must specify a rank for Lustrous tier."); this.division = division; @@ -46,7 +47,7 @@ private void load(TextureStore textures) Texture = textures.Get(@$"Online/RankedPlay/Tiers/Compact/{division.Tier}"), }; - if (division.Tier != Tier.Lustrous) + if (division.Tier != RankingTier.Lustrous) { AddInternal(new FillFlowContainer { diff --git a/osu.Game/Online/RankedPlay/RankedPlayDivision.cs b/osu.Game/Online/RankedPlay/RankedPlayDivision.cs new file mode 100644 index 000000000000..374fc8be8240 --- /dev/null +++ b/osu.Game/Online/RankedPlay/RankedPlayDivision.cs @@ -0,0 +1,18 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Diagnostics.CodeAnalysis; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace osu.Game.Online.RankedPlay +{ + [SuppressMessage("ReSharper", "InconsistentNaming")] + [JsonConverter(typeof(StringEnumConverter))] + public enum Division + { + I = 1, + II = 2, + III = 3, + } +} diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/DivisionBadge.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/DivisionBadge.cs index 856bd6812cc3..852c10339564 100644 --- a/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/DivisionBadge.cs +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/DivisionBadge.cs @@ -10,21 +10,21 @@ using osu.Framework.Graphics.Textures; using osu.Framework.Localisation; using osu.Game.Online.API.Requests.Responses; -using osu.Game.Online.RankedPlay; using osu.Game.Rulesets; +using osu.Game.Scoring; using osuTK; namespace osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay.Components { public partial class DivisionBadge : CompositeDrawable, IHasTooltip { - private readonly RankedPlayDivision division; + private readonly APIRankedPlayDivision division; private readonly RulesetInfo ruleset; private readonly int? rank; - public DivisionBadge(RankedPlayDivision division, RulesetInfo ruleset, int? rank = null) + public DivisionBadge(APIRankedPlayDivision division, RulesetInfo ruleset, int? rank = null) { - if (division.Tier == Tier.Lustrous && rank == null) + if (division.Tier == RankingTier.Lustrous && rank == null) throw new ArgumentException("Must specify a rank for Lustrous tier."); this.division = division; @@ -37,13 +37,13 @@ private void load(TextureStore textures) { Size = division.Tier switch { - Tier.Bronze => new Vector2(120, 96), - Tier.Silver => new Vector2(120, 99.75f), - Tier.Gold => new Vector2(120, 100.5f), - Tier.Platinum => new Vector2(120, 107.25f), - Tier.Rhodium => new Vector2(120, 108), - Tier.Radiant => new Vector2(120, 112.5f), - Tier.Lustrous => new Vector2(120, 122.5f), + RankingTier.Bronze => new Vector2(120, 96), + RankingTier.Silver => new Vector2(120, 99.75f), + RankingTier.Gold => new Vector2(120, 100.5f), + RankingTier.Platinum => new Vector2(120, 107.25f), + RankingTier.Rhodium => new Vector2(120, 108), + RankingTier.Radiant => new Vector2(120, 112.5f), + RankingTier.Lustrous => new Vector2(120, 122.5f), _ => throw new ArgumentOutOfRangeException() }; @@ -59,19 +59,19 @@ private void load(TextureStore textures) { Size = division.Tier switch { - Tier.Bronze => new Vector2(33), - Tier.Silver => new Vector2(34.5f), + RankingTier.Bronze => new Vector2(33), + RankingTier.Silver => new Vector2(34.5f), _ => new Vector2(36), }, Position = division.Tier switch { - Tier.Bronze => new Vector2(43.5f, 24.75f), - Tier.Silver => new Vector2(42.75f, 27), - Tier.Gold => new Vector2(42, 23.25f), - Tier.Platinum => new Vector2(42, 28.5f), - Tier.Rhodium => new Vector2(42, 30), - Tier.Radiant => new Vector2(42, 33), - Tier.Lustrous => new Vector2(42, 43.5f), + RankingTier.Bronze => new Vector2(43.5f, 24.75f), + RankingTier.Silver => new Vector2(42.75f, 27), + RankingTier.Gold => new Vector2(42, 23.25f), + RankingTier.Platinum => new Vector2(42, 28.5f), + RankingTier.Rhodium => new Vector2(42, 30), + RankingTier.Radiant => new Vector2(42, 33), + RankingTier.Lustrous => new Vector2(42, 43.5f), _ => throw new ArgumentOutOfRangeException() }, Texture = textures.Get($@"Online/RankedPlay/Tiers/Rulesets/{ruleset.ShortName}"), From 0f7eb21bf9276420356f73005669509e7629d8ce Mon Sep 17 00:00:00 2001 From: Krzysztof Gutkowski Date: Wed, 7 Oct 2026 12:11:43 +0200 Subject: [PATCH 3/5] Move `CompactDivisionBadge` into right location --- .../Visual/RankedPlay/TestSceneCompactDivisionBadge.cs | 1 + .../Matchmaking/RankedPlay/Components}/CompactDivisionBadge.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) rename osu.Game/{Online/RankedPlay => Screens/OnlinePlay/Matchmaking/RankedPlay/Components}/CompactDivisionBadge.cs (97%) diff --git a/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs b/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs index 63b41fd5f9c4..6081416e8181 100644 --- a/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs +++ b/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs @@ -7,6 +7,7 @@ using osu.Game.Online.API.Requests.Responses; using osu.Game.Online.RankedPlay; using osu.Game.Scoring; +using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay.Components; using osuTK; namespace osu.Game.Tests.Visual.RankedPlay diff --git a/osu.Game/Online/RankedPlay/CompactDivisionBadge.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/CompactDivisionBadge.cs similarity index 97% rename from osu.Game/Online/RankedPlay/CompactDivisionBadge.cs rename to osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/CompactDivisionBadge.cs index 0580eb633fee..53232a83e1de 100644 --- a/osu.Game/Online/RankedPlay/CompactDivisionBadge.cs +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/CompactDivisionBadge.cs @@ -20,7 +20,7 @@ using osuTK; using osuTK.Graphics; -namespace osu.Game.Online.RankedPlay +namespace osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay.Components { public partial class CompactDivisionBadge : CompositeDrawable, IHasTooltip { From bbb2094f9488d3b1f83a6ea942dc0b4425c9318b Mon Sep 17 00:00:00 2001 From: Krzysztof Gutkowski Date: Wed, 7 Oct 2026 12:15:06 +0200 Subject: [PATCH 4/5] Move stars layer under ruleset layer --- .../RankedPlay/Components/DivisionBadge.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/DivisionBadge.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/DivisionBadge.cs index 852c10339564..fb267be75207 100644 --- a/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/DivisionBadge.cs +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/Components/DivisionBadge.cs @@ -56,6 +56,12 @@ private void load(TextureStore textures) FillMode = FillMode.Fit, }, new Sprite + { + RelativeSizeAxes = Axes.Both, + Texture = textures.Get($@"Online/RankedPlay/Tiers/Stars/{division.Key}"), + FillMode = FillMode.Fit, + }, + new Sprite { Size = division.Tier switch { @@ -76,12 +82,6 @@ private void load(TextureStore textures) }, Texture = textures.Get($@"Online/RankedPlay/Tiers/Rulesets/{ruleset.ShortName}"), }, - new Sprite - { - RelativeSizeAxes = Axes.Both, - Texture = textures.Get($@"Online/RankedPlay/Tiers/Stars/{division.Key}"), - FillMode = FillMode.Fit, - }, new CompactDivisionBadge(division, rank) { Anchor = Anchor.BottomCentre, From eee70c8a2899a22147c5004e6729c5b9b4b9ff95 Mon Sep 17 00:00:00 2001 From: Krzysztof Gutkowski Date: Wed, 7 Oct 2026 12:34:38 +0200 Subject: [PATCH 5/5] Actually rename enum --- .../TestSceneCompactDivisionBadge.cs | 36 +++++++++---------- .../Responses/APIRankedPlayDivision.cs | 2 +- .../Online/RankedPlay/RankedPlayDivision.cs | 2 +- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs b/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs index 6081416e8181..958439fb3d76 100644 --- a/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs +++ b/osu.Game.Tests/Visual/RankedPlay/TestSceneCompactDivisionBadge.cs @@ -57,24 +57,24 @@ public TestSceneCompactDivisionBadge() public static readonly APIRankedPlayDivision[] DIVISIONS = [ - new APIRankedPlayDivision { Key = "Bronze-I", Tier = RankingTier.Bronze, Division = Division.I, DisplayName = "Bronze I", StartRating = 600, EndRating = 699 }, - new APIRankedPlayDivision { Key = "Bronze-II", Tier = RankingTier.Bronze, Division = Division.II, DisplayName = "Bronze II", StartRating = 700, EndRating = 799 }, - new APIRankedPlayDivision { Key = "Bronze-III", Tier = RankingTier.Bronze, Division = Division.III, DisplayName = "Bronze III", StartRating = 800, EndRating = 899 }, - new APIRankedPlayDivision { Key = "Silver-I", Tier = RankingTier.Silver, Division = Division.I, DisplayName = "Silver I", StartRating = 900, EndRating = 999 }, - new APIRankedPlayDivision { Key = "Silver-II", Tier = RankingTier.Silver, Division = Division.II, DisplayName = "Silver II", StartRating = 1000, EndRating = 1099 }, - new APIRankedPlayDivision { Key = "Silver-III", Tier = RankingTier.Silver, Division = Division.III, DisplayName = "Silver III", StartRating = 1100, EndRating = 1199 }, - new APIRankedPlayDivision { Key = "Gold-I", Tier = RankingTier.Gold, Division = Division.I, DisplayName = "Gold I", StartRating = 1200, EndRating = 1299 }, - new APIRankedPlayDivision { Key = "Gold-II", Tier = RankingTier.Gold, Division = Division.II, DisplayName = "Gold II", StartRating = 1300, EndRating = 1399 }, - new APIRankedPlayDivision { Key = "Gold-III", Tier = RankingTier.Gold, Division = Division.III, DisplayName = "Gold III", StartRating = 1400, EndRating = 1499 }, - new APIRankedPlayDivision { Key = "Platinum-I", Tier = RankingTier.Platinum, Division = Division.I, DisplayName = "Platinum I", StartRating = 1500, EndRating = 1599 }, - new APIRankedPlayDivision { Key = "Platinum-II", Tier = RankingTier.Platinum, Division = Division.II, DisplayName = "Platinum II", StartRating = 1600, EndRating = 1699 }, - new APIRankedPlayDivision { Key = "Platinum-III", Tier = RankingTier.Platinum, Division = Division.III, DisplayName = "Platinum III", StartRating = 1700, EndRating = 1799 }, - new APIRankedPlayDivision { Key = "Rhodium-I", Tier = RankingTier.Rhodium, Division = Division.I, DisplayName = "Rhodium I", StartRating = 1800, EndRating = 1899 }, - new APIRankedPlayDivision { Key = "Rhodium-II", Tier = RankingTier.Rhodium, Division = Division.II, DisplayName = "Rhodium II", StartRating = 1900, EndRating = 1999 }, - new APIRankedPlayDivision { Key = "Rhodium-III", Tier = RankingTier.Rhodium, Division = Division.III, DisplayName = "Rhodium III", StartRating = 2000, EndRating = 2099 }, - new APIRankedPlayDivision { Key = "Radiant-I", Tier = RankingTier.Radiant, Division = Division.I, DisplayName = "Radiant I", StartRating = 2100, EndRating = 2199 }, - new APIRankedPlayDivision { Key = "Radiant-II", Tier = RankingTier.Radiant, Division = Division.II, DisplayName = "Radiant II", StartRating = 2200, EndRating = 2299 }, - new APIRankedPlayDivision { Key = "Radiant-III", Tier = RankingTier.Radiant, Division = Division.III, DisplayName = "Radiant III", StartRating = 2300, EndRating = 2399 }, + new APIRankedPlayDivision { Key = "Bronze-I", Tier = RankingTier.Bronze, Division = RankedPlayDivision.I, DisplayName = "Bronze I", StartRating = 600, EndRating = 699 }, + new APIRankedPlayDivision { Key = "Bronze-II", Tier = RankingTier.Bronze, Division = RankedPlayDivision.II, DisplayName = "Bronze II", StartRating = 700, EndRating = 799 }, + new APIRankedPlayDivision { Key = "Bronze-III", Tier = RankingTier.Bronze, Division = RankedPlayDivision.III, DisplayName = "Bronze III", StartRating = 800, EndRating = 899 }, + new APIRankedPlayDivision { Key = "Silver-I", Tier = RankingTier.Silver, Division = RankedPlayDivision.I, DisplayName = "Silver I", StartRating = 900, EndRating = 999 }, + new APIRankedPlayDivision { Key = "Silver-II", Tier = RankingTier.Silver, Division = RankedPlayDivision.II, DisplayName = "Silver II", StartRating = 1000, EndRating = 1099 }, + new APIRankedPlayDivision { Key = "Silver-III", Tier = RankingTier.Silver, Division = RankedPlayDivision.III, DisplayName = "Silver III", StartRating = 1100, EndRating = 1199 }, + new APIRankedPlayDivision { Key = "Gold-I", Tier = RankingTier.Gold, Division = RankedPlayDivision.I, DisplayName = "Gold I", StartRating = 1200, EndRating = 1299 }, + new APIRankedPlayDivision { Key = "Gold-II", Tier = RankingTier.Gold, Division = RankedPlayDivision.II, DisplayName = "Gold II", StartRating = 1300, EndRating = 1399 }, + new APIRankedPlayDivision { Key = "Gold-III", Tier = RankingTier.Gold, Division = RankedPlayDivision.III, DisplayName = "Gold III", StartRating = 1400, EndRating = 1499 }, + new APIRankedPlayDivision { Key = "Platinum-I", Tier = RankingTier.Platinum, Division = RankedPlayDivision.I, DisplayName = "Platinum I", StartRating = 1500, EndRating = 1599 }, + new APIRankedPlayDivision { Key = "Platinum-II", Tier = RankingTier.Platinum, Division = RankedPlayDivision.II, DisplayName = "Platinum II", StartRating = 1600, EndRating = 1699 }, + new APIRankedPlayDivision { Key = "Platinum-III", Tier = RankingTier.Platinum, Division = RankedPlayDivision.III, DisplayName = "Platinum III", StartRating = 1700, EndRating = 1799 }, + new APIRankedPlayDivision { Key = "Rhodium-I", Tier = RankingTier.Rhodium, Division = RankedPlayDivision.I, DisplayName = "Rhodium I", StartRating = 1800, EndRating = 1899 }, + new APIRankedPlayDivision { Key = "Rhodium-II", Tier = RankingTier.Rhodium, Division = RankedPlayDivision.II, DisplayName = "Rhodium II", StartRating = 1900, EndRating = 1999 }, + new APIRankedPlayDivision { Key = "Rhodium-III", Tier = RankingTier.Rhodium, Division = RankedPlayDivision.III, DisplayName = "Rhodium III", StartRating = 2000, EndRating = 2099 }, + new APIRankedPlayDivision { Key = "Radiant-I", Tier = RankingTier.Radiant, Division = RankedPlayDivision.I, DisplayName = "Radiant I", StartRating = 2100, EndRating = 2199 }, + new APIRankedPlayDivision { Key = "Radiant-II", Tier = RankingTier.Radiant, Division = RankedPlayDivision.II, DisplayName = "Radiant II", StartRating = 2200, EndRating = 2299 }, + new APIRankedPlayDivision { Key = "Radiant-III", Tier = RankingTier.Radiant, Division = RankedPlayDivision.III, DisplayName = "Radiant III", StartRating = 2300, EndRating = 2399 }, ]; } } diff --git a/osu.Game/Online/API/Requests/Responses/APIRankedPlayDivision.cs b/osu.Game/Online/API/Requests/Responses/APIRankedPlayDivision.cs index f0e1106f6844..2cb4febfbece 100644 --- a/osu.Game/Online/API/Requests/Responses/APIRankedPlayDivision.cs +++ b/osu.Game/Online/API/Requests/Responses/APIRankedPlayDivision.cs @@ -18,7 +18,7 @@ public class APIRankedPlayDivision public RankingTier Tier; [JsonProperty(@"division")] - public Division Division; + public RankedPlayDivision Division; [JsonProperty(@"display_name")] public string DisplayName = string.Empty; diff --git a/osu.Game/Online/RankedPlay/RankedPlayDivision.cs b/osu.Game/Online/RankedPlay/RankedPlayDivision.cs index 374fc8be8240..41ce8fc37159 100644 --- a/osu.Game/Online/RankedPlay/RankedPlayDivision.cs +++ b/osu.Game/Online/RankedPlay/RankedPlayDivision.cs @@ -9,7 +9,7 @@ namespace osu.Game.Online.RankedPlay { [SuppressMessage("ReSharper", "InconsistentNaming")] [JsonConverter(typeof(StringEnumConverter))] - public enum Division + public enum RankedPlayDivision { I = 1, II = 2,