Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions osu.Game.Rulesets.Mania/ManiaRuleset.cs
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,22 @@ public override IEnumerable<RulesetBeatmapAttribute> GetBeatmapAttributesForDisp
};
}

public override IEnumerable<RulesetBeatmapAttribute> GetBeatmapAttributesForRankedPlayCard(IBeatmapInfo beatmapInfo, IReadOnlyCollection<Mod> mods)
{
var attributes = GetBeatmapAttributesForDisplay(beatmapInfo, mods).ToList();

// Key count attribute isn't relevant to ranked play (it's decided by the pool).
attributes.RemoveAll(a => a.Acronym == "KC");

float holdNoteRatio = beatmapInfo.TotalObjectCount == 0 ? 0 : (float)beatmapInfo.EndTimeObjectCount / beatmapInfo.TotalObjectCount;
attributes.Insert(0, new RulesetBeatmapAttribute("Hold notes", @"HN", holdNoteRatio, holdNoteRatio, 1)
{
ValueFormat = "P0"
});

return attributes;
}

public override IRulesetFilterCriteria CreateRulesetFilterCriteria()
{
return new ManiaFilterCriteria();
Expand Down

Large diffs are not rendered by default.

30 changes: 24 additions & 6 deletions osu.Game.Tests/Visual/RankedPlay/RankedPlayTestScene.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Online.Multiplayer.MatchTypes.RankedPlay;
using osu.Game.Online.Rooms;
using osu.Game.Rulesets;
using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay;
using osu.Game.Tests.Resources;
using osu.Game.Tests.Visual.Multiplayer;
Expand All @@ -18,22 +19,39 @@ namespace osu.Game.Tests.Visual.RankedPlay
public abstract partial class RankedPlayTestScene : MultiplayerTestScene
{
/// <summary>
/// Returns 5 sample <see cref="APIBeatmap"/>s.
/// Returns 5 sample of the chosen ruleset <see cref="APIBeatmap"/>s.
/// </summary>
protected static APIBeatmap[] GetSampleBeatmaps()
protected static APIBeatmap[] GetSampleBeatmaps(RulesetInfo ruleset)
{
using var resourceStream = TestResources.OpenResource("Requests/api-beatmaps-rankedplay.json");
using var reader = new StreamReader(resourceStream);
switch (ruleset.OnlineID)
{
case 3:
{
using var resourceStream = TestResources.OpenResource("Requests/api-beatmaps-rankedplay-mania4k.json");
using var reader = new StreamReader(resourceStream);
return JsonConvert.DeserializeObject<APIBeatmap[]>(reader.ReadToEnd())!;
}

return JsonConvert.DeserializeObject<APIBeatmap[]>(reader.ReadToEnd())!;
default:
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
{
using var resourceStream = TestResources.OpenResource("Requests/api-beatmaps-rankedplay.json");
using var reader = new StreamReader(resourceStream);
return JsonConvert.DeserializeObject<APIBeatmap[]>(reader.ReadToEnd())!;
}
}
}

/// <summary>
/// A request handler that will resolve api requests to any beatmaps provided by <see cref="GetSampleBeatmaps"/>.
/// </summary>
public class BeatmapRequestHandler
{
public readonly APIBeatmap[] Beatmaps = GetSampleBeatmaps();
public APIBeatmap[] Beatmaps;

public BeatmapRequestHandler(RulesetInfo ruleset)
{
Beatmaps = GetSampleBeatmaps(ruleset);
}

public bool HandleRequest(APIRequest request)
{
Expand Down
4 changes: 3 additions & 1 deletion osu.Game.Tests/Visual/RankedPlay/TestSceneDiscardScreen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using osu.Game.Online.Multiplayer;
using osu.Game.Online.Multiplayer.MatchTypes.RankedPlay;
using osu.Game.Online.Rooms;
using osu.Game.Rulesets.Osu;
using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay;

namespace osu.Game.Tests.Visual.RankedPlay
Expand All @@ -26,7 +27,8 @@ public override void SetUpSteps()
AddStep("load screen", () => LoadScreen(screen = new RankedPlayScreen(MultiplayerClient.ClientRoom!)));
AddUntilStep("screen loaded", () => screen.IsLoaded);

var requestHandler = new BeatmapRequestHandler();
BeatmapRequestHandler requestHandler = null!;
AddStep("setup ruleset", () => requestHandler = new BeatmapRequestHandler(new OsuRuleset().RulesetInfo));

AddStep("setup request handler", () => ((DummyAPIAccess)API).HandleRequest = requestHandler.HandleRequest);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using osu.Game.Online.Multiplayer;
using osu.Game.Online.Multiplayer.MatchTypes.RankedPlay;
using osu.Game.Online.Rooms;
using osu.Game.Rulesets.Osu;
using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay;

namespace osu.Game.Tests.Visual.RankedPlay
Expand All @@ -26,7 +27,8 @@ public override void SetUpSteps()
AddStep("load screen", () => LoadScreen(screen = new RankedPlayScreen(MultiplayerClient.ClientRoom!)));
AddUntilStep("screen loaded", () => screen.IsLoaded);

var requestHandler = new BeatmapRequestHandler();
BeatmapRequestHandler requestHandler = null!;
AddStep("setup ruleset", () => requestHandler = new BeatmapRequestHandler(new OsuRuleset().RulesetInfo));

AddStep("setup request handler", () => ((DummyAPIAccess)API).HandleRequest = requestHandler.HandleRequest);

Expand Down
60 changes: 59 additions & 1 deletion osu.Game.Tests/Visual/RankedPlay/TestScenePickScreen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@
// See the LICENCE file in the repository root for full licence text.

using System.Linq;
using NUnit.Framework;
using osu.Framework.Extensions;
using osu.Framework.Testing;
using osu.Game.Graphics.UserInterface;
using osu.Game.Online.API;
using osu.Game.Online.Multiplayer;
using osu.Game.Online.Multiplayer.MatchTypes.RankedPlay;
using osu.Game.Online.Rooms;
using osu.Game.Rulesets.Mania;
using osu.Game.Rulesets.Osu;
using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay;
using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay.Hand;
using osuTK.Input;
Expand All @@ -30,8 +33,63 @@ public override void SetUpSteps()

AddStep("load screen", () => LoadScreen(screen = new RankedPlayScreen(MultiplayerClient.ClientRoom!)));
AddUntilStep("screen loaded", () => screen.IsLoaded);
}

[Test]
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
public void TestOsu()
{
BeatmapRequestHandler requestHandler = null!;
AddStep("setup ruleset", () => requestHandler = new BeatmapRequestHandler(new OsuRuleset().RulesetInfo));

AddStep("setup request handler", () => ((DummyAPIAccess)API).HandleRequest = requestHandler.HandleRequest);

AddStep("set pick state", () => MultiplayerClient.RankedPlayChangeStage(RankedPlayStage.CardPlay, state => state.ActiveUserId = API.LocalUser.Value.OnlineID).WaitSafely());

AddWaitStep("wait some", 5);

AddStep("reveal cards", () =>
{
for (int i = 0; i < 5; i++)
{
int i2 = i;
MultiplayerClient.RankedPlayRevealCard(hand => hand[i2], new MultiplayerPlaylistItem
{
ID = i2,
BeatmapID = requestHandler.Beatmaps[i2].OnlineID
}).WaitSafely();
}
});

for (int i = 0; i < 3; i++)
{
int i2 = i;
AddStep($"click card {i2}", () =>
{
InputManager.MoveMouseTo(this.ChildrenOfType<PlayerHandOfCards.PlayerHandCard>().ElementAt(i2));
InputManager.Click(MouseButton.Left);
});
}

AddWaitStep("wait", 3);

AddStep("click play button", () =>
{
var button = screen
.ChildrenOfType<PlayerHandOfCards.PlayerHandCard>()
.First(it => it.Selected)
.ChildrenOfType<ShearedButton>()
.First();

var requestHandler = new BeatmapRequestHandler();
InputManager.MoveMouseTo(button);
InputManager.Click(MouseButton.Left);
});
}

[Test]
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
public void TestMania()
{
BeatmapRequestHandler requestHandler = null!;
AddStep("setup ruleset", () => requestHandler = new BeatmapRequestHandler(new ManiaRuleset().RulesetInfo));

AddStep("setup request handler", () => ((DummyAPIAccess)API).HandleRequest = requestHandler.HandleRequest);

Expand Down
19 changes: 13 additions & 6 deletions osu.Game.Tests/Visual/RankedPlay/TestSceneRankedPlayCard.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Overlays;
using osu.Game.Rulesets;
using osu.Game.Rulesets.Catch;
using osu.Game.Rulesets.Mania;
using osu.Game.Rulesets.Osu;
using osu.Game.Rulesets.Taiko;
using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay.Card;
using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay.Hand;
using osuTK;
Expand All @@ -31,8 +35,6 @@ public partial class TestSceneRankedPlayCard : RankedPlayTestScene
[Cached]
private readonly SongPreviewParticleContainer particleContainer;

private readonly BeatmapRequestHandler requestHandler = new BeatmapRequestHandler();

public TestSceneRankedPlayCard()
{
base.Content.AddRange(new Drawable[]
Expand Down Expand Up @@ -121,6 +123,8 @@ public void TestCards()
[Test]
public void TestCardHand()
{
BeatmapRequestHandler requestHandler = null!;
AddStep("setup ruleset", () => requestHandler = new BeatmapRequestHandler(new OsuRuleset().RulesetInfo));
AddStep("setup request handler", () => ((DummyAPIAccess)API).HandleRequest = requestHandler.HandleRequest);

AddStep("add cards", () =>
Expand All @@ -143,13 +147,16 @@ public void TestCardHand()
});
}

[Resolved]
private RulesetStore rulesetStore { get; set; } = null!;

[Test]
public void TestRulesets()
{
var rulesets = rulesetStore.AvailableRulesets.Where(it => it.OnlineID >= 0);
RulesetInfo[] rulesets =
[
new OsuRuleset().RulesetInfo,
new TaikoRuleset().RulesetInfo,
new CatchRuleset().RulesetInfo,
new ManiaRuleset().RulesetInfo
];

foreach (var ruleset in rulesets)
{
Expand Down
6 changes: 4 additions & 2 deletions osu.Game.Tests/Visual/RankedPlay/TestSceneRankedPlayScreen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
using osu.Game.Online.Multiplayer;
using osu.Game.Online.Multiplayer.MatchTypes.RankedPlay;
using osu.Game.Online.Rooms;
using osu.Game.Rulesets.Osu;
using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay;
using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay.Card;
using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay.Hand;
Expand Down Expand Up @@ -108,7 +109,7 @@ public void TestRevealCards()

AddStep("load screen", () => LoadScreen(screen = new RankedPlayScreen(MultiplayerClient.ClientRoom!)));

var requestHandler = new BeatmapRequestHandler();
var requestHandler = new BeatmapRequestHandler(Ruleset.Value);

AddStep("setup request handler", () => ((DummyAPIAccess)API).HandleRequest = requestHandler.HandleRequest);

Expand Down Expand Up @@ -224,7 +225,8 @@ public void TestPreviewStopsOnEnteringGameplay()

AddStep("load screen", () => LoadScreen(screen = new RankedPlayScreen(MultiplayerClient.ClientRoom!)));

var requestHandler = new BeatmapRequestHandler();
BeatmapRequestHandler requestHandler = null!;
AddStep("setup ruleset", () => requestHandler = new BeatmapRequestHandler(new OsuRuleset().RulesetInfo));

AddStep("setup request handler", () => ((DummyAPIAccess)API).HandleRequest = requestHandler.HandleRequest);

Expand Down
7 changes: 4 additions & 3 deletions osu.Game.Tests/Visual/RankedPlay/TestSceneSongPreview.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using osu.Framework.Graphics;
using osu.Framework.Testing;
using osu.Game.Online.API;
using osu.Game.Rulesets.Osu;
using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay.Card;
using osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay.Hand;
using osuTK;
Expand All @@ -17,18 +18,18 @@ public partial class TestSceneSongPreview : RankedPlayTestScene
{
private readonly Bindable<bool> previewEnabled = new BindableBool(true);

private readonly BeatmapRequestHandler requestHandler = new BeatmapRequestHandler();

public override void SetUpSteps()
{
base.SetUpSteps();

BeatmapRequestHandler requestHandler = null!;
AddStep("setup ruleset", () => requestHandler = new BeatmapRequestHandler(new OsuRuleset().RulesetInfo));

AddStep("setup request handler", () => ((DummyAPIAccess)API).HandleRequest = requestHandler.HandleRequest);

AddStep("add cards", () =>
{
PlayerHandOfCards handOfCards;

Child = handOfCards = new PlayerHandOfCards
{
RelativeSizeAxes = Axes.Both,
Expand Down
5 changes: 5 additions & 0 deletions osu.Game/Rulesets/Difficulty/RulesetBeatmapAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ public class RulesetBeatmapAttribute
/// </summary>
public AdditionalMetric[] AdditionalMetrics { get; init; } = [];

/// <summary>
/// An optional formatting specifier for the values of this attribute.
/// </summary>
public string ValueFormat { get; init; } = string.Empty;

public RulesetBeatmapAttribute(LocalisableString label, string acronym, float originalValue, float adjustedValue, float maxValue)
{
Label = label;
Expand Down
6 changes: 6 additions & 0 deletions osu.Game/Rulesets/Ruleset.cs
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,12 @@ public virtual IEnumerable<RulesetBeatmapAttribute> GetBeatmapAttributesForDispl
yield return new RulesetBeatmapAttribute(SongSelectStrings.HPDrain, @"HP", originalDifficulty.DrainRate, adjustedDifficulty.DrainRate, 10);
}

/// <summary>
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
/// Overload of <see cref="GetAdjustedDisplayDifficulty"/> for display on Ranked Cards
/// </summary>
public virtual IEnumerable<RulesetBeatmapAttribute> GetBeatmapAttributesForRankedPlayCard(IBeatmapInfo beatmapInfo, IReadOnlyCollection<Mod> mods) =>
GetBeatmapAttributesForDisplay(beatmapInfo, mods);

/// <summary>
/// Creates ruleset-specific beatmap filter criteria to be used on the song select screen.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,7 @@ private void load(RulesetStore rulesets)
},
]
},
..ruleset.GetBeatmapAttributesForDisplay(beatmap, [])
.Select(attribute => new AttributeRow(attribute))
..ruleset.GetBeatmapAttributesForRankedPlayCard(beatmap, []).Select(attribute => new AttributeRow(attribute))
]
};
}
Expand Down Expand Up @@ -126,7 +125,9 @@ private void load(CardColours colours)
new OsuSpriteText
{
RelativePositionAxes = Axes.X,
Text = attribute.AdjustedValue.ToStandardFormattedString(maxDecimalDigits: 1),
Text = string.IsNullOrEmpty(attribute.ValueFormat)
? attribute.AdjustedValue.ToStandardFormattedString(maxDecimalDigits: 1)
: attribute.AdjustedValue.ToString(attribute.ValueFormat),
Font = OsuFont.GetFont(size: 9, weight: FontWeight.SemiBold),
Anchor = Anchor.CentreLeft,
Origin = Anchor.CentreRight,
Expand Down
Loading