From f561120295d392678a19d5a8a578da272a082bc0 Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Sat, 7 Jan 2023 23:40:02 +0100 Subject: [PATCH 001/729] Remove info labels, since they are no longer present in this component in thew new design --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 356 ++++++++++++++++++ 1 file changed, 356 insertions(+) create mode 100644 osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs new file mode 100644 index 0000000000..4d1a2133fd --- /dev/null +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -0,0 +1,356 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +#nullable disable + +using System.Collections.Generic; +using System.Threading; +using osuTK; +using osuTK.Graphics; +using osu.Framework.Allocation; +using osu.Framework.Bindables; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Beatmaps; +using osu.Game.Beatmaps.Drawables; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Graphics.Effects; +using osu.Framework.Localisation; +using osu.Game.Configuration; +using osu.Game.Rulesets; +using osu.Game.Rulesets.Mods; +using osu.Game.Graphics.Containers; + +namespace osu.Game.Screens.Select +{ + public partial class BeatmapInfoWedgeV2 : VisibilityContainer + { + public const float BORDER_THICKNESS = 2.5f; + private const float shear_width = 36.75f; + + private const float transition_duration = 250; + + private static readonly Vector2 wedged_container_shear = new Vector2(shear_width / SongSelect.WEDGE_HEIGHT, 0); + + [Resolved] + private IBindable ruleset { get; set; } + + protected Container DisplayedContent { get; private set; } + + protected WedgeInfoText Info { get; private set; } + + public BeatmapInfoWedgeV2() + { + Shear = wedged_container_shear; + Masking = true; + BorderColour = new Color4(221, 255, 255, 255); + BorderThickness = BORDER_THICKNESS; + Alpha = 0; + EdgeEffect = new EdgeEffectParameters + { + Type = EdgeEffectType.Glow, + Colour = new Color4(130, 204, 255, 150), + Radius = 20, + Roundness = 15, + }; + } + + [BackgroundDependencyLoader] + private void load() + { + ruleset.BindValueChanged(_ => updateDisplay()); + } + + private const double animation_duration = 800; + + protected override void PopIn() + { + this.MoveToX(0, animation_duration, Easing.OutQuint); + this.RotateTo(0, animation_duration, Easing.OutQuint); + this.FadeIn(transition_duration); + } + + protected override void PopOut() + { + this.MoveToX(-100, animation_duration, Easing.In); + this.RotateTo(10, animation_duration, Easing.In); + this.FadeOut(transition_duration * 2, Easing.In); + } + + private WorkingBeatmap beatmap; + + public WorkingBeatmap Beatmap + { + get => beatmap; + set + { + if (beatmap == value) return; + + beatmap = value; + + updateDisplay(); + } + } + + public override bool IsPresent => base.IsPresent || DisplayedContent == null; // Visibility is updated in the LoadComponentAsync callback + + private Container loadingInfo; + + private void updateDisplay() + { + Scheduler.AddOnce(perform); + + void perform() + { + void removeOldInfo() + { + State.Value = beatmap == null ? Visibility.Hidden : Visibility.Visible; + + DisplayedContent?.FadeOut(transition_duration); + DisplayedContent?.Expire(); + DisplayedContent = null; + } + + if (beatmap == null) + { + removeOldInfo(); + return; + } + + LoadComponentAsync(loadingInfo = new Container + { + RelativeSizeAxes = Axes.Both, + Shear = -Shear, + Depth = DisplayedContent?.Depth + 1 ?? 0, + Children = new Drawable[] + { + new BeatmapInfoWedgeBackground(beatmap), + Info = new WedgeInfoText(beatmap), + } + }, loaded => + { + // ensure we are the most recent loaded wedge. + if (loaded != loadingInfo) return; + + removeOldInfo(); + Add(DisplayedContent = loaded); + }); + } + } + + public partial class WedgeInfoText : Container + { + public OsuSpriteText VersionLabel { get; private set; } + public OsuSpriteText TitleLabel { get; private set; } + public OsuSpriteText ArtistLabel { get; private set; } + public FillFlowContainer MapperContainer { get; private set; } + + private Container difficultyColourBar; + private StarRatingDisplay starRatingDisplay; + + private ILocalisedBindableString titleBinding; + private ILocalisedBindableString artistBinding; + + private readonly WorkingBeatmap working; + + [Resolved] + private IBindable> mods { get; set; } + + [Resolved] + private BeatmapDifficultyCache difficultyCache { get; set; } + + [Resolved] + private OsuColour colours { get; set; } + + private ModSettingChangeTracker settingChangeTracker; + + public WedgeInfoText(WorkingBeatmap working) + { + this.working = working; + } + + private CancellationTokenSource cancellationSource; + private IBindable starDifficulty; + + [BackgroundDependencyLoader] + private void load(LocalisationManager localisation) + { + var beatmapInfo = working.BeatmapInfo; + var metadata = beatmapInfo.Metadata; + + RelativeSizeAxes = Axes.Both; + + titleBinding = localisation.GetLocalisedBindableString(new RomanisableString(metadata.TitleUnicode, metadata.Title)); + artistBinding = localisation.GetLocalisedBindableString(new RomanisableString(metadata.ArtistUnicode, metadata.Artist)); + + const float top_height = 0.7f; + + Children = new Drawable[] + { + difficultyColourBar = new Container + { + RelativeSizeAxes = Axes.Y, + Width = 20f, + Children = new[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Width = top_height, + }, + new Box + { + RelativeSizeAxes = Axes.Both, + RelativePositionAxes = Axes.Both, + Alpha = 0.5f, + X = top_height, + Width = 1 - top_height, + } + } + }, + new FillFlowContainer + { + Name = "Topleft-aligned metadata", + Anchor = Anchor.TopLeft, + Origin = Anchor.TopLeft, + Direction = FillDirection.Vertical, + Padding = new MarginPadding { Top = 10, Left = 25, Right = shear_width * 2.5f }, + AutoSizeAxes = Axes.Y, + RelativeSizeAxes = Axes.X, + Children = new Drawable[] + { + VersionLabel = new OsuSpriteText + { + Text = beatmapInfo.DifficultyName, + Font = OsuFont.GetFont(size: 24, italics: true), + RelativeSizeAxes = Axes.X, + Truncate = true, + }, + } + }, + new FillFlowContainer + { + Name = "Topright-aligned metadata", + Anchor = Anchor.TopRight, + Origin = Anchor.TopRight, + Direction = FillDirection.Vertical, + Padding = new MarginPadding { Top = 14, Right = shear_width / 2 }, + AutoSizeAxes = Axes.Both, + Shear = wedged_container_shear, + Spacing = new Vector2(0f, 5f), + Children = new Drawable[] + { + starRatingDisplay = new StarRatingDisplay(default, animated: true) + { + Anchor = Anchor.TopRight, + Origin = Anchor.TopRight, + Shear = -wedged_container_shear, + Alpha = 0f, + }, + new BeatmapSetOnlineStatusPill + { + AutoSizeAxes = Axes.Both, + Anchor = Anchor.TopRight, + Origin = Anchor.TopRight, + Shear = -wedged_container_shear, + TextSize = 11, + TextPadding = new MarginPadding { Horizontal = 8, Vertical = 2 }, + Status = beatmapInfo.Status, + Alpha = string.IsNullOrEmpty(beatmapInfo.DifficultyName) ? 0 : 1 + } + } + }, + new FillFlowContainer + { + Name = "Centre-aligned metadata", + Anchor = Anchor.CentreLeft, + Origin = Anchor.TopLeft, + Y = -7, + Direction = FillDirection.Vertical, + Padding = new MarginPadding { Left = 25, Right = shear_width }, + AutoSizeAxes = Axes.Y, + RelativeSizeAxes = Axes.X, + Children = new Drawable[] + { + TitleLabel = new OsuSpriteText + { + Current = { BindTarget = titleBinding }, + Font = OsuFont.GetFont(size: 28, italics: true), + RelativeSizeAxes = Axes.X, + Truncate = true, + }, + ArtistLabel = new OsuSpriteText + { + Current = { BindTarget = artistBinding }, + Font = OsuFont.GetFont(size: 17, italics: true), + RelativeSizeAxes = Axes.X, + Truncate = true, + }, + MapperContainer = new FillFlowContainer + { + Margin = new MarginPadding { Top = 10 }, + Direction = FillDirection.Horizontal, + AutoSizeAxes = Axes.Both, + Child = getMapper(metadata), + } + } + } + }; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + starRatingDisplay.DisplayedStars.BindValueChanged(s => + { + difficultyColourBar.Colour = colours.ForStarDifficulty(s.NewValue); + }, true); + + starDifficulty = difficultyCache.GetBindableDifficulty(working.BeatmapInfo, (cancellationSource = new CancellationTokenSource()).Token); + starDifficulty.BindValueChanged(s => + { + starRatingDisplay.Current.Value = s.NewValue ?? default; + + // Don't roll the counter on initial display (but still allow it to roll on applying mods etc.) + if (!starRatingDisplay.IsPresent) + starRatingDisplay.FinishTransforms(true); + + starRatingDisplay.FadeIn(transition_duration); + }); + + mods.BindValueChanged(m => + { + settingChangeTracker?.Dispose(); + + settingChangeTracker = new ModSettingChangeTracker(m.NewValue); + }, true); + } + + private Drawable getMapper(BeatmapMetadata metadata) + { + if (string.IsNullOrEmpty(metadata.Author.Username)) + return Empty(); + + return new LinkFlowContainer(s => + { + s.Font = OsuFont.GetFont(weight: FontWeight.Bold, size: 15); + }).With(d => + { + d.AutoSizeAxes = Axes.Both; + d.AddText("mapped by "); + d.AddUserLink(metadata.Author); + }); + } + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + settingChangeTracker?.Dispose(); + cancellationSource?.Cancel(); + } + } + } +} From c646f8479b35cc7d66b1075ad5c5ba8ab46434ad Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Sat, 7 Jan 2023 23:53:19 +0100 Subject: [PATCH 002/729] Move stardifficulty logic to main BeatmapInfoWedge class instead of text subclass ( for use by background star rating colour bar ) --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 4d1a2133fd..104fa8787b 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -37,10 +37,16 @@ namespace osu.Game.Screens.Select [Resolved] private IBindable ruleset { get; set; } + [Resolved] + private BeatmapDifficultyCache difficultyCache { get; set; } + protected Container DisplayedContent { get; private set; } protected WedgeInfoText Info { get; private set; } + private IBindable starDifficulty; + private CancellationTokenSource cancellationSource; + public BeatmapInfoWedgeV2() { Shear = wedged_container_shear; @@ -98,6 +104,19 @@ namespace osu.Game.Screens.Select private Container loadingInfo; + protected override void LoadComplete() + { + base.LoadComplete(); + starDifficulty = difficultyCache.GetBindableDifficulty(beatmap.BeatmapInfo, (cancellationSource = new CancellationTokenSource()).Token); + } + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + cancellationSource?.Cancel(); + } + private void updateDisplay() { Scheduler.AddOnce(perform); @@ -127,7 +146,7 @@ namespace osu.Game.Screens.Select Children = new Drawable[] { new BeatmapInfoWedgeBackground(beatmap), - Info = new WedgeInfoText(beatmap), + Info = new WedgeInfoText(beatmap, starDifficulty), } }, loaded => { @@ -154,26 +173,22 @@ namespace osu.Game.Screens.Select private ILocalisedBindableString artistBinding; private readonly WorkingBeatmap working; + private readonly IBindable starDifficulty; [Resolved] private IBindable> mods { get; set; } - [Resolved] - private BeatmapDifficultyCache difficultyCache { get; set; } - [Resolved] private OsuColour colours { get; set; } private ModSettingChangeTracker settingChangeTracker; - public WedgeInfoText(WorkingBeatmap working) + public WedgeInfoText(WorkingBeatmap working, IBindable starDifficulty) { this.working = working; + this.starDifficulty = starDifficulty; } - private CancellationTokenSource cancellationSource; - private IBindable starDifficulty; - [BackgroundDependencyLoader] private void load(LocalisationManager localisation) { @@ -309,7 +324,6 @@ namespace osu.Game.Screens.Select difficultyColourBar.Colour = colours.ForStarDifficulty(s.NewValue); }, true); - starDifficulty = difficultyCache.GetBindableDifficulty(working.BeatmapInfo, (cancellationSource = new CancellationTokenSource()).Token); starDifficulty.BindValueChanged(s => { starRatingDisplay.Current.Value = s.NewValue ?? default; @@ -349,7 +363,6 @@ namespace osu.Game.Screens.Select { base.Dispose(isDisposing); settingChangeTracker?.Dispose(); - cancellationSource?.Cancel(); } } } From 0199c19f74705c2d5c0dd10f3c61c0c8325ef224 Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Sun, 8 Jan 2023 01:24:47 +0100 Subject: [PATCH 003/729] Add a test scene and move colour bar to back and adjust positioning of it --- .../SongSelect/TestSceneBeatmapInfoWedgeV2.cs | 187 ++++++++++++++++++ osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 131 +++--------- 2 files changed, 217 insertions(+), 101 deletions(-) create mode 100644 osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs new file mode 100644 index 0000000000..98e9d803ca --- /dev/null +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs @@ -0,0 +1,187 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +#nullable disable + +using System.Collections.Generic; +using JetBrains.Annotations; +using NUnit.Framework; +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.UserInterface; +using osu.Framework.Testing; +using osu.Game.Beatmaps; +using osu.Game.Rulesets; +using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Objects.Legacy; +using osu.Game.Rulesets.Objects.Types; +using osu.Game.Screens.Select; +using osuTK; + +namespace osu.Game.Tests.Visual.SongSelect +{ + [TestFixture] + public partial class TestSceneBeatmapInfoWedgeV2 : OsuTestScene + { + private RulesetStore rulesets; + private TestBeatmapInfoWedgeV2 infoWedge; + private readonly List beatmaps = new List(); + + [BackgroundDependencyLoader] + private void load(RulesetStore rulesets) + { + this.rulesets = rulesets; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + Add(infoWedge = new TestBeatmapInfoWedgeV2 + { + Size = new Vector2(0.6f, 120), + RelativeSizeAxes = Axes.X, + Margin = new MarginPadding { Top = 20 } + }); + + AddStep("show", () => infoWedge.Show()); + + selectBeatmap(Beatmap.Value.Beatmap); + + AddWaitStep("wait for select", 3); + + AddStep("hide", () => { infoWedge.Hide(); }); + + AddWaitStep("wait for hide", 3); + + AddStep("show", () => { infoWedge.Show(); }); + + AddSliderStep("change star difficulty", 0, 11.9, 5.55, v => + { + foreach (var hasCurrentValue in infoWedge.Info.ChildrenOfType>()) + hasCurrentValue.Current.Value = new StarDifficulty(v, 0); + }); + + foreach (var rulesetInfo in rulesets.AvailableRulesets) + { + var instance = rulesetInfo.CreateInstance(); + var testBeatmap = createTestBeatmap(rulesetInfo); + + beatmaps.Add(testBeatmap); + + setRuleset(rulesetInfo); + + selectBeatmap(testBeatmap); + + testBeatmapLabels(instance); + } + } + + private void testBeatmapLabels(Ruleset ruleset) + { + AddAssert("check title", () => infoWedge.Info.TitleLabel.Current.Value == $"{ruleset.ShortName}Title"); + AddAssert("check artist", () => infoWedge.Info.ArtistLabel.Current.Value == $"{ruleset.ShortName}Artist"); + } + + [SetUpSteps] + public void SetUpSteps() + { + AddStep("reset mods", () => SelectedMods.SetDefault()); + } + + [Test] + public void TestTruncation() + { + selectBeatmap(createLongMetadata()); + } + + private void setRuleset(RulesetInfo rulesetInfo) + { + Container containerBefore = null; + + AddStep("set ruleset", () => + { + // wedge content is only refreshed if the ruleset changes, so only wait for load in that case. + if (!rulesetInfo.Equals(Ruleset.Value)) + containerBefore = infoWedge.DisplayedContent; + + Ruleset.Value = rulesetInfo; + }); + + AddUntilStep("wait for async load", () => infoWedge.DisplayedContent != containerBefore); + } + + private void selectBeatmap([CanBeNull] IBeatmap b) + { + Container containerBefore = null; + + AddStep($"select {b?.Metadata.Title ?? "null"} beatmap", () => + { + containerBefore = infoWedge.DisplayedContent; + infoWedge.Beatmap = Beatmap.Value = b == null ? Beatmap.Default : CreateWorkingBeatmap(b); + }); + + AddUntilStep("wait for async load", () => infoWedge.DisplayedContent != containerBefore); + } + + private IBeatmap createTestBeatmap(RulesetInfo ruleset) + { + List objects = new List(); + for (double i = 0; i < 50000; i += 1000) + objects.Add(new TestHitObject { StartTime = i }); + + return new Beatmap + { + BeatmapInfo = new BeatmapInfo + { + Metadata = new BeatmapMetadata + { + Author = { Username = $"{ruleset.ShortName}Author" }, + Artist = $"{ruleset.ShortName}Artist", + Source = $"{ruleset.ShortName}Source", + Title = $"{ruleset.ShortName}Title" + }, + Ruleset = ruleset, + StarRating = 6, + DifficultyName = $"{ruleset.ShortName}Version", + Difficulty = new BeatmapDifficulty() + }, + HitObjects = objects + }; + } + + private IBeatmap createLongMetadata() + { + return new Beatmap + { + BeatmapInfo = new BeatmapInfo + { + Metadata = new BeatmapMetadata + { + Author = { Username = "WWWWWWWWWWWWWWW" }, + Artist = "Verrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrry long Artist", + Source = "Verrrrry long Source", + Title = "Verrrrry long Title" + }, + DifficultyName = "Verrrrrrrrrrrrrrrrrrrrrrrrrrrrry long Version", + Status = BeatmapOnlineStatus.Graveyard, + }, + }; + } + + private partial class TestBeatmapInfoWedgeV2 : BeatmapInfoWedgeV2 + { + public new Container DisplayedContent => base.DisplayedContent; + + public new WedgeInfoText Info => base.Info; + } + + private class TestHitObject : ConvertHitObject, IHasPosition + { + public float X => 0; + public float Y => 0; + public Vector2 Position { get; } = Vector2.Zero; + } + } +} diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 104fa8787b..5583ad11f7 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -6,7 +6,6 @@ using System.Collections.Generic; using System.Threading; using osuTK; -using osuTK.Graphics; using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics; @@ -16,18 +15,16 @@ using osu.Game.Beatmaps.Drawables; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osu.Framework.Graphics.Shapes; -using osu.Framework.Graphics.Effects; using osu.Framework.Localisation; using osu.Game.Configuration; using osu.Game.Rulesets; using osu.Game.Rulesets.Mods; -using osu.Game.Graphics.Containers; namespace osu.Game.Screens.Select { + [Cached] public partial class BeatmapInfoWedgeV2 : VisibilityContainer { - public const float BORDER_THICKNESS = 2.5f; private const float shear_width = 36.75f; private const float transition_duration = 250; @@ -44,22 +41,25 @@ namespace osu.Game.Screens.Select protected WedgeInfoText Info { get; private set; } - private IBindable starDifficulty; + private IBindable starDifficulty = new Bindable(); private CancellationTokenSource cancellationSource; + private readonly Container difficultyColourBar; + public BeatmapInfoWedgeV2() { + CornerRadius = 10; Shear = wedged_container_shear; Masking = true; - BorderColour = new Color4(221, 255, 255, 255); - BorderThickness = BORDER_THICKNESS; Alpha = 0; - EdgeEffect = new EdgeEffectParameters + Child = difficultyColourBar = new Container { - Type = EdgeEffectType.Glow, - Colour = new Color4(130, 204, 255, 150), - Radius = 20, - Roundness = 15, + Depth = float.MaxValue, + Anchor = Anchor.TopRight, + Origin = Anchor.TopRight, + RelativeSizeAxes = Axes.Y, + Width = 40, + Child = new Box { RelativeSizeAxes = Axes.Both } }; } @@ -95,6 +95,7 @@ namespace osu.Game.Screens.Select if (beatmap == value) return; beatmap = value; + starDifficulty = difficultyCache.GetBindableDifficulty(value.BeatmapInfo, (cancellationSource = new CancellationTokenSource()).Token); updateDisplay(); } @@ -104,12 +105,6 @@ namespace osu.Game.Screens.Select private Container loadingInfo; - protected override void LoadComplete() - { - base.LoadComplete(); - starDifficulty = difficultyCache.GetBindableDifficulty(beatmap.BeatmapInfo, (cancellationSource = new CancellationTokenSource()).Token); - } - protected override void Dispose(bool isDisposing) { base.Dispose(isDisposing); @@ -140,13 +135,15 @@ namespace osu.Game.Screens.Select LoadComponentAsync(loadingInfo = new Container { + Masking = true, + X = -30, + CornerRadius = 10, RelativeSizeAxes = Axes.Both, - Shear = -Shear, Depth = DisplayedContent?.Depth + 1 ?? 0, Children = new Drawable[] { - new BeatmapInfoWedgeBackground(beatmap), - Info = new WedgeInfoText(beatmap, starDifficulty), + new BeatmapInfoWedgeBackground(beatmap) { Shear = -Shear }, + Info = new WedgeInfoText(beatmap, starDifficulty) { Shear = -Shear } } }, loaded => { @@ -161,12 +158,9 @@ namespace osu.Game.Screens.Select public partial class WedgeInfoText : Container { - public OsuSpriteText VersionLabel { get; private set; } public OsuSpriteText TitleLabel { get; private set; } public OsuSpriteText ArtistLabel { get; private set; } - public FillFlowContainer MapperContainer { get; private set; } - private Container difficultyColourBar; private StarRatingDisplay starRatingDisplay; private ILocalisedBindableString titleBinding; @@ -178,6 +172,9 @@ namespace osu.Game.Screens.Select [Resolved] private IBindable> mods { get; set; } + [Resolved] + private BeatmapInfoWedgeV2 wedge { get; set; } + [Resolved] private OsuColour colours { get; set; } @@ -200,51 +197,8 @@ namespace osu.Game.Screens.Select titleBinding = localisation.GetLocalisedBindableString(new RomanisableString(metadata.TitleUnicode, metadata.Title)); artistBinding = localisation.GetLocalisedBindableString(new RomanisableString(metadata.ArtistUnicode, metadata.Artist)); - const float top_height = 0.7f; - Children = new Drawable[] { - difficultyColourBar = new Container - { - RelativeSizeAxes = Axes.Y, - Width = 20f, - Children = new[] - { - new Box - { - RelativeSizeAxes = Axes.Both, - Width = top_height, - }, - new Box - { - RelativeSizeAxes = Axes.Both, - RelativePositionAxes = Axes.Both, - Alpha = 0.5f, - X = top_height, - Width = 1 - top_height, - } - } - }, - new FillFlowContainer - { - Name = "Topleft-aligned metadata", - Anchor = Anchor.TopLeft, - Origin = Anchor.TopLeft, - Direction = FillDirection.Vertical, - Padding = new MarginPadding { Top = 10, Left = 25, Right = shear_width * 2.5f }, - AutoSizeAxes = Axes.Y, - RelativeSizeAxes = Axes.X, - Children = new Drawable[] - { - VersionLabel = new OsuSpriteText - { - Text = beatmapInfo.DifficultyName, - Font = OsuFont.GetFont(size: 24, italics: true), - RelativeSizeAxes = Axes.X, - Truncate = true, - }, - } - }, new FillFlowContainer { Name = "Topright-aligned metadata", @@ -279,12 +233,10 @@ namespace osu.Game.Screens.Select }, new FillFlowContainer { - Name = "Centre-aligned metadata", - Anchor = Anchor.CentreLeft, - Origin = Anchor.TopLeft, - Y = -7, + Name = "Top-left aligned metadata", Direction = FillDirection.Vertical, - Padding = new MarginPadding { Left = 25, Right = shear_width }, + Position = new Vector2(50, 12), + Width = .8f, AutoSizeAxes = Axes.Y, RelativeSizeAxes = Axes.X, Children = new Drawable[] @@ -292,23 +244,17 @@ namespace osu.Game.Screens.Select TitleLabel = new OsuSpriteText { Current = { BindTarget = titleBinding }, - Font = OsuFont.GetFont(size: 28, italics: true), + Font = OsuFont.TorusAlternate.With(size: 40, weight: FontWeight.SemiBold), RelativeSizeAxes = Axes.X, - Truncate = true, + Truncate = true }, ArtistLabel = new OsuSpriteText { Current = { BindTarget = artistBinding }, - Font = OsuFont.GetFont(size: 17, italics: true), + //Not sure if this should be semi bold or medium + Font = OsuFont.Torus.With(size: 20, weight: FontWeight.SemiBold), RelativeSizeAxes = Axes.X, - Truncate = true, - }, - MapperContainer = new FillFlowContainer - { - Margin = new MarginPadding { Top = 10 }, - Direction = FillDirection.Horizontal, - AutoSizeAxes = Axes.Both, - Child = getMapper(metadata), + Truncate = true } } } @@ -321,9 +267,8 @@ namespace osu.Game.Screens.Select starRatingDisplay.DisplayedStars.BindValueChanged(s => { - difficultyColourBar.Colour = colours.ForStarDifficulty(s.NewValue); + wedge.difficultyColourBar.FadeColour(colours.ForStarDifficulty(s.NewValue)); }, true); - starDifficulty.BindValueChanged(s => { starRatingDisplay.Current.Value = s.NewValue ?? default; @@ -343,22 +288,6 @@ namespace osu.Game.Screens.Select }, true); } - private Drawable getMapper(BeatmapMetadata metadata) - { - if (string.IsNullOrEmpty(metadata.Author.Username)) - return Empty(); - - return new LinkFlowContainer(s => - { - s.Font = OsuFont.GetFont(weight: FontWeight.Bold, size: 15); - }).With(d => - { - d.AutoSizeAxes = Axes.Both; - d.AddText("mapped by "); - d.AddUserLink(metadata.Author); - }); - } - protected override void Dispose(bool isDisposing) { base.Dispose(isDisposing); From 61caabaa8ee4002c7d96859f0937b3fb8b997c82 Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Sun, 8 Jan 2023 01:47:22 +0100 Subject: [PATCH 004/729] Add coloured star counter --- .../Graphics/UserInterface/StarCounter.cs | 6 ++- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 51 +++++++++++++++---- 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/osu.Game/Graphics/UserInterface/StarCounter.cs b/osu.Game/Graphics/UserInterface/StarCounter.cs index d7d088d798..7adb482188 100644 --- a/osu.Game/Graphics/UserInterface/StarCounter.cs +++ b/osu.Game/Graphics/UserInterface/StarCounter.cs @@ -32,6 +32,11 @@ namespace osu.Game.Graphics.UserInterface private const float star_spacing = 4; + public virtual FillDirection Direction + { + set => stars.Direction = value; + } + private float current; /// @@ -66,7 +71,6 @@ namespace osu.Game.Graphics.UserInterface stars = new FillFlowContainer { AutoSizeAxes = Axes.Both, - Direction = FillDirection.Horizontal, Spacing = new Vector2(star_spacing), ChildrenEnumerable = Enumerable.Range(0, StarCount).Select(_ => CreateStar()) } diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 5583ad11f7..07fcb42fff 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -3,7 +3,9 @@ #nullable disable +using System; using System.Collections.Generic; +using System.Linq; using System.Threading; using osuTK; using osu.Framework.Allocation; @@ -17,6 +19,7 @@ using osu.Game.Graphics.Sprites; using osu.Framework.Graphics.Shapes; using osu.Framework.Localisation; using osu.Game.Configuration; +using osu.Game.Graphics.UserInterface; using osu.Game.Rulesets; using osu.Game.Rulesets.Mods; @@ -25,11 +28,12 @@ namespace osu.Game.Screens.Select [Cached] public partial class BeatmapInfoWedgeV2 : VisibilityContainer { - private const float shear_width = 36.75f; + private const float shear_width = 21; + private const int wedge_height = 120; private const float transition_duration = 250; - private static readonly Vector2 wedged_container_shear = new Vector2(shear_width / SongSelect.WEDGE_HEIGHT, 0); + private static readonly Vector2 wedged_container_shear = new Vector2(shear_width / wedge_height, 0); [Resolved] private IBindable ruleset { get; set; } @@ -45,6 +49,7 @@ namespace osu.Game.Screens.Select private CancellationTokenSource cancellationSource; private readonly Container difficultyColourBar; + private readonly StarCounter starCounter; public BeatmapInfoWedgeV2() { @@ -52,14 +57,27 @@ namespace osu.Game.Screens.Select Shear = wedged_container_shear; Masking = true; Alpha = 0; - Child = difficultyColourBar = new Container + + Children = new Drawable[] { - Depth = float.MaxValue, - Anchor = Anchor.TopRight, - Origin = Anchor.TopRight, - RelativeSizeAxes = Axes.Y, - Width = 40, - Child = new Box { RelativeSizeAxes = Axes.Both } + difficultyColourBar = new Container + { + Depth = float.MaxValue, + Anchor = Anchor.TopRight, + Origin = Anchor.TopRight, + RelativeSizeAxes = Axes.Y, + Width = 40, + Child = new Box { RelativeSizeAxes = Axes.Both } + }, + starCounter = new StarCounter + { + Anchor = Anchor.CentreRight, + Origin = Anchor.Centre, + Scale = new Vector2(0.4f), + Shear = -wedged_container_shear, + X = -15, + Direction = FillDirection.Vertical + } }; } @@ -67,6 +85,15 @@ namespace osu.Game.Screens.Select private void load() { ruleset.BindValueChanged(_ => updateDisplay()); + + float starAngle = (float)(Math.Atan(shear_width / wedge_height) * (180 / Math.PI)); + + //Applying the rotation directly to the StarCounter distorts the stars, hence it is applied to the child container + starCounter.Children.First().Rotation = starAngle; + + //Makes sure the stars center themselves properly in the colour bar + starCounter.Children.First().Anchor = Anchor.Centre; + starCounter.Children.First().Origin = Anchor.Centre; } private const double animation_duration = 800; @@ -267,8 +294,12 @@ namespace osu.Game.Screens.Select starRatingDisplay.DisplayedStars.BindValueChanged(s => { - wedge.difficultyColourBar.FadeColour(colours.ForStarDifficulty(s.NewValue)); + wedge.starCounter.Colour = s.NewValue >= 6.5 ? colours.Orange1 : Colour4.Black.Opacity(0.75f); + wedge.starCounter.Current = (float)s.NewValue; + + wedge.difficultyColourBar.FadeColour(colours.ForStarDifficulty(s.NewValue), 750, Easing.OutQuint); }, true); + starDifficulty.BindValueChanged(s => { starRatingDisplay.Current.Value = s.NewValue ?? default; From 1698272eb88b3937228783d3df8d04db993d5da5 Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Sun, 8 Jan 2023 12:03:02 +0100 Subject: [PATCH 005/729] Simplify passing data from BeatmapInfoWedgeV2.cs to subclass wedgeinfotext --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 07fcb42fff..1056d9478b 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -60,17 +60,22 @@ namespace osu.Game.Screens.Select Children = new Drawable[] { + //These elements can't be grouped with the rest of the content, due to being present either outside or under the backgrounds area difficultyColourBar = new Container { + Colour = Colour4.Transparent, Depth = float.MaxValue, Anchor = Anchor.TopRight, Origin = Anchor.TopRight, RelativeSizeAxes = Axes.Y, + + //By limiting the width we avoid this box showing up as an outline around the drawables that are on top of it. Width = 40, Child = new Box { RelativeSizeAxes = Axes.Both } }, starCounter = new StarCounter { + Colour = Colour4.Transparent, Anchor = Anchor.CentreRight, Origin = Anchor.Centre, Scale = new Vector2(0.4f), @@ -170,7 +175,7 @@ namespace osu.Game.Screens.Select Children = new Drawable[] { new BeatmapInfoWedgeBackground(beatmap) { Shear = -Shear }, - Info = new WedgeInfoText(beatmap, starDifficulty) { Shear = -Shear } + Info = new WedgeInfoText { Shear = -Shear } } }, loaded => { @@ -193,9 +198,6 @@ namespace osu.Game.Screens.Select private ILocalisedBindableString titleBinding; private ILocalisedBindableString artistBinding; - private readonly WorkingBeatmap working; - private readonly IBindable starDifficulty; - [Resolved] private IBindable> mods { get; set; } @@ -207,17 +209,11 @@ namespace osu.Game.Screens.Select private ModSettingChangeTracker settingChangeTracker; - public WedgeInfoText(WorkingBeatmap working, IBindable starDifficulty) - { - this.working = working; - this.starDifficulty = starDifficulty; - } - [BackgroundDependencyLoader] private void load(LocalisationManager localisation) { - var beatmapInfo = working.BeatmapInfo; - var metadata = beatmapInfo.Metadata; + var beatmapInfo = wedge.Beatmap.BeatmapInfo; + var metadata = wedge.beatmap.Metadata; RelativeSizeAxes = Axes.Both; @@ -262,7 +258,7 @@ namespace osu.Game.Screens.Select { Name = "Top-left aligned metadata", Direction = FillDirection.Vertical, - Position = new Vector2(50, 12), + Position = new Vector2(80, 12), Width = .8f, AutoSizeAxes = Axes.Y, RelativeSizeAxes = Axes.X, @@ -270,6 +266,7 @@ namespace osu.Game.Screens.Select { TitleLabel = new OsuSpriteText { + Shadow = true, Current = { BindTarget = titleBinding }, Font = OsuFont.TorusAlternate.With(size: 40, weight: FontWeight.SemiBold), RelativeSizeAxes = Axes.X, @@ -277,6 +274,7 @@ namespace osu.Game.Screens.Select }, ArtistLabel = new OsuSpriteText { + Shadow = true, Current = { BindTarget = artistBinding }, //Not sure if this should be semi bold or medium Font = OsuFont.Torus.With(size: 20, weight: FontWeight.SemiBold), @@ -297,10 +295,10 @@ namespace osu.Game.Screens.Select wedge.starCounter.Colour = s.NewValue >= 6.5 ? colours.Orange1 : Colour4.Black.Opacity(0.75f); wedge.starCounter.Current = (float)s.NewValue; - wedge.difficultyColourBar.FadeColour(colours.ForStarDifficulty(s.NewValue), 750, Easing.OutQuint); + wedge.difficultyColourBar.FadeColour(colours.ForStarDifficulty(s.NewValue)); }, true); - starDifficulty.BindValueChanged(s => + wedge.starDifficulty.BindValueChanged(s => { starRatingDisplay.Current.Value = s.NewValue ?? default; From 65c30d2c2e0a322d0d75003905fd44b4e5969d32 Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Sun, 8 Jan 2023 12:56:32 +0100 Subject: [PATCH 006/729] Remove nullability disabling --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 62 +++++++++---------- 1 file changed, 28 insertions(+), 34 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 1056d9478b..da7cfc6613 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -1,8 +1,6 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -36,17 +34,11 @@ namespace osu.Game.Screens.Select private static readonly Vector2 wedged_container_shear = new Vector2(shear_width / wedge_height, 0); [Resolved] - private IBindable ruleset { get; set; } + private IBindable ruleset { get; set; } = null!; - [Resolved] - private BeatmapDifficultyCache difficultyCache { get; set; } + protected Container? DisplayedContent { get; private set; } - protected Container DisplayedContent { get; private set; } - - protected WedgeInfoText Info { get; private set; } - - private IBindable starDifficulty = new Bindable(); - private CancellationTokenSource cancellationSource; + protected WedgeInfoText? Info { get; private set; } private readonly Container difficultyColourBar; private readonly StarCounter starCounter; @@ -117,9 +109,9 @@ namespace osu.Game.Screens.Select this.FadeOut(transition_duration * 2, Easing.In); } - private WorkingBeatmap beatmap; + private WorkingBeatmap? beatmap; - public WorkingBeatmap Beatmap + public WorkingBeatmap? Beatmap { get => beatmap; set @@ -127,7 +119,6 @@ namespace osu.Game.Screens.Select if (beatmap == value) return; beatmap = value; - starDifficulty = difficultyCache.GetBindableDifficulty(value.BeatmapInfo, (cancellationSource = new CancellationTokenSource()).Token); updateDisplay(); } @@ -135,14 +126,7 @@ namespace osu.Game.Screens.Select public override bool IsPresent => base.IsPresent || DisplayedContent == null; // Visibility is updated in the LoadComponentAsync callback - private Container loadingInfo; - - protected override void Dispose(bool isDisposing) - { - base.Dispose(isDisposing); - - cancellationSource?.Cancel(); - } + private Container? loadingInfo; private void updateDisplay() { @@ -190,30 +174,36 @@ namespace osu.Game.Screens.Select public partial class WedgeInfoText : Container { - public OsuSpriteText TitleLabel { get; private set; } - public OsuSpriteText ArtistLabel { get; private set; } + public OsuSpriteText TitleLabel { get; private set; } = null!; + public OsuSpriteText ArtistLabel { get; private set; } = null!; - private StarRatingDisplay starRatingDisplay; + private StarRatingDisplay starRatingDisplay = null!; - private ILocalisedBindableString titleBinding; - private ILocalisedBindableString artistBinding; + private ILocalisedBindableString titleBinding = null!; + private ILocalisedBindableString artistBinding = null!; [Resolved] - private IBindable> mods { get; set; } + private IBindable> mods { get; set; } = null!; [Resolved] - private BeatmapInfoWedgeV2 wedge { get; set; } + private BeatmapInfoWedgeV2 wedge { get; set; } = null!; [Resolved] - private OsuColour colours { get; set; } + private OsuColour colours { get; set; } = null!; - private ModSettingChangeTracker settingChangeTracker; + [Resolved] + private BeatmapDifficultyCache difficultyCache { get; set; } = null!; + + private ModSettingChangeTracker? settingChangeTracker; + + private IBindable? starDifficulty; + private CancellationTokenSource? cancellationSource; [BackgroundDependencyLoader] private void load(LocalisationManager localisation) { - var beatmapInfo = wedge.Beatmap.BeatmapInfo; - var metadata = wedge.beatmap.Metadata; + var beatmapInfo = wedge.Beatmap!.BeatmapInfo; + var metadata = wedge.beatmap!.Metadata; RelativeSizeAxes = Axes.Both; @@ -274,6 +264,7 @@ namespace osu.Game.Screens.Select }, ArtistLabel = new OsuSpriteText { + //figma design has a diffused shadow, instead of the solid one present here. Shadow = true, Current = { BindTarget = artistBinding }, //Not sure if this should be semi bold or medium @@ -298,7 +289,8 @@ namespace osu.Game.Screens.Select wedge.difficultyColourBar.FadeColour(colours.ForStarDifficulty(s.NewValue)); }, true); - wedge.starDifficulty.BindValueChanged(s => + starDifficulty = difficultyCache.GetBindableDifficulty(wedge.beatmap!.BeatmapInfo, (cancellationSource = new CancellationTokenSource()).Token); + starDifficulty.BindValueChanged(s => { starRatingDisplay.Current.Value = s.NewValue ?? default; @@ -320,6 +312,8 @@ namespace osu.Game.Screens.Select protected override void Dispose(bool isDisposing) { base.Dispose(isDisposing); + + cancellationSource?.Cancel(); settingChangeTracker?.Dispose(); } } From 9afdfd7f067c786f236748c84e7028e0c294ff76 Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Sun, 8 Jan 2023 15:42:42 +0100 Subject: [PATCH 007/729] small tweaks, container edge - effect addition.. --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 50 ++++++++++++------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index da7cfc6613..ced6931e1f 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -10,6 +10,7 @@ using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Effects; using osu.Game.Beatmaps; using osu.Game.Beatmaps.Drawables; using osu.Game.Graphics; @@ -27,9 +28,9 @@ namespace osu.Game.Screens.Select public partial class BeatmapInfoWedgeV2 : VisibilityContainer { private const float shear_width = 21; - private const int wedge_height = 120; - + private const float wedge_height = 120; private const float transition_duration = 250; + private const float corner_radius = 10; private static readonly Vector2 wedged_container_shear = new Vector2(shear_width / wedge_height, 0); @@ -45,14 +46,20 @@ namespace osu.Game.Screens.Select public BeatmapInfoWedgeV2() { - CornerRadius = 10; Shear = wedged_container_shear; Masking = true; - Alpha = 0; + EdgeEffect = new EdgeEffectParameters + { + Colour = Colour4.Black.Opacity(.25f), + Type = EdgeEffectType.Shadow, + Radius = corner_radius, + Roundness = corner_radius + }; + CornerRadius = corner_radius; Children = new Drawable[] { - //These elements can't be grouped with the rest of the content, due to being present either outside or under the backgrounds area + // These elements can't be grouped with the rest of the content, due to being present either outside or under the backgrounds area difficultyColourBar = new Container { Colour = Colour4.Transparent, @@ -61,7 +68,7 @@ namespace osu.Game.Screens.Select Origin = Anchor.TopRight, RelativeSizeAxes = Axes.Y, - //By limiting the width we avoid this box showing up as an outline around the drawables that are on top of it. + // By limiting the width we avoid this box showing up as an outline around the drawables that are on top of it. Width = 40, Child = new Box { RelativeSizeAxes = Axes.Both } }, @@ -70,7 +77,7 @@ namespace osu.Game.Screens.Select Colour = Colour4.Transparent, Anchor = Anchor.CentreRight, Origin = Anchor.Centre, - Scale = new Vector2(0.4f), + Scale = new Vector2(0.35f), Shear = -wedged_container_shear, X = -15, Direction = FillDirection.Vertical @@ -85,10 +92,10 @@ namespace osu.Game.Screens.Select float starAngle = (float)(Math.Atan(shear_width / wedge_height) * (180 / Math.PI)); - //Applying the rotation directly to the StarCounter distorts the stars, hence it is applied to the child container + // Applying the rotation directly to the StarCounter distorts the stars, hence it is applied to the child container starCounter.Children.First().Rotation = starAngle; - //Makes sure the stars center themselves properly in the colour bar + // Makes sure the stars center themselves properly in the colour bar starCounter.Children.First().Anchor = Anchor.Centre; starCounter.Children.First().Origin = Anchor.Centre; } @@ -153,13 +160,13 @@ namespace osu.Game.Screens.Select { Masking = true, X = -30, - CornerRadius = 10, + CornerRadius = corner_radius, RelativeSizeAxes = Axes.Both, Depth = DisplayedContent?.Depth + 1 ?? 0, Children = new Drawable[] { new BeatmapInfoWedgeBackground(beatmap) { Shear = -Shear }, - Info = new WedgeInfoText { Shear = -Shear } + Info = new WedgeInfoText(beatmap) { Shear = -Shear } } }, loaded => { @@ -182,11 +189,10 @@ namespace osu.Game.Screens.Select private ILocalisedBindableString titleBinding = null!; private ILocalisedBindableString artistBinding = null!; - [Resolved] - private IBindable> mods { get; set; } = null!; + private readonly WorkingBeatmap working; [Resolved] - private BeatmapInfoWedgeV2 wedge { get; set; } = null!; + private IBindable> mods { get; set; } = null!; [Resolved] private OsuColour colours { get; set; } = null!; @@ -194,16 +200,24 @@ namespace osu.Game.Screens.Select [Resolved] private BeatmapDifficultyCache difficultyCache { get; set; } = null!; + [Resolved] + private BeatmapInfoWedgeV2 wedge { get; set; } = null!; + private ModSettingChangeTracker? settingChangeTracker; private IBindable? starDifficulty; private CancellationTokenSource? cancellationSource; + public WedgeInfoText(WorkingBeatmap working) + { + this.working = working; + } + [BackgroundDependencyLoader] private void load(LocalisationManager localisation) { - var beatmapInfo = wedge.Beatmap!.BeatmapInfo; - var metadata = wedge.beatmap!.Metadata; + var beatmapInfo = working.BeatmapInfo; + var metadata = working.Metadata; RelativeSizeAxes = Axes.Both; @@ -249,7 +263,7 @@ namespace osu.Game.Screens.Select Name = "Top-left aligned metadata", Direction = FillDirection.Vertical, Position = new Vector2(80, 12), - Width = .8f, + Width = .7f, AutoSizeAxes = Axes.Y, RelativeSizeAxes = Axes.X, Children = new Drawable[] @@ -289,7 +303,7 @@ namespace osu.Game.Screens.Select wedge.difficultyColourBar.FadeColour(colours.ForStarDifficulty(s.NewValue)); }, true); - starDifficulty = difficultyCache.GetBindableDifficulty(wedge.beatmap!.BeatmapInfo, (cancellationSource = new CancellationTokenSource()).Token); + starDifficulty = difficultyCache.GetBindableDifficulty(working.BeatmapInfo, (cancellationSource = new CancellationTokenSource()).Token); starDifficulty.BindValueChanged(s => { starRatingDisplay.Current.Value = s.NewValue ?? default; From 2a82f618ed9a69dd28613dfc8f04189ceecd702f Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Tue, 10 Jan 2023 17:34:47 +0100 Subject: [PATCH 008/729] Add TODO for text margin const, added pertinent comments to known "issues" --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index ced6931e1f..ce07a59a0c 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -32,6 +32,9 @@ namespace osu.Game.Screens.Select private const float transition_duration = 250; private const float corner_radius = 10; + /// Todo: move this const out to song select when more new design elements are implemented for the beatmap details area, since it applies to text alignment of various elements + private const float text_margin = 62; + private static readonly Vector2 wedged_container_shear = new Vector2(shear_width / wedge_height, 0); [Resolved] @@ -159,18 +162,21 @@ namespace osu.Game.Screens.Select LoadComponentAsync(loadingInfo = new Container { Masking = true, + // We offset this by the portion of the colour bar underneath we wish to show X = -30, CornerRadius = corner_radius, RelativeSizeAxes = Axes.Both, Depth = DisplayedContent?.Depth + 1 ?? 0, Children = new Drawable[] { + // TODO: New wedge design uses a coloured horizontal gradient for its background, however this lacks implementation information in the figma draft. + // pending https://www.figma.com/file/DXKwqZhD5yyb1igc3mKo1P?node-id=2980:3361#340801912 being answered. new BeatmapInfoWedgeBackground(beatmap) { Shear = -Shear }, Info = new WedgeInfoText(beatmap) { Shear = -Shear } } }, loaded => { - // ensure we are the most recent loaded wedge. + // Ensure we are the most recent loaded wedge. if (loaded != loadingInfo) return; removeOldInfo(); @@ -262,7 +268,7 @@ namespace osu.Game.Screens.Select { Name = "Top-left aligned metadata", Direction = FillDirection.Vertical, - Position = new Vector2(80, 12), + Position = new Vector2(text_margin + shear_width, 12), Width = .7f, AutoSizeAxes = Axes.Y, RelativeSizeAxes = Axes.X, @@ -278,10 +284,10 @@ namespace osu.Game.Screens.Select }, ArtistLabel = new OsuSpriteText { - //figma design has a diffused shadow, instead of the solid one present here. + // TODO : figma design has a diffused shadow, instead of the solid one present here, not possible currently as far as i'm aware. Shadow = true, Current = { BindTarget = artistBinding }, - //Not sure if this should be semi bold or medium + // Not sure if this should be semi bold or medium Font = OsuFont.Torus.With(size: 20, weight: FontWeight.SemiBold), RelativeSizeAxes = Axes.X, Truncate = true @@ -297,8 +303,8 @@ namespace osu.Game.Screens.Select starRatingDisplay.DisplayedStars.BindValueChanged(s => { - wedge.starCounter.Colour = s.NewValue >= 6.5 ? colours.Orange1 : Colour4.Black.Opacity(0.75f); wedge.starCounter.Current = (float)s.NewValue; + wedge.starCounter.Colour = s.NewValue >= 6.5 ? colours.Orange1 : Colour4.Black.Opacity(0.75f); wedge.difficultyColourBar.FadeColour(colours.ForStarDifficulty(s.NewValue)); }, true); From 8bfe24ced0c9163c1e1017b76d1f1669d57a160c Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Tue, 10 Jan 2023 17:49:33 +0100 Subject: [PATCH 009/729] Remove nullable disable in test. --- .../SongSelect/TestSceneBeatmapInfoWedgeV2.cs | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs index 98e9d803ca..193acc8a7b 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs @@ -1,10 +1,7 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -#nullable disable - using System.Collections.Generic; -using JetBrains.Annotations; using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Graphics; @@ -24,8 +21,8 @@ namespace osu.Game.Tests.Visual.SongSelect [TestFixture] public partial class TestSceneBeatmapInfoWedgeV2 : OsuTestScene { - private RulesetStore rulesets; - private TestBeatmapInfoWedgeV2 infoWedge; + private RulesetStore rulesets = null!; + private TestBeatmapInfoWedgeV2 infoWedge = null!; private readonly List beatmaps = new List(); [BackgroundDependencyLoader] @@ -80,8 +77,8 @@ namespace osu.Game.Tests.Visual.SongSelect private void testBeatmapLabels(Ruleset ruleset) { - AddAssert("check title", () => infoWedge.Info.TitleLabel.Current.Value == $"{ruleset.ShortName}Title"); - AddAssert("check artist", () => infoWedge.Info.ArtistLabel.Current.Value == $"{ruleset.ShortName}Artist"); + AddAssert("check title", () => infoWedge.Info!.TitleLabel.Current.Value == $"{ruleset.ShortName}Title"); + AddAssert("check artist", () => infoWedge.Info!.ArtistLabel.Current.Value == $"{ruleset.ShortName}Artist"); } [SetUpSteps] @@ -98,7 +95,7 @@ namespace osu.Game.Tests.Visual.SongSelect private void setRuleset(RulesetInfo rulesetInfo) { - Container containerBefore = null; + Container? containerBefore = null; AddStep("set ruleset", () => { @@ -112,9 +109,9 @@ namespace osu.Game.Tests.Visual.SongSelect AddUntilStep("wait for async load", () => infoWedge.DisplayedContent != containerBefore); } - private void selectBeatmap([CanBeNull] IBeatmap b) + private void selectBeatmap(IBeatmap? b) { - Container containerBefore = null; + Container? containerBefore = null; AddStep($"select {b?.Metadata.Title ?? "null"} beatmap", () => { @@ -172,9 +169,9 @@ namespace osu.Game.Tests.Visual.SongSelect private partial class TestBeatmapInfoWedgeV2 : BeatmapInfoWedgeV2 { - public new Container DisplayedContent => base.DisplayedContent; + public new Container? DisplayedContent => base.DisplayedContent; - public new WedgeInfoText Info => base.Info; + public new WedgeInfoText? Info => base.Info; } private class TestHitObject : ConvertHitObject, IHasPosition From 880428046a17606b200750c6f8bdec254fd7e4e1 Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Tue, 10 Jan 2023 18:03:28 +0100 Subject: [PATCH 010/729] Fix margins on top right aligned elements. --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index ce07a59a0c..1497bed121 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -238,7 +238,7 @@ namespace osu.Game.Screens.Select Anchor = Anchor.TopRight, Origin = Anchor.TopRight, Direction = FillDirection.Vertical, - Padding = new MarginPadding { Top = 14, Right = shear_width / 2 }, + Padding = new MarginPadding { Top = 3, Right = 8 }, AutoSizeAxes = Axes.Both, Shear = wedged_container_shear, Spacing = new Vector2(0f, 5f), From 7510201804aab33e90d805b8a34b9883f9ff390f Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Mon, 16 Jan 2023 22:24:21 +0100 Subject: [PATCH 011/729] Add back null beatmap test --- .../Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs index 193acc8a7b..a2935fb218 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs @@ -2,6 +2,7 @@ // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; +using System.Linq; using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Graphics; @@ -93,6 +94,15 @@ namespace osu.Game.Tests.Visual.SongSelect selectBeatmap(createLongMetadata()); } + [Test] + public void TestNullBeatmap() + { + selectBeatmap(null); + AddAssert("check default title", () => infoWedge.Info!.TitleLabel.Current.Value == Beatmap.Default.BeatmapInfo.Metadata.Title); + AddAssert("check default artist", () => infoWedge.Info!.ArtistLabel.Current.Value == Beatmap.Default.BeatmapInfo.Metadata.Artist); + AddAssert("check no info labels", () => !infoWedge.Info.ChildrenOfType().Any()); + } + private void setRuleset(RulesetInfo rulesetInfo) { Container? containerBefore = null; From 74b72e4ac0d6c34df51bf8d27c24d4625a9f8039 Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Mon, 16 Jan 2023 22:46:18 +0100 Subject: [PATCH 012/729] Address issues that joehuu brought up --- .../Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs | 2 +- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs index a2935fb218..4904e2a723 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs @@ -38,7 +38,7 @@ namespace osu.Game.Tests.Visual.SongSelect Add(infoWedge = new TestBeatmapInfoWedgeV2 { - Size = new Vector2(0.6f, 120), + Width = 0.6f, RelativeSizeAxes = Axes.X, Margin = new MarginPadding { Top = 20 } }); diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 1497bed121..02d640fc0d 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -31,6 +31,7 @@ namespace osu.Game.Screens.Select private const float wedge_height = 120; private const float transition_duration = 250; private const float corner_radius = 10; + private const float colour_bar_width = 30; /// Todo: move this const out to song select when more new design elements are implemented for the beatmap details area, since it applies to text alignment of various elements private const float text_margin = 62; @@ -49,6 +50,7 @@ namespace osu.Game.Screens.Select public BeatmapInfoWedgeV2() { + Height = wedge_height; Shear = wedged_container_shear; Masking = true; EdgeEffect = new EdgeEffectParameters @@ -72,7 +74,7 @@ namespace osu.Game.Screens.Select RelativeSizeAxes = Axes.Y, // By limiting the width we avoid this box showing up as an outline around the drawables that are on top of it. - Width = 40, + Width = colour_bar_width + corner_radius, Child = new Box { RelativeSizeAxes = Axes.Both } }, starCounter = new StarCounter @@ -82,7 +84,7 @@ namespace osu.Game.Screens.Select Origin = Anchor.Centre, Scale = new Vector2(0.35f), Shear = -wedged_container_shear, - X = -15, + X = -colour_bar_width / 2, Direction = FillDirection.Vertical } }; @@ -163,7 +165,7 @@ namespace osu.Game.Screens.Select { Masking = true, // We offset this by the portion of the colour bar underneath we wish to show - X = -30, + X = -colour_bar_width, CornerRadius = corner_radius, RelativeSizeAxes = Axes.Both, Depth = DisplayedContent?.Depth + 1 ?? 0, @@ -268,8 +270,7 @@ namespace osu.Game.Screens.Select { Name = "Top-left aligned metadata", Direction = FillDirection.Vertical, - Position = new Vector2(text_margin + shear_width, 12), - Width = .7f, + Padding = new MarginPadding { Horizontal = text_margin + shear_width, Top = 12 }, AutoSizeAxes = Axes.Y, RelativeSizeAxes = Axes.X, Children = new Drawable[] From 0ac7cd7409e1c61cc0f8df03c1fa0b780adb43da Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Wed, 18 Jan 2023 13:55:52 +0100 Subject: [PATCH 013/729] Expose star difficulty to wedge to allow updating starcounter and background colour internally. --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 38 +++++++++---------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 02d640fc0d..d90c002953 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -24,7 +24,6 @@ using osu.Game.Rulesets.Mods; namespace osu.Game.Screens.Select { - [Cached] public partial class BeatmapInfoWedgeV2 : VisibilityContainer { private const float shear_width = 21; @@ -41,6 +40,9 @@ namespace osu.Game.Screens.Select [Resolved] private IBindable ruleset { get; set; } = null!; + [Resolved] + private OsuColour colours { get; set; } = null!; + protected Container? DisplayedContent { get; private set; } protected WedgeInfoText? Info { get; private set; } @@ -183,6 +185,14 @@ namespace osu.Game.Screens.Select removeOldInfo(); Add(DisplayedContent = loaded); + + Info.StarRatingDisplay.DisplayedStars.BindValueChanged(s => + { + starCounter.Current = (float)s.NewValue; + starCounter.Colour = s.NewValue >= 6.5 ? colours.Orange1 : Colour4.Black.Opacity(0.75f); + + difficultyColourBar.FadeColour(colours.ForStarDifficulty(s.NewValue)); + }, true); }); } } @@ -192,7 +202,7 @@ namespace osu.Game.Screens.Select public OsuSpriteText TitleLabel { get; private set; } = null!; public OsuSpriteText ArtistLabel { get; private set; } = null!; - private StarRatingDisplay starRatingDisplay = null!; + public StarRatingDisplay StarRatingDisplay = null!; private ILocalisedBindableString titleBinding = null!; private ILocalisedBindableString artistBinding = null!; @@ -202,15 +212,9 @@ namespace osu.Game.Screens.Select [Resolved] private IBindable> mods { get; set; } = null!; - [Resolved] - private OsuColour colours { get; set; } = null!; - [Resolved] private BeatmapDifficultyCache difficultyCache { get; set; } = null!; - [Resolved] - private BeatmapInfoWedgeV2 wedge { get; set; } = null!; - private ModSettingChangeTracker? settingChangeTracker; private IBindable? starDifficulty; @@ -246,7 +250,7 @@ namespace osu.Game.Screens.Select Spacing = new Vector2(0f, 5f), Children = new Drawable[] { - starRatingDisplay = new StarRatingDisplay(default, animated: true) + StarRatingDisplay = new StarRatingDisplay(default, animated: true) { Anchor = Anchor.TopRight, Origin = Anchor.TopRight, @@ -302,24 +306,16 @@ namespace osu.Game.Screens.Select { base.LoadComplete(); - starRatingDisplay.DisplayedStars.BindValueChanged(s => - { - wedge.starCounter.Current = (float)s.NewValue; - wedge.starCounter.Colour = s.NewValue >= 6.5 ? colours.Orange1 : Colour4.Black.Opacity(0.75f); - - wedge.difficultyColourBar.FadeColour(colours.ForStarDifficulty(s.NewValue)); - }, true); - starDifficulty = difficultyCache.GetBindableDifficulty(working.BeatmapInfo, (cancellationSource = new CancellationTokenSource()).Token); starDifficulty.BindValueChanged(s => { - starRatingDisplay.Current.Value = s.NewValue ?? default; + StarRatingDisplay.Current.Value = s.NewValue ?? default; // Don't roll the counter on initial display (but still allow it to roll on applying mods etc.) - if (!starRatingDisplay.IsPresent) - starRatingDisplay.FinishTransforms(true); + if (!StarRatingDisplay.IsPresent) + StarRatingDisplay.FinishTransforms(true); - starRatingDisplay.FadeIn(transition_duration); + StarRatingDisplay.FadeIn(transition_duration); }); mods.BindValueChanged(m => From 655242371b2858371c82970d9fe316eb7d26cd6d Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Mon, 23 Jan 2023 17:00:46 +0100 Subject: [PATCH 014/729] Buffer wedge content to avoid opacity issues when showing / hiding --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 66 +++++++++++-------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index d90c002953..63e414d6ad 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -49,6 +49,7 @@ namespace osu.Game.Screens.Select private readonly Container difficultyColourBar; private readonly StarCounter starCounter; + private readonly BufferedContainer bufferedContent; public BeatmapInfoWedgeV2() { @@ -64,30 +65,35 @@ namespace osu.Game.Screens.Select }; CornerRadius = corner_radius; - Children = new Drawable[] + // We want to buffer the wedge to avoid weird transparency overlaps between the colour bar and the background. + Child = bufferedContent = new BufferedContainer { - // These elements can't be grouped with the rest of the content, due to being present either outside or under the backgrounds area - difficultyColourBar = new Container + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] { - Colour = Colour4.Transparent, - Depth = float.MaxValue, - Anchor = Anchor.TopRight, - Origin = Anchor.TopRight, - RelativeSizeAxes = Axes.Y, + // These elements can't be grouped with the rest of the content, due to being present either outside or under the backgrounds area + difficultyColourBar = new Container + { + Colour = Colour4.Transparent, + Depth = float.MaxValue, + Anchor = Anchor.TopRight, + Origin = Anchor.TopRight, + RelativeSizeAxes = Axes.Y, - // By limiting the width we avoid this box showing up as an outline around the drawables that are on top of it. - Width = colour_bar_width + corner_radius, - Child = new Box { RelativeSizeAxes = Axes.Both } - }, - starCounter = new StarCounter - { - Colour = Colour4.Transparent, - Anchor = Anchor.CentreRight, - Origin = Anchor.Centre, - Scale = new Vector2(0.35f), - Shear = -wedged_container_shear, - X = -colour_bar_width / 2, - Direction = FillDirection.Vertical + // By limiting the width we avoid this box showing up as an outline around the drawables that are on top of it. + Width = colour_bar_width + corner_radius, + Child = new Box { RelativeSizeAxes = Axes.Both } + }, + starCounter = new StarCounter + { + Colour = Colour4.Transparent, + Anchor = Anchor.CentreRight, + Origin = Anchor.Centre, + Scale = new Vector2(0.35f), + Shear = -wedged_container_shear, + X = -colour_bar_width / 2, + Direction = FillDirection.Vertical + } } }; } @@ -184,9 +190,9 @@ namespace osu.Game.Screens.Select if (loaded != loadingInfo) return; removeOldInfo(); - Add(DisplayedContent = loaded); + bufferedContent.Add(DisplayedContent = loaded); - Info.StarRatingDisplay.DisplayedStars.BindValueChanged(s => + Info.DisplayedStars.BindValueChanged(s => { starCounter.Current = (float)s.NewValue; starCounter.Colour = s.NewValue >= 6.5 ? colours.Orange1 : Colour4.Black.Opacity(0.75f); @@ -202,13 +208,15 @@ namespace osu.Game.Screens.Select public OsuSpriteText TitleLabel { get; private set; } = null!; public OsuSpriteText ArtistLabel { get; private set; } = null!; - public StarRatingDisplay StarRatingDisplay = null!; + private StarRatingDisplay starRatingDisplay = null!; private ILocalisedBindableString titleBinding = null!; private ILocalisedBindableString artistBinding = null!; private readonly WorkingBeatmap working; + public IBindable DisplayedStars => starRatingDisplay.DisplayedStars; + [Resolved] private IBindable> mods { get; set; } = null!; @@ -250,7 +258,7 @@ namespace osu.Game.Screens.Select Spacing = new Vector2(0f, 5f), Children = new Drawable[] { - StarRatingDisplay = new StarRatingDisplay(default, animated: true) + starRatingDisplay = new StarRatingDisplay(default, animated: true) { Anchor = Anchor.TopRight, Origin = Anchor.TopRight, @@ -309,13 +317,13 @@ namespace osu.Game.Screens.Select starDifficulty = difficultyCache.GetBindableDifficulty(working.BeatmapInfo, (cancellationSource = new CancellationTokenSource()).Token); starDifficulty.BindValueChanged(s => { - StarRatingDisplay.Current.Value = s.NewValue ?? default; + starRatingDisplay.Current.Value = s.NewValue ?? default; // Don't roll the counter on initial display (but still allow it to roll on applying mods etc.) - if (!StarRatingDisplay.IsPresent) - StarRatingDisplay.FinishTransforms(true); + if (!starRatingDisplay.IsPresent) + starRatingDisplay.FinishTransforms(true); - StarRatingDisplay.FadeIn(transition_duration); + starRatingDisplay.FadeIn(transition_duration); }); mods.BindValueChanged(m => From c7d49bdc82c4ab48ab60040cdd0e161a481fdf94 Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Mon, 30 Jan 2023 13:13:57 +0100 Subject: [PATCH 015/729] Update ```BeatmapInfoWedgeV2.cs``` animation to be similar to exit transition in ```SongSelect.cs`` --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 63e414d6ad..6a1662fd6a 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -113,20 +113,18 @@ namespace osu.Game.Screens.Select starCounter.Children.First().Origin = Anchor.Centre; } - private const double animation_duration = 800; + private const double animation_duration = 600; protected override void PopIn() { this.MoveToX(0, animation_duration, Easing.OutQuint); - this.RotateTo(0, animation_duration, Easing.OutQuint); - this.FadeIn(transition_duration); + this.FadeIn(200, Easing.In); } protected override void PopOut() { - this.MoveToX(-100, animation_duration, Easing.In); - this.RotateTo(10, animation_duration, Easing.In); - this.FadeOut(transition_duration * 2, Easing.In); + this.MoveToX(-150, animation_duration, Easing.OutQuint); + this.FadeOut(200, Easing.OutQuint); } private WorkingBeatmap? beatmap; From 92690afa5fecd750583924c5917fc3b877b73041 Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Mon, 30 Jan 2023 16:12:26 +0100 Subject: [PATCH 016/729] de-nest ```removeOldInfo()``` --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 6a1662fd6a..41fe9d8d50 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -152,15 +152,6 @@ namespace osu.Game.Screens.Select void perform() { - void removeOldInfo() - { - State.Value = beatmap == null ? Visibility.Hidden : Visibility.Visible; - - DisplayedContent?.FadeOut(transition_duration); - DisplayedContent?.Expire(); - DisplayedContent = null; - } - if (beatmap == null) { removeOldInfo(); @@ -199,6 +190,15 @@ namespace osu.Game.Screens.Select }, true); }); } + + void removeOldInfo() + { + State.Value = beatmap == null ? Visibility.Hidden : Visibility.Visible; + + DisplayedContent?.FadeOut(transition_duration); + DisplayedContent?.Expire(); + DisplayedContent = null; + } } public partial class WedgeInfoText : Container From 27c52a45fc079174f29067ae6b7e97529f02cceb Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Mon, 30 Jan 2023 16:13:55 +0100 Subject: [PATCH 017/729] Use inline lambda for scheduling --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 41fe9d8d50..0cc60e4bba 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -148,9 +148,7 @@ namespace osu.Game.Screens.Select private void updateDisplay() { - Scheduler.AddOnce(perform); - - void perform() + Scheduler.AddOnce(() => { if (beatmap == null) { @@ -189,7 +187,7 @@ namespace osu.Game.Screens.Select difficultyColourBar.FadeColour(colours.ForStarDifficulty(s.NewValue)); }, true); }); - } + }); void removeOldInfo() { From 5fc8f1d1bef944c43f1e9b1ac0456ded7015db72 Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Fri, 3 Feb 2023 19:52:01 +0100 Subject: [PATCH 018/729] Fix ```BeatmapInfoWedgeV2.cs``` starCounter needing janky rotation application --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 0cc60e4bba..48a16d5449 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Threading; using osuTK; using osu.Framework.Allocation; @@ -84,15 +83,25 @@ namespace osu.Game.Screens.Select Width = colour_bar_width + corner_radius, Child = new Box { RelativeSizeAxes = Axes.Both } }, - starCounter = new StarCounter + new Container { - Colour = Colour4.Transparent, - Anchor = Anchor.CentreRight, - Origin = Anchor.Centre, - Scale = new Vector2(0.35f), + // Applying the shear to this container and nesting the starCounter inside avoids + // the deformation that occurs if the shear is applied to the starCounter whilst rotated Shear = -wedged_container_shear, X = -colour_bar_width / 2, - Direction = FillDirection.Vertical + Anchor = Anchor.CentreRight, + Origin = Anchor.Centre, + RelativeSizeAxes = Axes.Y, + Width = colour_bar_width, + Child = starCounter = new StarCounter + { + Rotation = (float)(Math.Atan(shear_width / wedge_height) * (180 / Math.PI)), + Colour = Colour4.Transparent, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Scale = new Vector2(0.35f), + Direction = FillDirection.Vertical + } } } }; @@ -102,15 +111,6 @@ namespace osu.Game.Screens.Select private void load() { ruleset.BindValueChanged(_ => updateDisplay()); - - float starAngle = (float)(Math.Atan(shear_width / wedge_height) * (180 / Math.PI)); - - // Applying the rotation directly to the StarCounter distorts the stars, hence it is applied to the child container - starCounter.Children.First().Rotation = starAngle; - - // Makes sure the stars center themselves properly in the colour bar - starCounter.Children.First().Anchor = Anchor.Centre; - starCounter.Children.First().Origin = Anchor.Centre; } private const double animation_duration = 600; From de37a0a000bfb99ad0f56eaadbe9929eb93229ab Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Fri, 3 Feb 2023 19:53:04 +0100 Subject: [PATCH 019/729] enable pixelSnapping for the ```BufferedContainer``` in BeatmapInfoWedgeV2.cs --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 48a16d5449..a18d4086f7 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -65,7 +65,7 @@ namespace osu.Game.Screens.Select CornerRadius = corner_radius; // We want to buffer the wedge to avoid weird transparency overlaps between the colour bar and the background. - Child = bufferedContent = new BufferedContainer + Child = bufferedContent = new BufferedContainer(pixelSnapping: true) { RelativeSizeAxes = Axes.Both, Children = new Drawable[] From 38cc47d64ec35313d7cb928ae78a018b5641e2d5 Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Sat, 4 Feb 2023 16:52:30 +0100 Subject: [PATCH 020/729] Remove ```IsPresent``` usages --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index a18d4086f7..fda20dde4d 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -142,8 +142,6 @@ namespace osu.Game.Screens.Select } } - public override bool IsPresent => base.IsPresent || DisplayedContent == null; // Visibility is updated in the LoadComponentAsync callback - private Container? loadingInfo; private void updateDisplay() @@ -316,7 +314,7 @@ namespace osu.Game.Screens.Select starRatingDisplay.Current.Value = s.NewValue ?? default; // Don't roll the counter on initial display (but still allow it to roll on applying mods etc.) - if (!starRatingDisplay.IsPresent) + if (starRatingDisplay.Alpha > 0) starRatingDisplay.FinishTransforms(true); starRatingDisplay.FadeIn(transition_duration); From cb679ccc2b95858b0ff85e86bffcd6ee6a27d9dd Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Sat, 11 Feb 2023 18:00:17 +0100 Subject: [PATCH 021/729] Separate wedge visibility test into its own method --- .../SongSelect/TestSceneBeatmapInfoWedgeV2.cs | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs index 4904e2a723..f99950dfb0 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs @@ -7,6 +7,7 @@ using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Effects; using osu.Framework.Graphics.UserInterface; using osu.Framework.Testing; using osu.Game.Beatmaps; @@ -49,12 +50,6 @@ namespace osu.Game.Tests.Visual.SongSelect AddWaitStep("wait for select", 3); - AddStep("hide", () => { infoWedge.Hide(); }); - - AddWaitStep("wait for hide", 3); - - AddStep("show", () => { infoWedge.Show(); }); - AddSliderStep("change star difficulty", 0, 11.9, 5.55, v => { foreach (var hasCurrentValue in infoWedge.Info.ChildrenOfType>()) @@ -76,6 +71,26 @@ namespace osu.Game.Tests.Visual.SongSelect } } + [Test] + public void TestWedgeVisibility() + { + AddStep("Make shadow red for test visibility", () => + { + infoWedge.EdgeEffect = new EdgeEffectParameters + { + Colour = Colour4.Red, + Type = EdgeEffectType.Shadow, + Radius = 5, + }; + }); + AddStep("hide", () => { infoWedge.Hide(); }); + AddWaitStep("wait for hide", 3); + AddAssert("check visibility", () => infoWedge.Alpha == 0); + AddStep("show", () => { infoWedge.Show(); }); + AddWaitStep("wait for show", 1); + AddAssert("check visibility", () => infoWedge.Alpha > 0); + } + private void testBeatmapLabels(Ruleset ruleset) { AddAssert("check title", () => infoWedge.Info!.TitleLabel.Current.Value == $"{ruleset.ShortName}Title"); From 468419896a5364252afa23263d9e43d26c4b7edf Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Sat, 11 Feb 2023 18:08:50 +0100 Subject: [PATCH 022/729] Separate ruleset changing tests into their own method. Add small clarification for edge colouring in visibility test --- .../SongSelect/TestSceneBeatmapInfoWedgeV2.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs index f99950dfb0..ebd8c008b3 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs @@ -39,22 +39,25 @@ namespace osu.Game.Tests.Visual.SongSelect Add(infoWedge = new TestBeatmapInfoWedgeV2 { + State = { Value = Visibility.Visible }, Width = 0.6f, RelativeSizeAxes = Axes.X, Margin = new MarginPadding { Top = 20 } }); - AddStep("show", () => infoWedge.Show()); - - selectBeatmap(Beatmap.Value.Beatmap); - - AddWaitStep("wait for select", 3); - AddSliderStep("change star difficulty", 0, 11.9, 5.55, v => { foreach (var hasCurrentValue in infoWedge.Info.ChildrenOfType>()) hasCurrentValue.Current.Value = new StarDifficulty(v, 0); }); + } + + [Test] + public void TestRulesetChange() + { + selectBeatmap(Beatmap.Value.Beatmap); + + AddWaitStep("wait for select", 3); foreach (var rulesetInfo in rulesets.AvailableRulesets) { @@ -74,6 +77,8 @@ namespace osu.Game.Tests.Visual.SongSelect [Test] public void TestWedgeVisibility() { + // Mostly just in case someone runs this test before others, + // leading to the shadow being very hard to see if it is black AddStep("Make shadow red for test visibility", () => { infoWedge.EdgeEffect = new EdgeEffectParameters From 09cb6ca3a797e516c3097b48883468be0f85f237 Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Sat, 11 Feb 2023 18:15:21 +0100 Subject: [PATCH 023/729] Clean up formatting and wedge placement in testscene a tad, --- .../Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs index ebd8c008b3..3f3c7441f4 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs @@ -42,7 +42,7 @@ namespace osu.Game.Tests.Visual.SongSelect State = { Value = Visibility.Visible }, Width = 0.6f, RelativeSizeAxes = Axes.X, - Margin = new MarginPadding { Top = 20 } + Margin = new MarginPadding { Top = 20, Left = -10 } }); AddSliderStep("change star difficulty", 0, 11.9, 5.55, v => @@ -79,7 +79,7 @@ namespace osu.Game.Tests.Visual.SongSelect { // Mostly just in case someone runs this test before others, // leading to the shadow being very hard to see if it is black - AddStep("Make shadow red for test visibility", () => + AddStep("make shadow red for test visibility", () => { infoWedge.EdgeEffect = new EdgeEffectParameters { From 299023fce036d6995ead30d00d1de6364bbcc137 Mon Sep 17 00:00:00 2001 From: mk56-spn Date: Tue, 21 Feb 2023 16:07:26 +0100 Subject: [PATCH 024/729] Improve visibility of wedge shading in test scene and fix an issue with excessive roundness on said shadow. --- .../SongSelect/TestSceneBeatmapInfoWedgeV2.cs | 25 ++++++++++++++----- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 9 +++---- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs index 3f3c7441f4..09b93119cc 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs @@ -8,6 +8,7 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Effects; +using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.UserInterface; using osu.Framework.Testing; using osu.Game.Beatmaps; @@ -37,12 +38,25 @@ namespace osu.Game.Tests.Visual.SongSelect { base.LoadComplete(); - Add(infoWedge = new TestBeatmapInfoWedgeV2 + AddRange(new Drawable[] { - State = { Value = Visibility.Visible }, - Width = 0.6f, - RelativeSizeAxes = Axes.X, - Margin = new MarginPadding { Top = 20, Left = -10 } + // This exists only to make the wedge more visible in the test scene + new Box + { + Y = -20, + Colour = Colour4.Cornsilk.Darken(0.2f), + Height = BeatmapInfoWedgeV2.WEDGE_HEIGHT + 40, + Width = 0.65f, + RelativeSizeAxes = Axes.X, + Margin = new MarginPadding { Top = 20, Left = -10 } + }, + infoWedge = new TestBeatmapInfoWedgeV2 + { + State = { Value = Visibility.Visible }, + Width = 0.6f, + RelativeSizeAxes = Axes.X, + Margin = new MarginPadding { Top = 20, Left = -10 } + }, }); AddSliderStep("change star difficulty", 0, 11.9, 5.55, v => @@ -200,7 +214,6 @@ namespace osu.Game.Tests.Visual.SongSelect private partial class TestBeatmapInfoWedgeV2 : BeatmapInfoWedgeV2 { public new Container? DisplayedContent => base.DisplayedContent; - public new WedgeInfoText? Info => base.Info; } diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index fda20dde4d..0a35e68c7e 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -25,8 +25,8 @@ namespace osu.Game.Screens.Select { public partial class BeatmapInfoWedgeV2 : VisibilityContainer { + public const float WEDGE_HEIGHT = 120; private const float shear_width = 21; - private const float wedge_height = 120; private const float transition_duration = 250; private const float corner_radius = 10; private const float colour_bar_width = 30; @@ -34,7 +34,7 @@ namespace osu.Game.Screens.Select /// Todo: move this const out to song select when more new design elements are implemented for the beatmap details area, since it applies to text alignment of various elements private const float text_margin = 62; - private static readonly Vector2 wedged_container_shear = new Vector2(shear_width / wedge_height, 0); + private static readonly Vector2 wedged_container_shear = new Vector2(shear_width / WEDGE_HEIGHT, 0); [Resolved] private IBindable ruleset { get; set; } = null!; @@ -52,7 +52,7 @@ namespace osu.Game.Screens.Select public BeatmapInfoWedgeV2() { - Height = wedge_height; + Height = WEDGE_HEIGHT; Shear = wedged_container_shear; Masking = true; EdgeEffect = new EdgeEffectParameters @@ -60,7 +60,6 @@ namespace osu.Game.Screens.Select Colour = Colour4.Black.Opacity(.25f), Type = EdgeEffectType.Shadow, Radius = corner_radius, - Roundness = corner_radius }; CornerRadius = corner_radius; @@ -95,7 +94,7 @@ namespace osu.Game.Screens.Select Width = colour_bar_width, Child = starCounter = new StarCounter { - Rotation = (float)(Math.Atan(shear_width / wedge_height) * (180 / Math.PI)), + Rotation = (float)(Math.Atan(shear_width / WEDGE_HEIGHT) * (180 / Math.PI)), Colour = Colour4.Transparent, Anchor = Anchor.Centre, Origin = Anchor.Centre, From f21238f517fa8e22a694affd4406bf3b858a8bb4 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 16 Mar 2023 16:51:57 +0900 Subject: [PATCH 025/729] Adjust shadow to look better --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 0a35e68c7e..b7b60cffab 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -57,9 +57,9 @@ namespace osu.Game.Screens.Select Masking = true; EdgeEffect = new EdgeEffectParameters { - Colour = Colour4.Black.Opacity(.25f), + Colour = Colour4.Black.Opacity(0.2f), Type = EdgeEffectType.Shadow, - Radius = corner_radius, + Radius = 3, }; CornerRadius = corner_radius; From 768d7b5e1c30329280447dc452fde063b6e440b3 Mon Sep 17 00:00:00 2001 From: Liam DeVoe Date: Mon, 17 Jul 2023 23:31:21 -0400 Subject: [PATCH 026/729] correct implementation of stable notelock --- .../TestSceneHitCircle.cs | 2 +- .../Objects/Drawables/DrawableHitCircle.cs | 7 ++- .../Objects/Drawables/DrawableOsuHitObject.cs | 10 ++-- .../Objects/Drawables/DrawableSliderHead.cs | 3 +- osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs | 2 +- osu.Game.Rulesets.Osu/UI/ClickAction.cs | 18 +++++++ osu.Game.Rulesets.Osu/UI/IHitPolicy.cs | 2 +- .../UI/ObjectOrderedHitPolicy.cs | 53 ++++++++++--------- osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs | 2 +- .../UI/StartTimeOrderedHitPolicy.cs | 8 +-- osu.Game/Rulesets/UI/HitObjectContainer.cs | 2 +- osu.Game/Rulesets/UI/IHitObjectContainer.cs | 2 +- 12 files changed, 72 insertions(+), 39 deletions(-) create mode 100644 osu.Game.Rulesets.Osu/UI/ClickAction.cs diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircle.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircle.cs index 0314afc1ac..c818a361df 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircle.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircle.cs @@ -131,7 +131,7 @@ namespace osu.Game.Rulesets.Osu.Tests protected override void CheckForResult(bool userTriggered, double timeOffset) { - if (auto && !userTriggered && timeOffset > hitOffset && CheckHittable?.Invoke(this, Time.Current) != false) + if (auto && !userTriggered && timeOffset > hitOffset && CheckHittable?.Invoke(this, Time.Current) == ClickAction.Hit) { // force success ApplyResult(r => r.Type = HitResult.Great); diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs index 3458069dd1..09d818def8 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs @@ -18,6 +18,7 @@ using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Judgements; using osu.Game.Rulesets.Osu.Skinning; using osu.Game.Rulesets.Osu.Skinning.Default; +using osu.Game.Rulesets.Osu.UI; using osu.Game.Rulesets.Scoring; using osu.Game.Skinning; using osuTK; @@ -154,13 +155,17 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables } var result = ResultFor(timeOffset); + var clickAction = CheckHittable?.Invoke(this, Time.Current); - if (result == HitResult.None || CheckHittable?.Invoke(this, Time.Current) == false) + if (clickAction == ClickAction.Shake || (result == HitResult.None && clickAction != ClickAction.Ignore)) { Shake(); return; } + if (result == HitResult.None) + return; + ApplyResult(r => { var circleResult = (OsuHitCircleJudgementResult)r; diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs index df0ba344d8..a8ce2118c8 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs @@ -12,6 +12,7 @@ using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Judgements; using osu.Game.Rulesets.Osu.Scoring; +using osu.Game.Rulesets.Osu.UI; using osuTK; using osuTK.Graphics; @@ -30,10 +31,13 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables protected override float SamplePlaybackPosition => CalculateDrawableRelativePosition(this); /// - /// Whether this can be hit, given a time value. - /// If non-null, judgements will be ignored (resulting in a shake) whilst the function returns false. + /// What action this should take in response to a + /// click at the given time value. + /// If non-null, judgements will be ignored for return values of + /// and , and this hit object will be shaken for return values of + /// . /// - public Func CheckHittable; + public Func CheckHittable; protected DrawableOsuHitObject(OsuHitObject hitObject) : base(hitObject) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs index b8a1efabe0..a4cf69ee31 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs @@ -8,6 +8,7 @@ using System.Diagnostics; using JetBrains.Annotations; using osu.Framework.Bindables; using osu.Game.Rulesets.Objects.Types; +using osu.Game.Rulesets.Osu.UI; using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Osu.Objects.Drawables @@ -60,7 +61,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables pathVersion.BindTo(DrawableSlider.PathVersion); - CheckHittable = (d, t) => DrawableSlider.CheckHittable?.Invoke(d, t) ?? true; + CheckHittable = (d, t) => DrawableSlider.CheckHittable?.Invoke(d, t) ?? ClickAction.Hit; } protected override void Update() diff --git a/osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs index afa54c2dfb..7503c43e0b 100644 --- a/osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs @@ -15,7 +15,7 @@ namespace osu.Game.Rulesets.Osu.UI { public IHitObjectContainer HitObjectContainer { get; set; } - public bool IsHittable(DrawableHitObject hitObject, double time) => true; + public ClickAction CheckHittable(DrawableHitObject hitObject, double time) => ClickAction.Hit; public void HandleHit(DrawableHitObject hitObject) { diff --git a/osu.Game.Rulesets.Osu/UI/ClickAction.cs b/osu.Game.Rulesets.Osu/UI/ClickAction.cs new file mode 100644 index 0000000000..2b00f5acce --- /dev/null +++ b/osu.Game.Rulesets.Osu/UI/ClickAction.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 osu.Game.Rulesets.Osu.Objects.Drawables; + +namespace osu.Game.Rulesets.Osu.UI +{ + /// + /// An action that an recommends be taken in response to a click + /// on a . + /// + public enum ClickAction + { + Ignore, + Shake, + Hit + } +} diff --git a/osu.Game.Rulesets.Osu/UI/IHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/IHitPolicy.cs index b509796742..9820b8c188 100644 --- a/osu.Game.Rulesets.Osu/UI/IHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/IHitPolicy.cs @@ -20,7 +20,7 @@ namespace osu.Game.Rulesets.Osu.UI /// The to check. /// The time to check. /// Whether can be hit at the given . - bool IsHittable(DrawableHitObject hitObject, double time); + ClickAction CheckHittable(DrawableHitObject hitObject, double time); /// /// Handles a being hit. diff --git a/osu.Game.Rulesets.Osu/UI/ObjectOrderedHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/ObjectOrderedHitPolicy.cs index 6330208d37..07942954e1 100644 --- a/osu.Game.Rulesets.Osu/UI/ObjectOrderedHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/ObjectOrderedHitPolicy.cs @@ -3,8 +3,7 @@ #nullable disable -using System.Collections.Generic; -using System.Linq; +using System; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables; @@ -22,35 +21,41 @@ namespace osu.Game.Rulesets.Osu.UI { public IHitObjectContainer HitObjectContainer { get; set; } - public bool IsHittable(DrawableHitObject hitObject, double time) => enumerateHitObjectsUpTo(hitObject.HitObject.StartTime).All(obj => obj.AllJudged); - public void HandleHit(DrawableHitObject hitObject) { } - private IEnumerable enumerateHitObjectsUpTo(double targetTime) + public ClickAction CheckHittable(DrawableHitObject hitObject, double time) { - foreach (var obj in HitObjectContainer.AliveObjects) + int index = HitObjectContainer.AliveObjects.IndexOf(hitObject); + + if (index > 0) { - if (obj.HitObject.StartTime >= targetTime) - yield break; - - switch (obj) - { - case DrawableSpinner: - continue; - - case DrawableSlider slider: - yield return slider.HeadCircle; - - break; - - default: - yield return obj; - - break; - } + var previousHitObject = (DrawableOsuHitObject)HitObjectContainer.AliveObjects[index - 1]; + if (previousHitObject.HitObject.StackHeight > 0 && !previousHitObject.AllJudged) + return ClickAction.Ignore; } + + foreach (DrawableHitObject testObject in HitObjectContainer.AliveObjects) + { + if (testObject.AllJudged) + continue; + + // if we found the object being checked, we can move on to the final timing test. + if (testObject == hitObject) + break; + + // for all other objects, we check for validity and block the hit if any are still valid. + // 3ms of extra leniency to account for slightly unsnapped objects. + if (testObject.HitObject.GetEndTime() + 3 < hitObject.HitObject.StartTime) + return ClickAction.Shake; + } + + // stable has `const HitObjectManager.HITTABLE_RANGE = 400;`, which is only used for notelock code. + // probably not a coincidence that this is equivalent to lazer's OsuHitWindows.MISS_WINDOW. + + // TODO stable compares to 200 when autopilot is enabled, instead of 400. + return Math.Abs(hitObject.HitObject.StartTime - time) < 400 ? ClickAction.Hit : ClickAction.Shake; } } } diff --git a/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs b/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs index ed02284a4b..15ca0a90de 100644 --- a/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs +++ b/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs @@ -89,7 +89,7 @@ namespace osu.Game.Rulesets.Osu.UI protected override void OnNewDrawableHitObject(DrawableHitObject drawable) { - ((DrawableOsuHitObject)drawable).CheckHittable = hitPolicy.IsHittable; + ((DrawableOsuHitObject)drawable).CheckHittable = hitPolicy.CheckHittable; Debug.Assert(!drawable.IsLoaded, $"Already loaded {nameof(DrawableHitObject)} is added to {nameof(OsuPlayfield)}"); drawable.OnLoadComplete += onDrawableHitObjectLoaded; diff --git a/osu.Game.Rulesets.Osu/UI/StartTimeOrderedHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/StartTimeOrderedHitPolicy.cs index edc3ba0818..f33ca58aef 100644 --- a/osu.Game.Rulesets.Osu/UI/StartTimeOrderedHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/StartTimeOrderedHitPolicy.cs @@ -24,7 +24,7 @@ namespace osu.Game.Rulesets.Osu.UI { public IHitObjectContainer HitObjectContainer { get; set; } - public bool IsHittable(DrawableHitObject hitObject, double time) + public ClickAction CheckHittable(DrawableHitObject hitObject, double time) { DrawableHitObject blockingObject = null; @@ -36,13 +36,13 @@ namespace osu.Game.Rulesets.Osu.UI // If there is no previous hitobject, allow the hit. if (blockingObject == null) - return true; + return ClickAction.Hit; // A hit is allowed if: // 1. The last blocking hitobject has been judged. // 2. The current time is after the last hitobject's start time. // Hits at exactly the same time as the blocking hitobject are allowed for maps that contain simultaneous hitobjects (e.g. /b/372245). - return blockingObject.Judged || time >= blockingObject.HitObject.StartTime; + return (blockingObject.Judged || time >= blockingObject.HitObject.StartTime) ? ClickAction.Hit : ClickAction.Shake; } public void HandleHit(DrawableHitObject hitObject) @@ -51,7 +51,7 @@ namespace osu.Game.Rulesets.Osu.UI if (!hitObjectCanBlockFutureHits(hitObject)) return; - if (!IsHittable(hitObject, hitObject.HitObject.StartTime + hitObject.Result.TimeOffset)) + if (CheckHittable(hitObject, hitObject.HitObject.StartTime + hitObject.Result.TimeOffset) != ClickAction.Hit) throw new InvalidOperationException($"A {hitObject} was hit before it became hittable!"); // Miss all hitobjects prior to the hit one. diff --git a/osu.Game/Rulesets/UI/HitObjectContainer.cs b/osu.Game/Rulesets/UI/HitObjectContainer.cs index 099be486b3..454a83bcda 100644 --- a/osu.Game/Rulesets/UI/HitObjectContainer.cs +++ b/osu.Game/Rulesets/UI/HitObjectContainer.cs @@ -21,7 +21,7 @@ namespace osu.Game.Rulesets.UI { public IEnumerable Objects => InternalChildren.Cast().OrderBy(h => h.HitObject.StartTime); - public IEnumerable AliveObjects => AliveEntries.Select(pair => pair.Drawable).OrderBy(h => h.HitObject.StartTime); + public IList AliveObjects => AliveEntries.Select(pair => pair.Drawable).OrderBy(h => h.HitObject.StartTime).ToList(); /// /// Invoked when a is judged. diff --git a/osu.Game/Rulesets/UI/IHitObjectContainer.cs b/osu.Game/Rulesets/UI/IHitObjectContainer.cs index 6dcb0944be..bb4806206d 100644 --- a/osu.Game/Rulesets/UI/IHitObjectContainer.cs +++ b/osu.Game/Rulesets/UI/IHitObjectContainer.cs @@ -19,6 +19,6 @@ namespace osu.Game.Rulesets.UI /// /// If this uses pooled objects, this is equivalent to . /// - IEnumerable AliveObjects { get; } + IList AliveObjects { get; } } } From 15af85226ce9c15c6bdb18d1c727cd257683d4e1 Mon Sep 17 00:00:00 2001 From: Liam DeVoe Date: Wed, 19 Jul 2023 02:06:29 -0400 Subject: [PATCH 027/729] adjust test for correct stable notelock stable actually allows for hitobjs to be hit in the middle of sliders, as long as it doesn't interfere with the end time of the slider. --- .../TestSceneObjectOrderedHitPolicy.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs index ee70441688..be2affa50f 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs @@ -213,10 +213,10 @@ namespace osu.Game.Rulesets.Osu.Tests } /// - /// Tests clicking a future circle after a slider's start time, but hitting all slider ticks. + /// Tests clicking a future circle after a slider's start time, but hitting the slider head and all slider ticks. /// [Test] - public void TestMissSliderHeadAndHitAllSliderTicks() + public void TestHitCircleBeforeSliderHead() { const double time_slider = 1500; const double time_circle = 1510; @@ -248,7 +248,7 @@ namespace osu.Game.Rulesets.Osu.Tests new OsuReplayFrame { Time = time_slider + 10, Position = positionSlider, Actions = { OsuAction.RightButton } } }); - addJudgementAssert(hitObjects[0], HitResult.Miss); + addJudgementAssert(hitObjects[0], HitResult.Great); addJudgementAssert(hitObjects[1], HitResult.Great); addJudgementAssert("slider head", () => ((Slider)hitObjects[1]).HeadCircle, HitResult.LargeTickHit); addJudgementAssert("slider tick", () => ((Slider)hitObjects[1]).NestedHitObjects[1] as SliderTick, HitResult.LargeTickHit); From 2c97ac74107c975f8f37e6a840caff06bef08fc8 Mon Sep 17 00:00:00 2001 From: Liam DeVoe Date: Wed, 19 Jul 2023 14:28:04 -0400 Subject: [PATCH 028/729] convert AliveObjects to list in hit policy instead of globally --- osu.Game.Rulesets.Osu/UI/ObjectOrderedHitPolicy.cs | 8 +++++--- osu.Game/Rulesets/UI/HitObjectContainer.cs | 2 +- osu.Game/Rulesets/UI/IHitObjectContainer.cs | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/osu.Game.Rulesets.Osu/UI/ObjectOrderedHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/ObjectOrderedHitPolicy.cs index 07942954e1..172e5a39d8 100644 --- a/osu.Game.Rulesets.Osu/UI/ObjectOrderedHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/ObjectOrderedHitPolicy.cs @@ -4,6 +4,7 @@ #nullable disable using System; +using System.Linq; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables; @@ -27,16 +28,17 @@ namespace osu.Game.Rulesets.Osu.UI public ClickAction CheckHittable(DrawableHitObject hitObject, double time) { - int index = HitObjectContainer.AliveObjects.IndexOf(hitObject); + var aliveObjects = HitObjectContainer.AliveObjects.ToList(); + int index = aliveObjects.IndexOf(hitObject); if (index > 0) { - var previousHitObject = (DrawableOsuHitObject)HitObjectContainer.AliveObjects[index - 1]; + var previousHitObject = (DrawableOsuHitObject)aliveObjects[index - 1]; if (previousHitObject.HitObject.StackHeight > 0 && !previousHitObject.AllJudged) return ClickAction.Ignore; } - foreach (DrawableHitObject testObject in HitObjectContainer.AliveObjects) + foreach (DrawableHitObject testObject in aliveObjects) { if (testObject.AllJudged) continue; diff --git a/osu.Game/Rulesets/UI/HitObjectContainer.cs b/osu.Game/Rulesets/UI/HitObjectContainer.cs index 454a83bcda..099be486b3 100644 --- a/osu.Game/Rulesets/UI/HitObjectContainer.cs +++ b/osu.Game/Rulesets/UI/HitObjectContainer.cs @@ -21,7 +21,7 @@ namespace osu.Game.Rulesets.UI { public IEnumerable Objects => InternalChildren.Cast().OrderBy(h => h.HitObject.StartTime); - public IList AliveObjects => AliveEntries.Select(pair => pair.Drawable).OrderBy(h => h.HitObject.StartTime).ToList(); + public IEnumerable AliveObjects => AliveEntries.Select(pair => pair.Drawable).OrderBy(h => h.HitObject.StartTime); /// /// Invoked when a is judged. diff --git a/osu.Game/Rulesets/UI/IHitObjectContainer.cs b/osu.Game/Rulesets/UI/IHitObjectContainer.cs index bb4806206d..6dcb0944be 100644 --- a/osu.Game/Rulesets/UI/IHitObjectContainer.cs +++ b/osu.Game/Rulesets/UI/IHitObjectContainer.cs @@ -19,6 +19,6 @@ namespace osu.Game.Rulesets.UI /// /// If this uses pooled objects, this is equivalent to . /// - IList AliveObjects { get; } + IEnumerable AliveObjects { get; } } } From 6a8123029854e79f9124ea90f88c41e0245fda16 Mon Sep 17 00:00:00 2001 From: Liam DeVoe Date: Wed, 19 Jul 2023 14:44:28 -0400 Subject: [PATCH 029/729] rename ObjectOrderedHitPolicy to LegacyHitPolicy --- osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs | 2 +- .../UI/{ObjectOrderedHitPolicy.cs => LegacyHitPolicy.cs} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename osu.Game.Rulesets.Osu/UI/{ObjectOrderedHitPolicy.cs => LegacyHitPolicy.cs} (97%) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs b/osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs index 250d97c537..229f80c2bd 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs @@ -57,7 +57,7 @@ namespace osu.Game.Rulesets.Osu.Mods var osuRuleset = (DrawableOsuRuleset)drawableRuleset; if (ClassicNoteLock.Value) - osuRuleset.Playfield.HitPolicy = new ObjectOrderedHitPolicy(); + osuRuleset.Playfield.HitPolicy = new LegacyHitPolicy(); usingHiddenFading = drawableRuleset.Mods.OfType().SingleOrDefault()?.OnlyFadeApproachCircles.Value == false; } diff --git a/osu.Game.Rulesets.Osu/UI/ObjectOrderedHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs similarity index 97% rename from osu.Game.Rulesets.Osu/UI/ObjectOrderedHitPolicy.cs rename to osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs index 172e5a39d8..c35d4a1b56 100644 --- a/osu.Game.Rulesets.Osu/UI/ObjectOrderedHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs @@ -18,7 +18,7 @@ namespace osu.Game.Rulesets.Osu.UI /// Hits will be blocked until the previous s have been judged. /// /// - public class ObjectOrderedHitPolicy : IHitPolicy + public class LegacyHitPolicy : IHitPolicy { public IHitObjectContainer HitObjectContainer { get; set; } From eef63b41dae7bc1d7916236b0bb2f0f6800cca4c Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Wed, 2 Aug 2023 15:01:58 +0900 Subject: [PATCH 030/729] fetch missing beatmap when import score with missing beatmap --- .../Online/TestSceneReplayMissingBeatmap.cs | 96 ++++++++ osu.Game/OsuGame.cs | 2 + osu.Game/Scoring/Legacy/LegacyScoreDecoder.cs | 15 +- osu.Game/Scoring/ScoreImporter.cs | 21 ++ osu.Game/Scoring/ScoreManager.cs | 7 + .../Import/ReplayMissingBeatmapScreen.cs | 210 ++++++++++++++++++ 6 files changed, 349 insertions(+), 2 deletions(-) create mode 100644 osu.Game.Tests/Visual/Online/TestSceneReplayMissingBeatmap.cs create mode 100644 osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs diff --git a/osu.Game.Tests/Visual/Online/TestSceneReplayMissingBeatmap.cs b/osu.Game.Tests/Visual/Online/TestSceneReplayMissingBeatmap.cs new file mode 100644 index 0000000000..a260cc8593 --- /dev/null +++ b/osu.Game.Tests/Visual/Online/TestSceneReplayMissingBeatmap.cs @@ -0,0 +1,96 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Net; +using NUnit.Framework; +using osu.Game.Database; +using osu.Game.Online.API; +using osu.Game.Online.API.Requests; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Screens.Import; +using osu.Game.Tests.Resources; + +namespace osu.Game.Tests.Visual.Online +{ + public partial class TestSceneReplayMissingBeatmap : OsuGameTestScene + { + private DummyAPIAccess dummyAPI => (DummyAPIAccess)API; + + [Test] + public void TestSceneMissingBeatmapWithOnlineAvailable() + { + var beatmap = new APIBeatmap + { + OnlineBeatmapSetID = 173612 + }; + + var beatmapset = new APIBeatmapSet + { + OnlineID = 173612, + }; + + setupBeatmapResponse(beatmap, beatmapset); + + AddStep("import score", () => + { + using (var resourceStream = TestResources.OpenResource("Replays/mania-replay.osr")) + { + var importTask = new ImportTask(resourceStream, "replay.osr"); + + Game.ScoreManager.Import(new[] { importTask }); + } + }); + + AddUntilStep("Replay missing screen show", () => Game.ScreenStack.CurrentScreen.GetType() == typeof(ReplayMissingBeatmapScreen)); + } + + [Test] + public void TestSceneMissingBeatmapWithOnlineUnavailable() + { + setupFailedResponse(); + + AddStep("import score", () => + { + using (var resourceStream = TestResources.OpenResource("Replays/mania-replay.osr")) + { + var importTask = new ImportTask(resourceStream, "replay.osr"); + + Game.ScoreManager.Import(new[] { importTask }); + } + }); + + AddUntilStep("Replay missing screen not show", () => Game.ScreenStack.CurrentScreen.GetType() != typeof(ReplayMissingBeatmapScreen)); + } + + private void setupBeatmapResponse(APIBeatmap b, APIBeatmapSet s) + => AddStep("setup response", () => + { + dummyAPI.HandleRequest = request => + { + if (request is GetBeatmapRequest getBeatmapRequest) + { + getBeatmapRequest.TriggerSuccess(b); + return true; + } + + if (request is GetBeatmapSetRequest getBeatmapSetRequest) + { + getBeatmapSetRequest.TriggerSuccess(s); + return true; + } + + return false; + }; + }); + + private void setupFailedResponse() + => AddStep("setup failed response", () => + { + dummyAPI.HandleRequest = request => + { + request.TriggerFailure(new WebException()); + return true; + }; + }); + } +} diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 1a40bb8e3d..50b4e4f125 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -854,6 +854,8 @@ namespace osu.Game MultiplayerClient.PostNotification = n => Notifications.Post(n); + ScoreManager.Performer = this; + // make config aware of how to lookup skins for on-screen display purposes. // if this becomes a more common thing, tracked settings should be reconsidered to allow local DI. LocalConfig.LookupSkinName = id => SkinManager.Query(s => s.ID == id)?.ToString() ?? "Unknown"; diff --git a/osu.Game/Scoring/Legacy/LegacyScoreDecoder.cs b/osu.Game/Scoring/Legacy/LegacyScoreDecoder.cs index 8c00110909..a191220b37 100644 --- a/osu.Game/Scoring/Legacy/LegacyScoreDecoder.cs +++ b/osu.Game/Scoring/Legacy/LegacyScoreDecoder.cs @@ -7,6 +7,7 @@ using System; using System.Diagnostics; using System.IO; using System.Linq; +using JetBrains.Annotations; using Newtonsoft.Json; using osu.Game.Beatmaps; using osu.Game.Beatmaps.Formats; @@ -61,7 +62,7 @@ namespace osu.Game.Scoring.Legacy workingBeatmap = GetBeatmap(beatmapHash); if (workingBeatmap is DummyWorkingBeatmap) - throw new BeatmapNotFoundException(beatmapHash); + throw new BeatmapNotFoundException(beatmapHash, stream); scoreInfo.User = new APIUser { Username = sr.ReadString() }; @@ -349,9 +350,19 @@ namespace osu.Game.Scoring.Legacy { public string Hash { get; } - public BeatmapNotFoundException(string hash) + [CanBeNull] + public MemoryStream ScoreStream { get; } + + public BeatmapNotFoundException(string hash, [CanBeNull] Stream scoreStream) { Hash = hash; + + if (scoreStream != null) + { + ScoreStream = new MemoryStream(); + scoreStream.Position = 0; + scoreStream.CopyTo(ScoreStream); + } } } } diff --git a/osu.Game/Scoring/ScoreImporter.cs b/osu.Game/Scoring/ScoreImporter.cs index 81b9f57bbc..408c83a5b8 100644 --- a/osu.Game/Scoring/ScoreImporter.cs +++ b/osu.Game/Scoring/ScoreImporter.cs @@ -9,6 +9,7 @@ using System.Threading; using Newtonsoft.Json; using osu.Framework.Logging; using osu.Framework.Platform; +using osu.Framework.Screens; using osu.Game.Beatmaps; using osu.Game.Database; using osu.Game.IO.Archives; @@ -19,6 +20,8 @@ using osu.Game.Online.API.Requests; using osu.Game.Online.API.Requests.Responses; using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Scoring; +using osu.Game.Screens; +using osu.Game.Screens.Import; using Realms; namespace osu.Game.Scoring @@ -27,6 +30,8 @@ namespace osu.Game.Scoring { public override IEnumerable HandledExtensions => new[] { ".osr" }; + public IPerformFromScreenRunner? Performer { get; set; } + protected override string[] HashableFileTypes => new[] { ".osr" }; private readonly RulesetStore rulesets; @@ -54,12 +59,28 @@ namespace osu.Game.Scoring } catch (LegacyScoreDecoder.BeatmapNotFoundException e) { + onMissingBeatmap(e); Logger.Log($@"Score '{name}' failed to import: no corresponding beatmap with the hash '{e.Hash}' could be found.", LoggingTarget.Database); return null; } } } + private void onMissingBeatmap(LegacyScoreDecoder.BeatmapNotFoundException e) + { + var req = new GetBeatmapRequest(new BeatmapInfo + { + MD5Hash = e.Hash + }); + + req.Success += res => + { + Performer?.PerformFromScreen(screen => screen.Push(new ReplayMissingBeatmapScreen(res, e.ScoreStream))); + }; + + api.Queue(req); + } + public Score GetScore(ScoreInfo score) => new LegacyDatabasedScore(score, rulesets, beatmaps(), Files.Store); protected override void Populate(ScoreInfo model, ArchiveReader? archive, Realm realm, CancellationToken cancellationToken = default) diff --git a/osu.Game/Scoring/ScoreManager.cs b/osu.Game/Scoring/ScoreManager.cs index 31b5bd8365..9331168ab0 100644 --- a/osu.Game/Scoring/ScoreManager.cs +++ b/osu.Game/Scoring/ScoreManager.cs @@ -21,6 +21,7 @@ using osu.Game.Rulesets; using osu.Game.Rulesets.Scoring; using osu.Game.Online.API; using osu.Game.Scoring.Legacy; +using osu.Game.Screens; namespace osu.Game.Scoring { @@ -30,6 +31,12 @@ namespace osu.Game.Scoring private readonly ScoreImporter scoreImporter; private readonly LegacyScoreExporter scoreExporter; + [CanBeNull] + public IPerformFromScreenRunner Performer + { + set => scoreImporter.Performer = value; + } + public override bool PauseImports { get => base.PauseImports; diff --git a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs new file mode 100644 index 0000000000..d7decc0e4e --- /dev/null +++ b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs @@ -0,0 +1,210 @@ +// 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.Collections.Generic; +using System.IO; +using System.Linq; +using osu.Framework.Allocation; +using osu.Framework.Extensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Game.Audio; +using osu.Game.Beatmaps; +using osu.Game.Beatmaps.Drawables.Cards; +using osu.Game.Configuration; +using osu.Game.Database; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Online.API; +using osu.Game.Online.API.Requests; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Overlays; +using osu.Game.Overlays.Settings; +using osu.Game.Scoring; +using osu.Game.Screens.Ranking; +using osuTK; +using Realms; + +namespace osu.Game.Screens.Import +{ + [Cached(typeof(IPreviewTrackOwner))] + public partial class ReplayMissingBeatmapScreen : OsuScreen, IPreviewTrackOwner + { + [Resolved] + private BeatmapModelDownloader beatmapDownloader { get; set; } = null!; + + [Resolved] + private IAPIProvider api { get; set; } = null!; + + [Resolved] + private ScoreManager scoreManager { get; set; } = null!; + + [Resolved] + private RealmAccess realm { get; set; } = null!; + + private IDisposable? realmSubscription; + + [Cached] + private OverlayColourProvider colourProvider = new OverlayColourProvider(OverlayColourScheme.Purple); + + [Resolved] + private INotificationOverlay? notificationOverlay { get; set; } + + private Container beatmapPanelContainer = null!; + private ReplayDownloadButton replayDownloadButton = null!; + private SettingsCheckbox automaticDownload = null!; + + private readonly MemoryStream? scoreStream; + private readonly APIBeatmap beatmap; + + private APIBeatmapSet? beatmapSetInfo; + + public ReplayMissingBeatmapScreen(APIBeatmap beatmap, MemoryStream? scoreStream = null) + { + this.beatmap = beatmap; + this.scoreStream = scoreStream; + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours, OsuConfigManager config) + { + InternalChildren = new Drawable[] + { + new Container + { + Masking = true, + CornerRadius = 20, + AutoSizeAxes = Axes.Both, + AutoSizeDuration = 500, + AutoSizeEasing = Easing.OutQuint, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Children = new Drawable[] + { + new Box + { + Colour = colours.Gray5, + RelativeSizeAxes = Axes.Both, + }, + new FillFlowContainer + { + Margin = new MarginPadding(20), + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Spacing = new Vector2(15), + Children = new Drawable[] + { + new OsuSpriteText + { + Text = "Beatmap info", + Font = OsuFont.Default.With(size: 30), + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }, + new FillFlowContainer + { + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Horizontal, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Spacing = new Vector2(15), + Children = new Drawable[] + { + beatmapPanelContainer = new Container + { + AutoSizeAxes = Axes.Both, + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft, + }, + } + }, + automaticDownload = new SettingsCheckbox + { + LabelText = "Automatically download beatmaps", + Current = config.GetBindable(OsuSetting.AutomaticallyDownloadWhenSpectating), + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }, + replayDownloadButton = new ReplayDownloadButton(new ScoreInfo()) + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }, + } + } + } + }, + }; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + var onlineBeatmapRequest = new GetBeatmapSetRequest(beatmap.OnlineBeatmapSetID); + + onlineBeatmapRequest.Success += res => + { + beatmapSetInfo = res; + beatmapPanelContainer.Child = new BeatmapCardNormal(res, allowExpansion: false); + checkForAutomaticDownload(res); + }; + + api.Queue(onlineBeatmapRequest); + + realmSubscription = realm.RegisterForNotifications( + realm => realm.All().Where(s => !s.DeletePending), beatmapsChanged); + } + + private void checkForAutomaticDownload(APIBeatmapSet beatmap) + { + if (!automaticDownload.Current.Value) + return; + + beatmapDownloader.Download(beatmap); + } + + private void beatmapsChanged(IRealmCollection sender, ChangeSet? changes) + { + if (changes?.InsertedIndices == null) return; + + if (beatmapSetInfo == null) return; + + if (scoreStream == null) return; + + if (sender.Any(b => b.OnlineID == beatmapSetInfo.OnlineID)) + { + var progressNotification = new ImportProgressNotification(); + var importTask = new ImportTask(scoreStream, "score.osr"); + + scoreManager.Import(progressNotification, new[] { importTask }) + .ContinueWith(s => + { + s.GetResultSafely>>().FirstOrDefault()?.PerformRead(score => + { + Guid scoreid = score.ID; + Scheduler.Add(() => + { + replayDownloadButton.Score.Value = realm.Realm.Find(scoreid) ?? new ScoreInfo(); + }); + }); + }); + + notificationOverlay?.Post(progressNotification); + + realmSubscription?.Dispose(); + } + } + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + realmSubscription?.Dispose(); + } + } +} From c07a1ec91ec0e087c6c7a437d5d0b684cea1b4e8 Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Wed, 2 Aug 2023 16:09:37 +0900 Subject: [PATCH 031/729] retrun DefaultBeatmap when beatmapset already delete pending reimplement https://github.com/ppy/osu/pull/22741 --- osu.Game/Beatmaps/WorkingBeatmapCache.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/WorkingBeatmapCache.cs b/osu.Game/Beatmaps/WorkingBeatmapCache.cs index 78eed626f2..c06f4da4ae 100644 --- a/osu.Game/Beatmaps/WorkingBeatmapCache.cs +++ b/osu.Game/Beatmaps/WorkingBeatmapCache.cs @@ -88,7 +88,7 @@ namespace osu.Game.Beatmaps public virtual WorkingBeatmap GetWorkingBeatmap(BeatmapInfo beatmapInfo) { - if (beatmapInfo?.BeatmapSet == null) + if (beatmapInfo?.BeatmapSet == null || beatmapInfo.BeatmapSet?.DeletePending == true) return DefaultBeatmap; lock (workingCache) From 4c43c9232970c1ac9c4ce2ba4ad4dc54f910e530 Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Wed, 2 Aug 2023 17:48:24 +0900 Subject: [PATCH 032/729] ensure dispose stream --- osu.Game/Scoring/ScoreImporter.cs | 2 ++ osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/osu.Game/Scoring/ScoreImporter.cs b/osu.Game/Scoring/ScoreImporter.cs index 408c83a5b8..ea3bd8f5ae 100644 --- a/osu.Game/Scoring/ScoreImporter.cs +++ b/osu.Game/Scoring/ScoreImporter.cs @@ -78,6 +78,8 @@ namespace osu.Game.Scoring Performer?.PerformFromScreen(screen => screen.Push(new ReplayMissingBeatmapScreen(res, e.ScoreStream))); }; + req.Failure += _ => e.ScoreStream?.Dispose(); + api.Queue(req); } diff --git a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs index d7decc0e4e..a6215165fb 100644 --- a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs +++ b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs @@ -174,16 +174,17 @@ namespace osu.Game.Screens.Import if (beatmapSetInfo == null) return; - if (scoreStream == null) return; + if (scoreStream == null || !scoreStream.CanRead) return; if (sender.Any(b => b.OnlineID == beatmapSetInfo.OnlineID)) { var progressNotification = new ImportProgressNotification(); var importTask = new ImportTask(scoreStream, "score.osr"); - scoreManager.Import(progressNotification, new[] { importTask }) .ContinueWith(s => { + scoreStream.Dispose(); + s.GetResultSafely>>().FirstOrDefault()?.PerformRead(score => { Guid scoreid = score.ID; @@ -205,6 +206,7 @@ namespace osu.Game.Screens.Import base.Dispose(isDisposing); realmSubscription?.Dispose(); + scoreStream?.Dispose(); } } } From 1bdd054bd60a6af5c0816cbbacf6ca629c771b8a Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Wed, 2 Aug 2023 18:15:58 +0900 Subject: [PATCH 033/729] extract method --- .../Import/ReplayMissingBeatmapScreen.cs | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs index a6215165fb..5707721bde 100644 --- a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs +++ b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs @@ -64,6 +64,8 @@ namespace osu.Game.Screens.Import public ReplayMissingBeatmapScreen(APIBeatmap beatmap, MemoryStream? scoreStream = null) { this.beatmap = beatmap; + beatmapSetInfo = beatmap.BeatmapSet; + this.scoreStream = scoreStream; } @@ -145,21 +147,32 @@ namespace osu.Game.Screens.Import { base.LoadComplete(); - var onlineBeatmapRequest = new GetBeatmapSetRequest(beatmap.OnlineBeatmapSetID); - - onlineBeatmapRequest.Success += res => + if (beatmapSetInfo == null) { - beatmapSetInfo = res; - beatmapPanelContainer.Child = new BeatmapCardNormal(res, allowExpansion: false); - checkForAutomaticDownload(res); - }; + var onlineBeatmapRequest = new GetBeatmapSetRequest(beatmap.OnlineBeatmapSetID); - api.Queue(onlineBeatmapRequest); + onlineBeatmapRequest.Success += res => + { + beatmapSetInfo = res; + updateStatus(); + }; + api.Queue(onlineBeatmapRequest); + } + updateStatus(); realmSubscription = realm.RegisterForNotifications( realm => realm.All().Where(s => !s.DeletePending), beatmapsChanged); } + private void updateStatus() + { + if (beatmapSetInfo == null) return; + + beatmapPanelContainer.Clear(); + beatmapPanelContainer.Child = new BeatmapCardNormal(beatmapSetInfo, allowExpansion: false); + checkForAutomaticDownload(beatmapSetInfo); + } + private void checkForAutomaticDownload(APIBeatmapSet beatmap) { if (!automaticDownload.Current.Value) From 6637a5e7bc39db1083e73453025ce29b1f69ea7e Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Wed, 2 Aug 2023 18:53:27 +0900 Subject: [PATCH 034/729] ensure Performer not null --- osu.Game/Scoring/ScoreImporter.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/osu.Game/Scoring/ScoreImporter.cs b/osu.Game/Scoring/ScoreImporter.cs index ea3bd8f5ae..db4c0aff89 100644 --- a/osu.Game/Scoring/ScoreImporter.cs +++ b/osu.Game/Scoring/ScoreImporter.cs @@ -68,6 +68,12 @@ namespace osu.Game.Scoring private void onMissingBeatmap(LegacyScoreDecoder.BeatmapNotFoundException e) { + if (Performer == null) + { + e.ScoreStream?.Dispose(); + return; + } + var req = new GetBeatmapRequest(new BeatmapInfo { MD5Hash = e.Hash @@ -75,7 +81,7 @@ namespace osu.Game.Scoring req.Success += res => { - Performer?.PerformFromScreen(screen => screen.Push(new ReplayMissingBeatmapScreen(res, e.ScoreStream))); + Performer.PerformFromScreen(screen => screen.Push(new ReplayMissingBeatmapScreen(res, e.ScoreStream))); }; req.Failure += _ => e.ScoreStream?.Dispose(); From 0e7e36f114006c02c46b18b5cc79703e68293a4d Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Wed, 2 Aug 2023 21:53:14 +0900 Subject: [PATCH 035/729] don't passing stream by exception --- osu.Game/Scoring/Legacy/LegacyScoreDecoder.cs | 15 ++------------- osu.Game/Scoring/ScoreImporter.cs | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/osu.Game/Scoring/Legacy/LegacyScoreDecoder.cs b/osu.Game/Scoring/Legacy/LegacyScoreDecoder.cs index a191220b37..8c00110909 100644 --- a/osu.Game/Scoring/Legacy/LegacyScoreDecoder.cs +++ b/osu.Game/Scoring/Legacy/LegacyScoreDecoder.cs @@ -7,7 +7,6 @@ using System; using System.Diagnostics; using System.IO; using System.Linq; -using JetBrains.Annotations; using Newtonsoft.Json; using osu.Game.Beatmaps; using osu.Game.Beatmaps.Formats; @@ -62,7 +61,7 @@ namespace osu.Game.Scoring.Legacy workingBeatmap = GetBeatmap(beatmapHash); if (workingBeatmap is DummyWorkingBeatmap) - throw new BeatmapNotFoundException(beatmapHash, stream); + throw new BeatmapNotFoundException(beatmapHash); scoreInfo.User = new APIUser { Username = sr.ReadString() }; @@ -350,19 +349,9 @@ namespace osu.Game.Scoring.Legacy { public string Hash { get; } - [CanBeNull] - public MemoryStream ScoreStream { get; } - - public BeatmapNotFoundException(string hash, [CanBeNull] Stream scoreStream) + public BeatmapNotFoundException(string hash) { Hash = hash; - - if (scoreStream != null) - { - ScoreStream = new MemoryStream(); - scoreStream.Position = 0; - scoreStream.CopyTo(ScoreStream); - } } } } diff --git a/osu.Game/Scoring/ScoreImporter.cs b/osu.Game/Scoring/ScoreImporter.cs index db4c0aff89..64394800cd 100644 --- a/osu.Game/Scoring/ScoreImporter.cs +++ b/osu.Game/Scoring/ScoreImporter.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.IO; using System.Linq; using System.Threading; using Newtonsoft.Json; @@ -59,19 +60,24 @@ namespace osu.Game.Scoring } catch (LegacyScoreDecoder.BeatmapNotFoundException e) { - onMissingBeatmap(e); + onMissingBeatmap(e, archive, name); Logger.Log($@"Score '{name}' failed to import: no corresponding beatmap with the hash '{e.Hash}' could be found.", LoggingTarget.Database); return null; } } } - private void onMissingBeatmap(LegacyScoreDecoder.BeatmapNotFoundException e) + private void onMissingBeatmap(LegacyScoreDecoder.BeatmapNotFoundException e, ArchiveReader archive, string name) { if (Performer == null) - { - e.ScoreStream?.Dispose(); return; + + var stream = new MemoryStream(); + + // stream will close after exception throw, so fetch the stream again. + using (var scoreStream = archive.GetStream(name)) + { + scoreStream.CopyTo(stream); } var req = new GetBeatmapRequest(new BeatmapInfo @@ -81,10 +87,10 @@ namespace osu.Game.Scoring req.Success += res => { - Performer.PerformFromScreen(screen => screen.Push(new ReplayMissingBeatmapScreen(res, e.ScoreStream))); + Performer.PerformFromScreen(screen => screen.Push(new ReplayMissingBeatmapScreen(res, stream))); }; - req.Failure += _ => e.ScoreStream?.Dispose(); + req.Failure += _ => stream.Dispose(); api.Queue(req); } From 79892865288507e43b12c7b376ec8b7bfddb3ed4 Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Fri, 4 Aug 2023 19:57:25 +0900 Subject: [PATCH 036/729] scoreStream never been null --- osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs index 5707721bde..6fabbd00c8 100644 --- a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs +++ b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs @@ -56,12 +56,12 @@ namespace osu.Game.Screens.Import private ReplayDownloadButton replayDownloadButton = null!; private SettingsCheckbox automaticDownload = null!; - private readonly MemoryStream? scoreStream; + private readonly MemoryStream scoreStream; private readonly APIBeatmap beatmap; private APIBeatmapSet? beatmapSetInfo; - public ReplayMissingBeatmapScreen(APIBeatmap beatmap, MemoryStream? scoreStream = null) + public ReplayMissingBeatmapScreen(APIBeatmap beatmap, MemoryStream scoreStream) { this.beatmap = beatmap; beatmapSetInfo = beatmap.BeatmapSet; @@ -187,7 +187,7 @@ namespace osu.Game.Screens.Import if (beatmapSetInfo == null) return; - if (scoreStream == null || !scoreStream.CanRead) return; + if (!scoreStream.CanRead) return; if (sender.Any(b => b.OnlineID == beatmapSetInfo.OnlineID)) { From 09047538c70629861a2121af5dbe9db04224886d Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Fri, 4 Aug 2023 20:02:22 +0900 Subject: [PATCH 037/729] remove all memory stream dispose --- osu.Game/Scoring/ScoreImporter.cs | 2 -- osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs | 3 --- 2 files changed, 5 deletions(-) diff --git a/osu.Game/Scoring/ScoreImporter.cs b/osu.Game/Scoring/ScoreImporter.cs index 64394800cd..5c354ac3d1 100644 --- a/osu.Game/Scoring/ScoreImporter.cs +++ b/osu.Game/Scoring/ScoreImporter.cs @@ -90,8 +90,6 @@ namespace osu.Game.Scoring Performer.PerformFromScreen(screen => screen.Push(new ReplayMissingBeatmapScreen(res, stream))); }; - req.Failure += _ => stream.Dispose(); - api.Queue(req); } diff --git a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs index 6fabbd00c8..2e0e7a8e3f 100644 --- a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs +++ b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs @@ -196,8 +196,6 @@ namespace osu.Game.Screens.Import scoreManager.Import(progressNotification, new[] { importTask }) .ContinueWith(s => { - scoreStream.Dispose(); - s.GetResultSafely>>().FirstOrDefault()?.PerformRead(score => { Guid scoreid = score.ID; @@ -219,7 +217,6 @@ namespace osu.Game.Screens.Import base.Dispose(isDisposing); realmSubscription?.Dispose(); - scoreStream?.Dispose(); } } } From e7b34cd4da77e9b1de5efd950f5351a3d35b6794 Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Mon, 14 Aug 2023 03:43:16 +0900 Subject: [PATCH 038/729] declare BeatmapSet is not null --- .../Online/TestSceneReplayMissingBeatmap.cs | 21 +++++++------------ .../Import/ReplayMissingBeatmapScreen.cs | 21 ++----------------- 2 files changed, 9 insertions(+), 33 deletions(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneReplayMissingBeatmap.cs b/osu.Game.Tests/Visual/Online/TestSceneReplayMissingBeatmap.cs index a260cc8593..eb84d80051 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneReplayMissingBeatmap.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneReplayMissingBeatmap.cs @@ -21,15 +21,14 @@ namespace osu.Game.Tests.Visual.Online { var beatmap = new APIBeatmap { - OnlineBeatmapSetID = 173612 + OnlineBeatmapSetID = 173612, + BeatmapSet = new APIBeatmapSet + { + OnlineID = 173612 + } }; - var beatmapset = new APIBeatmapSet - { - OnlineID = 173612, - }; - - setupBeatmapResponse(beatmap, beatmapset); + setupBeatmapResponse(beatmap); AddStep("import score", () => { @@ -62,7 +61,7 @@ namespace osu.Game.Tests.Visual.Online AddUntilStep("Replay missing screen not show", () => Game.ScreenStack.CurrentScreen.GetType() != typeof(ReplayMissingBeatmapScreen)); } - private void setupBeatmapResponse(APIBeatmap b, APIBeatmapSet s) + private void setupBeatmapResponse(APIBeatmap b) => AddStep("setup response", () => { dummyAPI.HandleRequest = request => @@ -73,12 +72,6 @@ namespace osu.Game.Tests.Visual.Online return true; } - if (request is GetBeatmapSetRequest getBeatmapSetRequest) - { - getBeatmapSetRequest.TriggerSuccess(s); - return true; - } - return false; }; }); diff --git a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs index 2e0e7a8e3f..ffd6942b9b 100644 --- a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs +++ b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs @@ -18,7 +18,6 @@ using osu.Game.Database; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osu.Game.Online.API; -using osu.Game.Online.API.Requests; using osu.Game.Online.API.Requests.Responses; using osu.Game.Overlays; using osu.Game.Overlays.Settings; @@ -57,14 +56,12 @@ namespace osu.Game.Screens.Import private SettingsCheckbox automaticDownload = null!; private readonly MemoryStream scoreStream; - private readonly APIBeatmap beatmap; - private APIBeatmapSet? beatmapSetInfo; + private readonly APIBeatmapSet beatmapSetInfo; public ReplayMissingBeatmapScreen(APIBeatmap beatmap, MemoryStream scoreStream) { - this.beatmap = beatmap; - beatmapSetInfo = beatmap.BeatmapSet; + beatmapSetInfo = beatmap.BeatmapSet!; this.scoreStream = scoreStream; } @@ -147,18 +144,6 @@ namespace osu.Game.Screens.Import { base.LoadComplete(); - if (beatmapSetInfo == null) - { - var onlineBeatmapRequest = new GetBeatmapSetRequest(beatmap.OnlineBeatmapSetID); - - onlineBeatmapRequest.Success += res => - { - beatmapSetInfo = res; - updateStatus(); - }; - api.Queue(onlineBeatmapRequest); - } - updateStatus(); realmSubscription = realm.RegisterForNotifications( realm => realm.All().Where(s => !s.DeletePending), beatmapsChanged); @@ -185,8 +170,6 @@ namespace osu.Game.Screens.Import { if (changes?.InsertedIndices == null) return; - if (beatmapSetInfo == null) return; - if (!scoreStream.CanRead) return; if (sender.Any(b => b.OnlineID == beatmapSetInfo.OnlineID)) From ec9e7f14a81165f3bdd21eeef6f8fd0f3ea5dae2 Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Tue, 15 Aug 2023 18:51:24 +0900 Subject: [PATCH 039/729] Disable SVs from being visualised in mania editor --- osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs b/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs index f480fa516b..dadd725a2f 100644 --- a/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs +++ b/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using osu.Framework.Graphics; using osuTK; using osu.Game.Beatmaps; +using osu.Game.Configuration; using osu.Game.Rulesets.Mania.UI; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.UI; @@ -19,6 +20,7 @@ namespace osu.Game.Rulesets.Mania.Edit public DrawableManiaEditorRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList? mods) : base(ruleset, beatmap, mods) { + ScrollMethod = ScrollVisualisationMethod.Constant; } protected override Playfield CreatePlayfield() => new ManiaEditorPlayfield(Beatmap.Stages) From 3a3951ebf414aa449319b159e13081e42da60bdd Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Thu, 17 Aug 2023 17:26:00 +0900 Subject: [PATCH 040/729] remove useless api resolved --- osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs index ffd6942b9b..4e1355b52f 100644 --- a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs +++ b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs @@ -34,9 +34,6 @@ namespace osu.Game.Screens.Import [Resolved] private BeatmapModelDownloader beatmapDownloader { get; set; } = null!; - [Resolved] - private IAPIProvider api { get; set; } = null!; - [Resolved] private ScoreManager scoreManager { get; set; } = null!; From 61a1460f093b2d5f2af7c6f4252140718119c0bc Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Thu, 17 Aug 2023 17:27:14 +0900 Subject: [PATCH 041/729] remove useless Using --- osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs index 4e1355b52f..3566b50421 100644 --- a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs +++ b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs @@ -17,7 +17,6 @@ using osu.Game.Configuration; using osu.Game.Database; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; -using osu.Game.Online.API; using osu.Game.Online.API.Requests.Responses; using osu.Game.Overlays; using osu.Game.Overlays.Settings; From 0db82e5286dc301f5b86cab1c19ae639b8e0d0d9 Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Thu, 17 Aug 2023 17:27:50 +0900 Subject: [PATCH 042/729] beatmapSetInfo never be null --- osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs index 3566b50421..614d652f47 100644 --- a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs +++ b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs @@ -147,8 +147,6 @@ namespace osu.Game.Screens.Import private void updateStatus() { - if (beatmapSetInfo == null) return; - beatmapPanelContainer.Clear(); beatmapPanelContainer.Child = new BeatmapCardNormal(beatmapSetInfo, allowExpansion: false); checkForAutomaticDownload(beatmapSetInfo); From b15a54c91428cd8a0af019f6acc17c3b0a21318b Mon Sep 17 00:00:00 2001 From: Jamie Taylor Date: Thu, 17 Aug 2023 11:36:00 +0900 Subject: [PATCH 043/729] Use new overlay pop-in/pop-out samples --- osu.Game/Overlays/ChatOverlay.cs | 3 +++ osu.Game/Overlays/WaveOverlayContainer.cs | 1 + osu.Game/Screens/Select/Options/BeatmapOptionsOverlay.cs | 3 +++ 3 files changed, 7 insertions(+) diff --git a/osu.Game/Overlays/ChatOverlay.cs b/osu.Game/Overlays/ChatOverlay.cs index 87df08ceec..a47d10c565 100644 --- a/osu.Game/Overlays/ChatOverlay.cs +++ b/osu.Game/Overlays/ChatOverlay.cs @@ -55,6 +55,9 @@ namespace osu.Game.Overlays private const float side_bar_width = 190; private const float chat_bar_height = 60; + protected override string PopInSampleName => @"UI/overlay-big-pop-in"; + protected override string PopOutSampleName => @"UI/overlay-big-pop-out"; + [Resolved] private OsuConfigManager config { get; set; } = null!; diff --git a/osu.Game/Overlays/WaveOverlayContainer.cs b/osu.Game/Overlays/WaveOverlayContainer.cs index 153f7f5412..848d9e60b7 100644 --- a/osu.Game/Overlays/WaveOverlayContainer.cs +++ b/osu.Game/Overlays/WaveOverlayContainer.cs @@ -19,6 +19,7 @@ namespace osu.Game.Overlays protected override bool StartHidden => true; protected override string PopInSampleName => "UI/wave-pop-in"; + protected override string PopOutSampleName => "UI/overlay-big-pop-out"; public const float HORIZONTAL_PADDING = 50; diff --git a/osu.Game/Screens/Select/Options/BeatmapOptionsOverlay.cs b/osu.Game/Screens/Select/Options/BeatmapOptionsOverlay.cs index 5753c268d9..7b631ebfea 100644 --- a/osu.Game/Screens/Select/Options/BeatmapOptionsOverlay.cs +++ b/osu.Game/Screens/Select/Options/BeatmapOptionsOverlay.cs @@ -32,6 +32,9 @@ namespace osu.Game.Screens.Select.Options public override bool BlockScreenWideMouse => false; + protected override string PopInSampleName => "SongSelect/options-pop-in"; + protected override string PopOutSampleName => "SongSelect/options-pop-out"; + public BeatmapOptionsOverlay() { AutoSizeAxes = Axes.Y; From 04a1f6a5085e0cc076abba71068d4b8d1031c0ab Mon Sep 17 00:00:00 2001 From: Jamie Taylor Date: Thu, 17 Aug 2023 11:37:07 +0900 Subject: [PATCH 044/729] Add panning to certain overlay pop-in/pop-outs --- .../Containers/OsuFocusedOverlayContainer.cs | 15 +++++++++++---- osu.Game/Overlays/LoginOverlay.cs | 2 ++ osu.Game/Overlays/NotificationOverlay.cs | 2 ++ osu.Game/Overlays/SettingsPanel.cs | 1 + 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs b/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs index f92cfc2306..162c4b6a59 100644 --- a/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs +++ b/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs @@ -24,6 +24,7 @@ namespace osu.Game.Graphics.Containers private Sample samplePopOut; protected virtual string PopInSampleName => "UI/overlay-pop-in"; protected virtual string PopOutSampleName => "UI/overlay-pop-out"; + protected virtual double PopInOutSampleBalance => 0; protected override bool BlockNonPositionalInput => true; @@ -133,15 +134,21 @@ namespace osu.Game.Graphics.Containers return; } - if (didChange) - samplePopIn?.Play(); + if (didChange && samplePopIn != null) + { + samplePopIn.Balance.Value = PopInOutSampleBalance; + samplePopIn.Play(); + } if (BlockScreenWideMouse && DimMainContent) overlayManager?.ShowBlockingOverlay(this); break; case Visibility.Hidden: - if (didChange) - samplePopOut?.Play(); + if (didChange && samplePopOut != null) + { + samplePopOut.Balance.Value = PopInOutSampleBalance; + samplePopOut.Play(); + } if (BlockScreenWideMouse) overlayManager?.HideBlockingOverlay(this); break; diff --git a/osu.Game/Overlays/LoginOverlay.cs b/osu.Game/Overlays/LoginOverlay.cs index a575253e71..8a4bda89d9 100644 --- a/osu.Game/Overlays/LoginOverlay.cs +++ b/osu.Game/Overlays/LoginOverlay.cs @@ -20,6 +20,8 @@ namespace osu.Game.Overlays private const float transition_time = 400; + protected override double PopInOutSampleBalance => OsuGameBase.SFX_STEREO_STRENGTH; + [Cached] private OverlayColourProvider colourProvider = new OverlayColourProvider(OverlayColourScheme.Purple); diff --git a/osu.Game/Overlays/NotificationOverlay.cs b/osu.Game/Overlays/NotificationOverlay.cs index c9d09848f8..ef181830b7 100644 --- a/osu.Game/Overlays/NotificationOverlay.cs +++ b/osu.Game/Overlays/NotificationOverlay.cs @@ -31,6 +31,8 @@ namespace osu.Game.Overlays public LocalisableString Title => NotificationsStrings.HeaderTitle; public LocalisableString Description => NotificationsStrings.HeaderDescription; + protected override double PopInOutSampleBalance => OsuGameBase.SFX_STEREO_STRENGTH; + public const float WIDTH = 320; public const float TRANSITION_LENGTH = 600; diff --git a/osu.Game/Overlays/SettingsPanel.cs b/osu.Game/Overlays/SettingsPanel.cs index d7f39a9d8f..58c56a5514 100644 --- a/osu.Game/Overlays/SettingsPanel.cs +++ b/osu.Game/Overlays/SettingsPanel.cs @@ -56,6 +56,7 @@ namespace osu.Game.Overlays private SeekLimitedSearchTextBox searchTextBox; protected override string PopInSampleName => "UI/settings-pop-in"; + protected override double PopInOutSampleBalance => -OsuGameBase.SFX_STEREO_STRENGTH; private readonly bool showSidebar; From 3d7ba0e18cdc9c739119125243c73a205e3f4fcb Mon Sep 17 00:00:00 2001 From: Jamie Taylor Date: Thu, 17 Aug 2023 17:03:45 +0900 Subject: [PATCH 045/729] Add pop-in/pop-out sfx to more overlays --- .../Collections/ManageCollectionsDialog.cs | 3 +++ .../Graphics/UserInterfaceV2/OsuPopover.cs | 25 ++++++++++++++++++- .../Screens/Edit/Setup/LabelledFileChooser.cs | 3 +++ .../OnlinePlay/Lounge/DrawableLoungeRoom.cs | 2 ++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/osu.Game/Collections/ManageCollectionsDialog.cs b/osu.Game/Collections/ManageCollectionsDialog.cs index 31016b807b..cc0f23d030 100644 --- a/osu.Game/Collections/ManageCollectionsDialog.cs +++ b/osu.Game/Collections/ManageCollectionsDialog.cs @@ -23,6 +23,9 @@ namespace osu.Game.Collections private AudioFilter lowPassFilter = null!; + protected override string PopInSampleName => @"UI/overlay-big-pop-in"; + protected override string PopOutSampleName => @"UI/overlay-big-pop-out"; + public ManageCollectionsDialog() { Anchor = Anchor.Centre; diff --git a/osu.Game/Graphics/UserInterfaceV2/OsuPopover.cs b/osu.Game/Graphics/UserInterfaceV2/OsuPopover.cs index 381193d539..2aa42d0d50 100644 --- a/osu.Game/Graphics/UserInterfaceV2/OsuPopover.cs +++ b/osu.Game/Graphics/UserInterfaceV2/OsuPopover.cs @@ -2,6 +2,8 @@ // See the LICENCE file in the repository root for full licence text. using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; using osu.Framework.Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -21,6 +23,16 @@ namespace osu.Game.Graphics.UserInterfaceV2 private const float fade_duration = 250; private const double scale_duration = 500; + private Sample? samplePopIn; + private Sample? samplePopOut; + protected virtual string PopInSampleName => "UI/overlay-pop-in"; + protected virtual string PopOutSampleName => "UI/overlay-pop-out"; + + // required due to LoadAsyncComplete() calling PopOut() during load - similar workaround to `OsuDropdownMenu` + private bool wasOpened; + + protected virtual bool PlayPopInOutSamples => true; + public OsuPopover(bool withPadding = true) { Content.Padding = withPadding ? new MarginPadding(20) : new MarginPadding(); @@ -38,9 +50,11 @@ namespace osu.Game.Graphics.UserInterfaceV2 } [BackgroundDependencyLoader(true)] - private void load(OverlayColourProvider? colourProvider, OsuColour colours) + private void load(OverlayColourProvider? colourProvider, OsuColour colours, AudioManager audio) { Background.Colour = Arrow.Colour = colourProvider?.Background4 ?? colours.GreySeaFoamDarker; + samplePopIn = audio.Samples.Get(PopInSampleName); + samplePopOut = audio.Samples.Get(PopOutSampleName); } protected override Drawable CreateArrow() => Empty(); @@ -49,12 +63,21 @@ namespace osu.Game.Graphics.UserInterfaceV2 { this.ScaleTo(1, scale_duration, Easing.OutElasticHalf); this.FadeIn(fade_duration, Easing.OutQuint); + + if (PlayPopInOutSamples) + { + samplePopIn?.Play(); + wasOpened = true; + } } protected override void PopOut() { this.ScaleTo(0.7f, scale_duration, Easing.OutQuint); this.FadeOut(fade_duration, Easing.OutQuint); + + if (wasOpened && PlayPopInOutSamples) + samplePopOut?.Play(); } protected override bool OnKeyDown(KeyDownEvent e) diff --git a/osu.Game/Screens/Edit/Setup/LabelledFileChooser.cs b/osu.Game/Screens/Edit/Setup/LabelledFileChooser.cs index d14357e875..61f33c4bdc 100644 --- a/osu.Game/Screens/Edit/Setup/LabelledFileChooser.cs +++ b/osu.Game/Screens/Edit/Setup/LabelledFileChooser.cs @@ -114,6 +114,9 @@ namespace osu.Game.Screens.Edit.Setup private partial class FileChooserPopover : OsuPopover { + protected override string PopInSampleName => "UI/overlay-big-pop-in"; + protected override string PopOutSampleName => "UI/overlay-big-pop-out"; + public FileChooserPopover(string[] handledExtensions, Bindable currentFile, string? chooserPath) { Child = new Container diff --git a/osu.Game/Screens/OnlinePlay/Lounge/DrawableLoungeRoom.cs b/osu.Game/Screens/OnlinePlay/Lounge/DrawableLoungeRoom.cs index 70e4b2a589..030408de84 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/DrawableLoungeRoom.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/DrawableLoungeRoom.cs @@ -191,6 +191,8 @@ namespace osu.Game.Screens.OnlinePlay.Lounge protected override bool BlockNonPositionalInput => true; + protected override bool PlayPopInOutSamples => false; + public PasswordEntryPopover(Room room) { this.room = room; From d10d7b6ea41f994c586725e127647b171634fae9 Mon Sep 17 00:00:00 2001 From: Jamie Taylor Date: Thu, 17 Aug 2023 17:07:02 +0900 Subject: [PATCH 046/729] Change some component samples to go better with overlay pop-in samples --- osu.Game/Graphics/UserInterface/OsuAnimatedButton.cs | 4 ++-- osu.Game/Graphics/UserInterface/ShearedToggleButton.cs | 5 +++++ osu.Game/Overlays/Mods/AddPresetButton.cs | 2 ++ .../Screens/Edit/Compose/Components/BeatDivisorControl.cs | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/osu.Game/Graphics/UserInterface/OsuAnimatedButton.cs b/osu.Game/Graphics/UserInterface/OsuAnimatedButton.cs index de4df96942..0eec04541c 100644 --- a/osu.Game/Graphics/UserInterface/OsuAnimatedButton.cs +++ b/osu.Game/Graphics/UserInterface/OsuAnimatedButton.cs @@ -46,8 +46,8 @@ namespace osu.Game.Graphics.UserInterface private readonly Container content; private readonly Box hover; - public OsuAnimatedButton() - : base(HoverSampleSet.Button) + public OsuAnimatedButton(HoverSampleSet sampleSet = HoverSampleSet.Button) + : base(sampleSet) { base.Content.Add(content = new Container { diff --git a/osu.Game/Graphics/UserInterface/ShearedToggleButton.cs b/osu.Game/Graphics/UserInterface/ShearedToggleButton.cs index d5e0abe9d8..07ee26749a 100644 --- a/osu.Game/Graphics/UserInterface/ShearedToggleButton.cs +++ b/osu.Game/Graphics/UserInterface/ShearedToggleButton.cs @@ -14,6 +14,8 @@ namespace osu.Game.Graphics.UserInterface private Sample? sampleOff; private Sample? sampleOn; + protected virtual bool PlayClickSampleOnly => false; + /// /// Whether this button is currently toggled to an active state. /// @@ -68,6 +70,9 @@ namespace osu.Game.Graphics.UserInterface { sampleClick?.Play(); + if (PlayClickSampleOnly) + return; + if (Active.Value) sampleOn?.Play(); else diff --git a/osu.Game/Overlays/Mods/AddPresetButton.cs b/osu.Game/Overlays/Mods/AddPresetButton.cs index 731079d1d9..9063fd54f5 100644 --- a/osu.Game/Overlays/Mods/AddPresetButton.cs +++ b/osu.Game/Overlays/Mods/AddPresetButton.cs @@ -18,6 +18,8 @@ namespace osu.Game.Overlays.Mods { public partial class AddPresetButton : ShearedToggleButton, IHasPopover { + protected override bool PlayClickSampleOnly => true; + [Resolved] private OsuColour colours { get; set; } = null!; diff --git a/osu.Game/Screens/Edit/Compose/Components/BeatDivisorControl.cs b/osu.Game/Screens/Edit/Compose/Components/BeatDivisorControl.cs index 59b0bd1785..e36f1e9cad 100644 --- a/osu.Game/Screens/Edit/Compose/Components/BeatDivisorControl.cs +++ b/osu.Game/Screens/Edit/Compose/Components/BeatDivisorControl.cs @@ -262,6 +262,7 @@ namespace osu.Game.Screens.Edit.Compose.Components private readonly OsuSpriteText divisorText; public DivisorDisplay() + : base(HoverSampleSet.Default) { Anchor = Anchor.Centre; Origin = Anchor.Centre; From c811546868cb8754a32049bdfbd9bc22ab0be171 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 17 Aug 2023 21:09:50 +0900 Subject: [PATCH 047/729] Update resources --- osu.Game/osu.Game.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index a5a9387e36..a2afcd7a9f 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -37,7 +37,7 @@ - + From fc2fac577fcdb1d329b83e2cb2e30fc5e7ea78ac Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 18 Aug 2023 17:05:25 +0900 Subject: [PATCH 048/729] Inverse and xmldoc `ShearedToggleButton` sample allowance bool --- .../UserInterface/ShearedToggleButton.cs | 20 +++++++++++-------- osu.Game/Overlays/Mods/AddPresetButton.cs | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/osu.Game/Graphics/UserInterface/ShearedToggleButton.cs b/osu.Game/Graphics/UserInterface/ShearedToggleButton.cs index 07ee26749a..05ed531d02 100644 --- a/osu.Game/Graphics/UserInterface/ShearedToggleButton.cs +++ b/osu.Game/Graphics/UserInterface/ShearedToggleButton.cs @@ -14,7 +14,11 @@ namespace osu.Game.Graphics.UserInterface private Sample? sampleOff; private Sample? sampleOn; - protected virtual bool PlayClickSampleOnly => false; + /// + /// Sheared toggle buttons by default play two samples when toggled: a click and a toggle (on/off). + /// Sometimes this might be too much. Setting this to false will silence the toggle sound. + /// + protected virtual bool PlayToggleSamples => true; /// /// Whether this button is currently toggled to an active state. @@ -70,13 +74,13 @@ namespace osu.Game.Graphics.UserInterface { sampleClick?.Play(); - if (PlayClickSampleOnly) - return; - - if (Active.Value) - sampleOn?.Play(); - else - sampleOff?.Play(); + if (PlayToggleSamples) + { + if (Active.Value) + sampleOn?.Play(); + else + sampleOff?.Play(); + } } } } diff --git a/osu.Game/Overlays/Mods/AddPresetButton.cs b/osu.Game/Overlays/Mods/AddPresetButton.cs index 9063fd54f5..276afd9bec 100644 --- a/osu.Game/Overlays/Mods/AddPresetButton.cs +++ b/osu.Game/Overlays/Mods/AddPresetButton.cs @@ -18,7 +18,7 @@ namespace osu.Game.Overlays.Mods { public partial class AddPresetButton : ShearedToggleButton, IHasPopover { - protected override bool PlayClickSampleOnly => true; + protected override bool PlayToggleSamples => false; [Resolved] private OsuColour colours { get; set; } = null!; From 75750957c7cd93a2cac7d0090d146c214239eed2 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 18 Aug 2023 17:09:13 +0900 Subject: [PATCH 049/729] Add note about why pop in samples are disabled for `PasswordEntryPopover` --- osu.Game/Screens/OnlinePlay/Lounge/DrawableLoungeRoom.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/Screens/OnlinePlay/Lounge/DrawableLoungeRoom.cs b/osu.Game/Screens/OnlinePlay/Lounge/DrawableLoungeRoom.cs index 030408de84..a45583a2ec 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/DrawableLoungeRoom.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/DrawableLoungeRoom.cs @@ -191,6 +191,8 @@ namespace osu.Game.Screens.OnlinePlay.Lounge protected override bool BlockNonPositionalInput => true; + // When a room is clicked, it already plays a click sound, which clashes pretty badly with the pop in sound. + // Dunno about this one. I'd probably remove the click sound from the panel in cases they are password protected and play these pop in / out sounds. protected override bool PlayPopInOutSamples => false; public PasswordEntryPopover(Room room) From a2fd7707a16bccb055dd25997644173198851633 Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Tue, 15 Aug 2023 20:38:17 +0900 Subject: [PATCH 050/729] Allow toggling SVs in the editor --- .../UI/DrawableCatchRuleset.cs | 3 +- .../Skinning/ManiaSkinnableTestScene.cs | 2 +- .../Edit/DrawableManiaEditorRuleset.cs | 17 ++++++- .../Edit/ManiaHitObjectComposer.cs | 28 +++++++++- .../Mods/ManiaModConstantSpeed.cs | 2 +- .../UI/DrawableManiaRuleset.cs | 17 ++----- .../UI/DrawableTaikoRuleset.cs | 3 +- .../TestSceneDrawableScrollingRuleset.cs | 3 +- .../UI/Scrolling/DrawableScrollingRuleset.cs | 51 ++++++++++++------- .../Rulesets/UI/Scrolling/IScrollingInfo.cs | 4 +- .../Scrolling/ScrollingHitObjectContainer.cs | 14 +++-- .../TernaryButtons/DrawableTernaryButton.cs | 2 +- .../Tests/Visual/ScrollingTestContainer.cs | 2 +- 13 files changed, 98 insertions(+), 50 deletions(-) diff --git a/osu.Game.Rulesets.Catch/UI/DrawableCatchRuleset.cs b/osu.Game.Rulesets.Catch/UI/DrawableCatchRuleset.cs index 7930a07551..f0a327d7ac 100644 --- a/osu.Game.Rulesets.Catch/UI/DrawableCatchRuleset.cs +++ b/osu.Game.Rulesets.Catch/UI/DrawableCatchRuleset.cs @@ -21,8 +21,6 @@ namespace osu.Game.Rulesets.Catch.UI { public partial class DrawableCatchRuleset : DrawableScrollingRuleset { - protected override ScrollVisualisationMethod VisualisationMethod => ScrollVisualisationMethod.Constant; - protected override bool UserScrollSpeedAdjustment => false; public DrawableCatchRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList? mods = null) @@ -30,6 +28,7 @@ namespace osu.Game.Rulesets.Catch.UI { Direction.Value = ScrollingDirection.Down; TimeRange.Value = GetTimeRange(beatmap.Difficulty.ApproachRate); + VisualisationMethod = ScrollVisualisationMethod.Constant; } [BackgroundDependencyLoader] diff --git a/osu.Game.Rulesets.Mania.Tests/Skinning/ManiaSkinnableTestScene.cs b/osu.Game.Rulesets.Mania.Tests/Skinning/ManiaSkinnableTestScene.cs index ba0c97a121..abf01aa4a4 100644 --- a/osu.Game.Rulesets.Mania.Tests/Skinning/ManiaSkinnableTestScene.cs +++ b/osu.Game.Rulesets.Mania.Tests/Skinning/ManiaSkinnableTestScene.cs @@ -58,7 +58,7 @@ namespace osu.Game.Rulesets.Mania.Tests.Skinning IBindable IScrollingInfo.Direction => Direction; IBindable IScrollingInfo.TimeRange { get; } = new Bindable(5000); - IScrollAlgorithm IScrollingInfo.Algorithm { get; } = new ConstantScrollAlgorithm(); + IBindable IScrollingInfo.Algorithm { get; } = new Bindable(new ConstantScrollAlgorithm()); } } } diff --git a/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs b/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs index dadd725a2f..013dd3dcbd 100644 --- a/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs +++ b/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs @@ -2,10 +2,12 @@ // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; +using osu.Framework.Bindables; using osu.Framework.Graphics; using osuTK; using osu.Game.Beatmaps; using osu.Game.Configuration; +using osu.Game.Graphics.UserInterface; using osu.Game.Rulesets.Mania.UI; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.UI; @@ -15,12 +17,25 @@ namespace osu.Game.Rulesets.Mania.Edit { public partial class DrawableManiaEditorRuleset : DrawableManiaRuleset { + public readonly IBindable ShowSpeedChanges = new Bindable(); + public new IScrollingInfo ScrollingInfo => base.ScrollingInfo; public DrawableManiaEditorRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList? mods) : base(ruleset, beatmap, mods) { - ScrollMethod = ScrollVisualisationMethod.Constant; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + ShowSpeedChanges.BindValueChanged(state => + { + VisualisationMethod = state.NewValue == TernaryState.True + ? ScrollVisualisationMethod.Sequential + : ScrollVisualisationMethod.Constant; + }, true); } protected override Playfield CreatePlayfield() => new ManiaEditorPlayfield(Beatmap.Stages) diff --git a/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs b/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs index 5e577a2964..44e238efac 100644 --- a/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs +++ b/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs @@ -6,8 +6,13 @@ using System.Collections.Generic; using System.Linq; using osu.Framework.Allocation; +using osu.Framework.Bindables; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Sprites; using osu.Framework.Input; using osu.Game.Beatmaps; +using osu.Game.Graphics.UserInterface; using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Edit.Tools; using osu.Game.Rulesets.Mania.Objects; @@ -16,6 +21,7 @@ using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.UI; using osu.Game.Rulesets.UI.Scrolling; +using osu.Game.Screens.Edit.Components.TernaryButtons; using osu.Game.Screens.Edit.Compose.Components; using osuTK; @@ -23,6 +29,8 @@ namespace osu.Game.Rulesets.Mania.Edit { public partial class ManiaHitObjectComposer : HitObjectComposer { + private readonly Bindable showSpeedChanges = new Bindable(); + private DrawableManiaEditorRuleset drawableRuleset; private ManiaBeatSnapGrid beatSnapGrid; private InputManager inputManager; @@ -36,6 +44,21 @@ namespace osu.Game.Rulesets.Mania.Edit private void load() { AddInternal(beatSnapGrid = new ManiaBeatSnapGrid()); + + LeftToolbox.Add(new EditorToolboxGroup("playfield") + { + Child = new FillFlowContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Direction = FillDirection.Vertical, + Spacing = new Vector2(0, 5), + Children = new[] + { + new DrawableTernaryButton(new TernaryButton(showSpeedChanges, "Show speed changes", () => new SpriteIcon { Icon = FontAwesome.Solid.TachometerAlt })) + } + }, + }); } protected override void LoadComplete() @@ -59,7 +82,10 @@ namespace osu.Game.Rulesets.Mania.Edit protected override DrawableRuleset CreateDrawableRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList mods = null) { - drawableRuleset = new DrawableManiaEditorRuleset(ruleset, beatmap, mods); + drawableRuleset = new DrawableManiaEditorRuleset(ruleset, beatmap, mods) + { + ShowSpeedChanges = { BindTarget = showSpeedChanges } + }; // This is the earliest we can cache the scrolling info to ourselves, before masks are added to the hierarchy and inject it dependencies.CacheAs(drawableRuleset.ScrollingInfo); diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModConstantSpeed.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModConstantSpeed.cs index 66269f5572..d8e6bcd424 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModConstantSpeed.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModConstantSpeed.cs @@ -28,7 +28,7 @@ namespace osu.Game.Rulesets.Mania.Mods public void ApplyToDrawableRuleset(DrawableRuleset drawableRuleset) { var maniaRuleset = (DrawableManiaRuleset)drawableRuleset; - maniaRuleset.ScrollMethod = ScrollVisualisationMethod.Constant; + maniaRuleset.VisualisationMethod = ScrollVisualisationMethod.Constant; } } } diff --git a/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs b/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs index 2d373c0471..eb99434e04 100644 --- a/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs @@ -3,7 +3,6 @@ #nullable disable -using System; using System.Collections.Generic; using System.Linq; using osu.Framework.Allocation; @@ -52,22 +51,12 @@ namespace osu.Game.Rulesets.Mania.UI protected new ManiaRulesetConfigManager Config => (ManiaRulesetConfigManager)base.Config; - public ScrollVisualisationMethod ScrollMethod + public new ScrollVisualisationMethod VisualisationMethod { - get => scrollMethod; - set - { - if (IsLoaded) - throw new InvalidOperationException($"Can't alter {nameof(ScrollMethod)} after ruleset is already loaded"); - - scrollMethod = value; - } + get => base.VisualisationMethod; + set => base.VisualisationMethod = value; } - private ScrollVisualisationMethod scrollMethod = ScrollVisualisationMethod.Sequential; - - protected override ScrollVisualisationMethod VisualisationMethod => scrollMethod; - private readonly Bindable configDirection = new Bindable(); private readonly BindableInt configScrollSpeed = new BindableInt(); private double smoothTimeRange; diff --git a/osu.Game.Rulesets.Taiko/UI/DrawableTaikoRuleset.cs b/osu.Game.Rulesets.Taiko/UI/DrawableTaikoRuleset.cs index 64d406a308..979e03f201 100644 --- a/osu.Game.Rulesets.Taiko/UI/DrawableTaikoRuleset.cs +++ b/osu.Game.Rulesets.Taiko/UI/DrawableTaikoRuleset.cs @@ -35,8 +35,6 @@ namespace osu.Game.Rulesets.Taiko.UI public new TaikoInputManager KeyBindingInputManager => (TaikoInputManager)base.KeyBindingInputManager; - protected override ScrollVisualisationMethod VisualisationMethod => ScrollVisualisationMethod.Overlapping; - protected override bool UserScrollSpeedAdjustment => false; private SkinnableDrawable scroller; @@ -45,6 +43,7 @@ namespace osu.Game.Rulesets.Taiko.UI : base(ruleset, beatmap, mods) { Direction.Value = ScrollingDirection.Left; + VisualisationMethod = ScrollVisualisationMethod.Overlapping; } [BackgroundDependencyLoader] diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneDrawableScrollingRuleset.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneDrawableScrollingRuleset.cs index 287b7d43b4..4c898feb48 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneDrawableScrollingRuleset.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneDrawableScrollingRuleset.cs @@ -311,14 +311,13 @@ namespace osu.Game.Tests.Visual.Gameplay protected override bool RelativeScaleBeatLengths => RelativeScaleBeatLengthsOverride; - protected override ScrollVisualisationMethod VisualisationMethod => ScrollVisualisationMethod.Overlapping; - public new Bindable TimeRange => base.TimeRange; public TestDrawableScrollingRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList mods = null) : base(ruleset, beatmap, mods) { TimeRange.Value = time_range; + VisualisationMethod = ScrollVisualisationMethod.Overlapping; } public override DrawableHitObject CreateDrawableRepresentation(TestHitObject h) diff --git a/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs b/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs index 4c7564b791..d082d26792 100644 --- a/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs +++ b/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs @@ -64,8 +64,6 @@ namespace osu.Game.Rulesets.UI.Scrolling MaxValue = time_span_max }; - protected virtual ScrollVisualisationMethod VisualisationMethod => ScrollVisualisationMethod.Sequential; - ScrollVisualisationMethod IDrawableScrollingRuleset.VisualisationMethod => VisualisationMethod; /// @@ -99,20 +97,7 @@ namespace osu.Game.Rulesets.UI.Scrolling [BackgroundDependencyLoader] private void load() { - switch (VisualisationMethod) - { - case ScrollVisualisationMethod.Sequential: - scrollingInfo.Algorithm = new SequentialScrollAlgorithm(ControlPoints); - break; - - case ScrollVisualisationMethod.Overlapping: - scrollingInfo.Algorithm = new OverlappingScrollAlgorithm(ControlPoints); - break; - - case ScrollVisualisationMethod.Constant: - scrollingInfo.Algorithm = new ConstantScrollAlgorithm(); - break; - } + updateScrollAlgorithm(); double lastObjectTime = Beatmap.HitObjects.Any() ? Beatmap.GetLastObjectTime() : double.MaxValue; double baseBeatLength = TimingControlPoint.DEFAULT_BEAT_LENGTH; @@ -178,6 +163,36 @@ namespace osu.Game.Rulesets.UI.Scrolling throw new ArgumentException($"{nameof(Playfield)} must be a {nameof(ScrollingPlayfield)} when using {nameof(DrawableScrollingRuleset)}."); } + private ScrollVisualisationMethod visualisationMethod = ScrollVisualisationMethod.Sequential; + + protected ScrollVisualisationMethod VisualisationMethod + { + get => visualisationMethod; + set + { + visualisationMethod = value; + updateScrollAlgorithm(); + } + } + + private void updateScrollAlgorithm() + { + switch (VisualisationMethod) + { + case ScrollVisualisationMethod.Sequential: + scrollingInfo.Algorithm.Value = new SequentialScrollAlgorithm(ControlPoints); + break; + + case ScrollVisualisationMethod.Overlapping: + scrollingInfo.Algorithm.Value = new OverlappingScrollAlgorithm(ControlPoints); + break; + + case ScrollVisualisationMethod.Constant: + scrollingInfo.Algorithm.Value = new ConstantScrollAlgorithm(); + break; + } + } + /// /// Adjusts the scroll speed of s. /// @@ -217,7 +232,9 @@ namespace osu.Game.Rulesets.UI.Scrolling public IBindable TimeRange { get; } = new BindableDouble(); - public IScrollAlgorithm Algorithm { get; set; } + public readonly Bindable Algorithm = new Bindable(new ConstantScrollAlgorithm()); + + IBindable IScrollingInfo.Algorithm => Algorithm; } } } diff --git a/osu.Game/Rulesets/UI/Scrolling/IScrollingInfo.cs b/osu.Game/Rulesets/UI/Scrolling/IScrollingInfo.cs index cd85932599..4a79c1a447 100644 --- a/osu.Game/Rulesets/UI/Scrolling/IScrollingInfo.cs +++ b/osu.Game/Rulesets/UI/Scrolling/IScrollingInfo.cs @@ -15,13 +15,13 @@ namespace osu.Game.Rulesets.UI.Scrolling IBindable Direction { get; } /// - /// + /// The span of time that is visible by the length of the scrolling axes. /// IBindable TimeRange { get; } /// /// The algorithm which controls positions and sizes. /// - IScrollAlgorithm Algorithm { get; } + IBindable Algorithm { get; } } } diff --git a/osu.Game/Rulesets/UI/Scrolling/ScrollingHitObjectContainer.cs b/osu.Game/Rulesets/UI/Scrolling/ScrollingHitObjectContainer.cs index b93a427196..129918da14 100644 --- a/osu.Game/Rulesets/UI/Scrolling/ScrollingHitObjectContainer.cs +++ b/osu.Game/Rulesets/UI/Scrolling/ScrollingHitObjectContainer.cs @@ -13,6 +13,7 @@ using osu.Framework.Layout; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Objects.Types; +using osu.Game.Rulesets.UI.Scrolling.Algorithms; using osuTK; namespace osu.Game.Rulesets.UI.Scrolling @@ -21,6 +22,7 @@ namespace osu.Game.Rulesets.UI.Scrolling { private readonly IBindable timeRange = new BindableDouble(); private readonly IBindable direction = new Bindable(); + private readonly IBindable algorithm = new Bindable(); /// /// Whether the scrolling direction is horizontal or vertical. @@ -59,9 +61,11 @@ namespace osu.Game.Rulesets.UI.Scrolling { direction.BindTo(scrollingInfo.Direction); timeRange.BindTo(scrollingInfo.TimeRange); + algorithm.BindTo(scrollingInfo.Algorithm); direction.ValueChanged += _ => layoutCache.Invalidate(); timeRange.ValueChanged += _ => layoutCache.Invalidate(); + algorithm.ValueChanged += _ => layoutCache.Invalidate(); } /// @@ -73,7 +77,7 @@ namespace osu.Game.Rulesets.UI.Scrolling public double TimeAtPosition(float localPosition, double currentTime) { float scrollPosition = axisInverted ? -localPosition : localPosition; - return scrollingInfo.Algorithm.TimeAt(scrollPosition, currentTime, timeRange.Value, scrollLength); + return algorithm.Value.TimeAt(scrollPosition, currentTime, timeRange.Value, scrollLength); } /// @@ -95,7 +99,7 @@ namespace osu.Game.Rulesets.UI.Scrolling /// public float PositionAtTime(double time, double currentTime, double? originTime = null) { - float scrollPosition = scrollingInfo.Algorithm.PositionAt(time, currentTime, timeRange.Value, scrollLength, originTime); + float scrollPosition = algorithm.Value.PositionAt(time, currentTime, timeRange.Value, scrollLength, originTime); return axisInverted ? -scrollPosition : scrollPosition; } @@ -122,7 +126,7 @@ namespace osu.Game.Rulesets.UI.Scrolling /// public float LengthAtTime(double startTime, double endTime) { - return scrollingInfo.Algorithm.GetLength(startTime, endTime, timeRange.Value, scrollLength); + return algorithm.Value.GetLength(startTime, endTime, timeRange.Value, scrollLength); } private float scrollLength => scrollingAxis == Direction.Horizontal ? DrawWidth : DrawHeight; @@ -169,7 +173,7 @@ namespace osu.Game.Rulesets.UI.Scrolling foreach (var entry in Entries) setComputedLifetimeStart(entry); - scrollingInfo.Algorithm.Reset(); + algorithm.Value.Reset(); layoutCache.Validate(); } @@ -224,7 +228,7 @@ namespace osu.Game.Rulesets.UI.Scrolling break; } - return scrollingInfo.Algorithm.GetDisplayStartTime(entry.HitObject.StartTime, startOffset, timeRange.Value, scrollLength); + return algorithm.Value.GetDisplayStartTime(entry.HitObject.StartTime, startOffset, timeRange.Value, scrollLength); } private void setComputedLifetimeStart(HitObjectLifetimeEntry entry) diff --git a/osu.Game/Screens/Edit/Components/TernaryButtons/DrawableTernaryButton.cs b/osu.Game/Screens/Edit/Components/TernaryButtons/DrawableTernaryButton.cs index 873551db77..95d5dd36d8 100644 --- a/osu.Game/Screens/Edit/Components/TernaryButtons/DrawableTernaryButton.cs +++ b/osu.Game/Screens/Edit/Components/TernaryButtons/DrawableTernaryButton.cs @@ -14,7 +14,7 @@ using osuTK.Graphics; namespace osu.Game.Screens.Edit.Components.TernaryButtons { - internal partial class DrawableTernaryButton : OsuButton + public partial class DrawableTernaryButton : OsuButton { private Color4 defaultBackgroundColour; private Color4 defaultIconColour; diff --git a/osu.Game/Tests/Visual/ScrollingTestContainer.cs b/osu.Game/Tests/Visual/ScrollingTestContainer.cs index b8b39e16b5..bce4299688 100644 --- a/osu.Game/Tests/Visual/ScrollingTestContainer.cs +++ b/osu.Game/Tests/Visual/ScrollingTestContainer.cs @@ -58,7 +58,7 @@ namespace osu.Game.Tests.Visual IBindable IScrollingInfo.TimeRange => TimeRange; public readonly TestScrollAlgorithm Algorithm = new TestScrollAlgorithm(); - IScrollAlgorithm IScrollingInfo.Algorithm => Algorithm; + IBindable IScrollingInfo.Algorithm => new Bindable(Algorithm); } public class TestScrollAlgorithm : IScrollAlgorithm From d2798c7a1ca1d9c79438fd8319662b5aba098c4e Mon Sep 17 00:00:00 2001 From: Wleter Date: Sun, 20 Aug 2023 17:55:19 +0200 Subject: [PATCH 051/729] don't allow negative scaling --- osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs index 72216f040e..a952cf3035 100644 --- a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs +++ b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs @@ -71,6 +71,9 @@ namespace osu.Game.Overlays.SkinEditor scale.Y = scale.X / selectionRect.Width * selectionRect.Height; } + // If scaling reverses the selection, don't scale. + if (adjustedRect.Width + scale.X < 0 || adjustedRect.Height + scale.Y < 0) return true; + if (anchor.HasFlagFast(Anchor.x0)) adjustedRect.X -= scale.X; if (anchor.HasFlagFast(Anchor.y0)) adjustedRect.Y -= scale.Y; @@ -79,8 +82,8 @@ namespace osu.Game.Overlays.SkinEditor // scale adjust applied to each individual item should match that of the quad itself. var scaledDelta = new Vector2( - MathF.Max(adjustedRect.Width / selectionRect.Width, 0), - MathF.Max(adjustedRect.Height / selectionRect.Height, 0) + adjustedRect.Width / selectionRect.Width, + adjustedRect.Height / selectionRect.Height ); foreach (var b in SelectedBlueprints) From 9f4f81c150895ddc08bb4680bbcbd981a03f9d0d Mon Sep 17 00:00:00 2001 From: Wleter Date: Mon, 21 Aug 2023 19:36:11 +0200 Subject: [PATCH 052/729] accumulating negative scaling --- .../SkinEditor/SkinSelectionHandler.cs | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs index a952cf3035..c90a1d8edf 100644 --- a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs +++ b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs @@ -31,6 +31,8 @@ namespace osu.Game.Overlays.SkinEditor UpdatePosition = updateDrawablePosition }; + private float accumulatedNegativeScaling; + public override bool HandleScale(Vector2 scale, Anchor anchor) { // convert scale to screen space @@ -71,8 +73,25 @@ namespace osu.Game.Overlays.SkinEditor scale.Y = scale.X / selectionRect.Width * selectionRect.Height; } - // If scaling reverses the selection, don't scale. - if (adjustedRect.Width + scale.X < 0 || adjustedRect.Height + scale.Y < 0) return true; + // If scaling reverses the selection, don't scale and accumulate the amount of scaling. + if (adjustedRect.Width + scale.X < 0 || adjustedRect.Height + scale.Y < 0) + { + accumulatedNegativeScaling += scale.Length; // - new Vector2(selectionRect.Width, selectionRect.Height).Length; + + return true; + } + + // Compensate for accumulated negative scaling. + if (Precision.AlmostBigger(accumulatedNegativeScaling, 0) && !Precision.AlmostEquals(accumulatedNegativeScaling, 0)) + { + float length = scale.Length; + accumulatedNegativeScaling -= length; + + // If the accumulated negative scaling is still positive, don't scale. + if (Precision.AlmostBigger(accumulatedNegativeScaling, 0)) return true; + scale *= Math.Abs(accumulatedNegativeScaling) / length; + accumulatedNegativeScaling = 0; + } if (anchor.HasFlagFast(Anchor.x0)) adjustedRect.X -= scale.X; if (anchor.HasFlagFast(Anchor.y0)) adjustedRect.Y -= scale.Y; @@ -150,6 +169,12 @@ namespace osu.Game.Overlays.SkinEditor public static void ApplyClosestAnchor(Drawable drawable) => applyAnchor(drawable, getClosestAnchor(drawable)); + protected override void OnOperationEnded() + { + base.OnOperationEnded(); + accumulatedNegativeScaling = 0; + } + protected override void OnSelectionChanged() { base.OnSelectionChanged(); From e321303ef665a623436a9bf0e04cf91aebd3323b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 22 Aug 2023 12:32:42 +0900 Subject: [PATCH 053/729] Add application category type to enable game mode on new macOS versions --- osu.iOS/Info.plist | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/osu.iOS/Info.plist b/osu.iOS/Info.plist index 0ce1d952d0..cf51fe995b 100644 --- a/osu.iOS/Info.plist +++ b/osu.iOS/Info.plist @@ -34,9 +34,9 @@ CADisableMinimumFrameDurationOnPhone NSCameraUsageDescription - We don't really use the camera. + We don't really use the camera. NSMicrophoneUsageDescription - We don't really use the microphone. + We don't really use the microphone. UISupportedInterfaceOrientations UIInterfaceOrientationLandscapeRight @@ -130,5 +130,7 @@ Editor + LSApplicationCategoryType + public.app-category.music-games From 290d18ad690accc2a54c3290e3403f6c2534fb45 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 22 Aug 2023 17:31:19 +0900 Subject: [PATCH 054/729] Split out difficulties in beatmap carousel in a bit of a hacky way Seems like the simplest path forward for now, without a full rewrite. --- osu.Game/Screens/Select/BeatmapCarousel.cs | 82 ++++++++++++++++------ osu.Game/Screens/Select/FilterCriteria.cs | 5 ++ 2 files changed, 65 insertions(+), 22 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 9af9a0ce72..d1a9b4176b 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -78,6 +78,8 @@ namespace osu.Game.Screens.Select private CarouselBeatmapSet? selectedBeatmapSet; + private IEnumerable originalBeatmapSetsDetached = Enumerable.Empty(); + /// /// Raised when the is changed. /// @@ -127,13 +129,29 @@ namespace osu.Game.Screens.Select private void loadBeatmapSets(IEnumerable beatmapSets) { + originalBeatmapSetsDetached = beatmapSets.Detach(); + CarouselRoot newRoot = new CarouselRoot(this); - newRoot.AddItems(beatmapSets.Select(s => createCarouselSet(s.Detach())).OfType()); + if (beatmapsSplitOut) + { + var carouselBeatmapSets = originalBeatmapSetsDetached.SelectMany(s => s.Beatmaps).Select(b => + { + var set = new BeatmapSetInfo(new[] { b }); + return createCarouselSet(set); + }).OfType(); + + newRoot.AddItems(carouselBeatmapSets); + } + else + { + var carouselBeatmapSets = originalBeatmapSetsDetached.Select(createCarouselSet).OfType(); + newRoot.AddItems(carouselBeatmapSets); + } root = newRoot; - if (selectedBeatmapSet != null && !beatmapSets.Contains(selectedBeatmapSet.BeatmapSet)) + if (selectedBeatmapSet != null && !originalBeatmapSetsDetached.Contains(selectedBeatmapSet.BeatmapSet)) selectedBeatmapSet = null; Scroll.Clear(false); @@ -330,8 +348,8 @@ namespace osu.Game.Screens.Select // Only require to action here if the beatmap is missing. // This avoids processing these events unnecessarily when new beatmaps are imported, for example. - if (root.BeatmapSetsByID.TryGetValue(beatmapSet.ID, out var existingSet) - && existingSet.BeatmapSet.Beatmaps.All(b => b.ID != beatmapInfo.ID)) + if (root.BeatmapSetsByID.TryGetValue(beatmapSet.ID, out var existingSets) + && existingSets.SelectMany(s => s.Beatmaps).All(b => b.BeatmapInfo.ID != beatmapInfo.ID)) { UpdateBeatmapSet(beatmapSet.Detach()); } @@ -345,15 +363,18 @@ namespace osu.Game.Screens.Select private void removeBeatmapSet(Guid beatmapSetID) => Schedule(() => { - if (!root.BeatmapSetsByID.TryGetValue(beatmapSetID, out var existingSet)) + if (!root.BeatmapSetsByID.TryGetValue(beatmapSetID, out var existingSets)) return; - foreach (var beatmap in existingSet.Beatmaps) - randomSelectedBeatmaps.Remove(beatmap); + foreach (var set in existingSets) + { + foreach (var beatmap in set.Beatmaps) + randomSelectedBeatmaps.Remove(beatmap); + previouslyVisitedRandomSets.Remove(set); - previouslyVisitedRandomSets.Remove(existingSet); + root.RemoveItem(set); + } - root.RemoveItem(existingSet); itemsCache.Invalidate(); if (!Scroll.UserScrolling) @@ -371,13 +392,16 @@ namespace osu.Game.Screens.Select previouslySelectedID = selectedBeatmap?.BeatmapInfo.ID; var newSet = createCarouselSet(beatmapSet); - var removedSet = root.RemoveChild(beatmapSet.ID); + var removedSets = root.RemoveChild(beatmapSet.ID); - // If we don't remove this here, it may remain in a hidden state until scrolled off screen. - // Doesn't really affect anything during actual user interaction, but makes testing annoying. - var removedDrawable = Scroll.FirstOrDefault(c => c.Item == removedSet); - if (removedDrawable != null) - expirePanelImmediately(removedDrawable); + foreach (var removedSet in removedSets) + { + // If we don't remove this here, it may remain in a hidden state until scrolled off screen. + // Doesn't really affect anything during actual user interaction, but makes testing annoying. + var removedDrawable = Scroll.FirstOrDefault(c => c.Item == removedSet); + if (removedDrawable != null) + expirePanelImmediately(removedDrawable); + } if (newSet != null) { @@ -632,6 +656,8 @@ namespace osu.Game.Screens.Select applyActiveCriteria(debounce); } + private bool beatmapsSplitOut; + private void applyActiveCriteria(bool debounce, bool alwaysResetScrollPosition = true) { PendingFilter?.Cancel(); @@ -652,6 +678,13 @@ namespace osu.Game.Screens.Select { PendingFilter = null; + if (activeCriteria.SplitOutDifficulties != beatmapsSplitOut) + { + beatmapsSplitOut = activeCriteria.SplitOutDifficulties; + loadBeatmapSets(originalBeatmapSetsDetached); + return; + } + root.Filter(activeCriteria); itemsCache.Invalidate(); @@ -1055,7 +1088,7 @@ namespace osu.Game.Screens.Select // May only be null during construction (State.Value set causes PerformSelection to be triggered). private readonly BeatmapCarousel? carousel; - public readonly Dictionary BeatmapSetsByID = new Dictionary(); + public readonly Dictionary> BeatmapSetsByID = new Dictionary>(); public CarouselRoot(BeatmapCarousel carousel) { @@ -1069,20 +1102,25 @@ namespace osu.Game.Screens.Select public override void AddItem(CarouselItem i) { CarouselBeatmapSet set = (CarouselBeatmapSet)i; - BeatmapSetsByID.Add(set.BeatmapSet.ID, set); + if (BeatmapSetsByID.TryGetValue(set.BeatmapSet.ID, out var sets)) + sets.Add(set); + else + BeatmapSetsByID.Add(set.BeatmapSet.ID, new List { set }); base.AddItem(i); } - public CarouselBeatmapSet? RemoveChild(Guid beatmapSetID) + public IEnumerable RemoveChild(Guid beatmapSetID) { - if (BeatmapSetsByID.TryGetValue(beatmapSetID, out var carouselBeatmapSet)) + if (BeatmapSetsByID.TryGetValue(beatmapSetID, out var carouselBeatmapSets)) { - RemoveItem(carouselBeatmapSet); - return carouselBeatmapSet; + foreach (var set in carouselBeatmapSets) + RemoveItem(set); + + return carouselBeatmapSets; } - return null; + return Enumerable.Empty(); } public override void RemoveItem(CarouselItem i) diff --git a/osu.Game/Screens/Select/FilterCriteria.cs b/osu.Game/Screens/Select/FilterCriteria.cs index ab4f85fc92..a2ae114126 100644 --- a/osu.Game/Screens/Select/FilterCriteria.cs +++ b/osu.Game/Screens/Select/FilterCriteria.cs @@ -19,6 +19,11 @@ namespace osu.Game.Screens.Select public GroupMode Group; public SortMode Sort; + /// + /// Whether the display of beatmap sets should be split apart per-difficulty for the current criteria. + /// + public bool SplitOutDifficulties => Sort == SortMode.Difficulty; + public BeatmapSetInfo? SelectedBeatmapSet; public OptionalRange StarDifficulty; From 2b1c6ae612cb4e6cecbd6736748da942fa724e39 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 22 Aug 2023 18:38:23 +0900 Subject: [PATCH 055/729] Ensure ID is maintained in temporary `BeatmapSetInfo`s --- osu.Game/Screens/Select/BeatmapCarousel.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index d1a9b4176b..5157e37a31 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -137,8 +137,10 @@ namespace osu.Game.Screens.Select { var carouselBeatmapSets = originalBeatmapSetsDetached.SelectMany(s => s.Beatmaps).Select(b => { - var set = new BeatmapSetInfo(new[] { b }); - return createCarouselSet(set); + return createCarouselSet(new BeatmapSetInfo(new[] { b }) + { + ID = b.BeatmapSet!.ID, + }); }).OfType(); newRoot.AddItems(carouselBeatmapSets); From ecbf0f138e2c7b3cf5716020a1aad4f8a834dfd7 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 22 Aug 2023 18:38:43 +0900 Subject: [PATCH 056/729] Fix incorrect handling when new beatmaps arrive --- osu.Game/Screens/Select/BeatmapCarousel.cs | 35 ++++++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 5157e37a31..2227eb801a 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -393,7 +393,6 @@ namespace osu.Game.Screens.Select if (selectedBeatmapSet?.BeatmapSet.ID == beatmapSet.ID) previouslySelectedID = selectedBeatmap?.BeatmapInfo.ID; - var newSet = createCarouselSet(beatmapSet); var removedSets = root.RemoveChild(beatmapSet.ID); foreach (var removedSet in removedSets) @@ -405,13 +404,37 @@ namespace osu.Game.Screens.Select expirePanelImmediately(removedDrawable); } - if (newSet != null) + if (beatmapsSplitOut) { - root.AddItem(newSet); + foreach (var beatmap in beatmapSet.Beatmaps) + { + var newSet = createCarouselSet(new BeatmapSetInfo(new[] { beatmap }) + { + ID = beatmapSet.ID + }); - // check if we can/need to maintain our current selection. - if (previouslySelectedID != null) - select((CarouselItem?)newSet.Beatmaps.FirstOrDefault(b => b.BeatmapInfo.ID == previouslySelectedID) ?? newSet); + if (newSet != null) + { + root.AddItem(newSet); + + // check if we can/need to maintain our current selection. + if (previouslySelectedID != null) + select((CarouselItem?)newSet.Beatmaps.FirstOrDefault(b => b.BeatmapInfo.ID == previouslySelectedID) ?? newSet); + } + } + } + else + { + var newSet = createCarouselSet(beatmapSet); + + if (newSet != null) + { + root.AddItem(newSet); + + // check if we can/need to maintain our current selection. + if (previouslySelectedID != null) + select((CarouselItem?)newSet.Beatmaps.FirstOrDefault(b => b.BeatmapInfo.ID == previouslySelectedID) ?? newSet); + } } itemsCache.Invalidate(); From 018be4c20f408ee98bb00a3897e2658b4f016596 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 22 Aug 2023 18:40:34 +0900 Subject: [PATCH 057/729] Fix selection not being retained when switching between split mode --- osu.Game/Screens/Select/BeatmapCarousel.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 2227eb801a..c5e46a00b6 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -131,6 +131,12 @@ namespace osu.Game.Screens.Select { originalBeatmapSetsDetached = beatmapSets.Detach(); + if (selectedBeatmapSet != null && !originalBeatmapSetsDetached.Contains(selectedBeatmapSet.BeatmapSet)) + selectedBeatmapSet = null; + + var selectedSetBefore = selectedBeatmapSet; + var selectedBetmapBefore = selectedBeatmap; + CarouselRoot newRoot = new CarouselRoot(this); if (beatmapsSplitOut) @@ -148,14 +154,12 @@ namespace osu.Game.Screens.Select else { var carouselBeatmapSets = originalBeatmapSetsDetached.Select(createCarouselSet).OfType(); + newRoot.AddItems(carouselBeatmapSets); } root = newRoot; - if (selectedBeatmapSet != null && !originalBeatmapSetsDetached.Contains(selectedBeatmapSet.BeatmapSet)) - selectedBeatmapSet = null; - Scroll.Clear(false); itemsCache.Invalidate(); ScrollToSelected(); @@ -164,6 +168,15 @@ namespace osu.Game.Screens.Select if (loadedTestBeatmaps) signalBeatmapsLoaded(); + + // Restore selection + if (selectedBetmapBefore != null && selectedSetBefore != null && newRoot.BeatmapSetsByID.TryGetValue(selectedSetBefore.BeatmapSet.ID, out var newSelectionCandidates)) + { + CarouselBeatmap? found = newSelectionCandidates.SelectMany(s => s.Beatmaps).SingleOrDefault(b => b.BeatmapInfo.ID == selectedBetmapBefore.BeatmapInfo.ID); + + if (found != null) + found.State.Value = CarouselItemState.Selected; + } } private readonly List visibleItems = new List(); From 5555f73e97f22f9c6f0425bc4c9459bef88f3be5 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 23 Aug 2023 19:38:18 +0900 Subject: [PATCH 058/729] Update test to match new behaviour --- .../SongSelect/TestSceneBeatmapCarousel.cs | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs index 61f95dc628..b0aff8b4db 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs @@ -758,7 +758,7 @@ namespace osu.Game.Tests.Visual.SongSelect } [Test] - public void TestSortingWithFiltered() + public void TestSortingWithDifficultyFiltered() { List sets = new List(); @@ -777,13 +777,32 @@ namespace osu.Game.Tests.Visual.SongSelect loadBeatmaps(sets); + AddStep("Sort by difficulty", () => carousel.Filter(new FilterCriteria { Sort = SortMode.Difficulty }, false)); + + checkVisibleItemCount(false, 9); + checkVisibleItemCount(true, 1); + AddStep("Filter to normal", () => carousel.Filter(new FilterCriteria { Sort = SortMode.Difficulty, SearchText = "Normal" }, false)); - AddAssert("Check first set at end", () => carousel.BeatmapSets.First().Equals(sets.Last())); - AddAssert("Check last set at start", () => carousel.BeatmapSets.Last().Equals(sets.First())); + checkVisibleItemCount(false, 3); + checkVisibleItemCount(true, 1); + + AddUntilStep("Check all visible sets have one normal", () => + { + return carousel.Items.OfType() + .Where(p => p.IsPresent) + .Count(p => ((CarouselBeatmapSet)p.Item)!.Beatmaps.Single().BeatmapInfo.DifficultyName.StartsWith("Normal", StringComparison.Ordinal)) == 3; + }); AddStep("Filter to insane", () => carousel.Filter(new FilterCriteria { Sort = SortMode.Difficulty, SearchText = "Insane" }, false)); - AddAssert("Check first set at start", () => carousel.BeatmapSets.First().Equals(sets.First())); - AddAssert("Check last set at end", () => carousel.BeatmapSets.Last().Equals(sets.Last())); + checkVisibleItemCount(false, 3); + checkVisibleItemCount(true, 1); + + AddUntilStep("Check all visible sets have one insane", () => + { + return carousel.Items.OfType() + .Where(p => p.IsPresent) + .Count(p => ((CarouselBeatmapSet)p.Item)!.Beatmaps.Single().BeatmapInfo.DifficultyName.StartsWith("Insane", StringComparison.Ordinal)) == 3; + }); } [Test] From a64381f8553dd49b9c5c5142aa2934c333b101a4 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 23 Aug 2023 19:43:08 +0900 Subject: [PATCH 059/729] Add test coverage of add/remove when difficulties are split out --- .../SongSelect/TestSceneBeatmapCarousel.cs | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs index b0aff8b4db..5af6d862b2 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs @@ -39,6 +39,7 @@ namespace osu.Game.Tests.Visual.SongSelect private BeatmapInfo currentSelection => carousel.SelectedBeatmapInfo; private const int set_count = 5; + private const int diff_count = 3; [BackgroundDependencyLoader] private void load(RulesetStore rulesets) @@ -501,6 +502,36 @@ namespace osu.Game.Tests.Visual.SongSelect waitForSelection(set_count); } + [Test] + public void TestAddRemoveDifficultySort() + { + loadBeatmaps(); + + AddStep("Sort by difficulty", () => carousel.Filter(new FilterCriteria { Sort = SortMode.Difficulty }, false)); + + checkVisibleItemCount(false, set_count * diff_count); + + var firstAdded = TestResources.CreateTestBeatmapSetInfo(diff_count); + var secondAdded = TestResources.CreateTestBeatmapSetInfo(diff_count); + + AddStep("Add new set", () => carousel.UpdateBeatmapSet(firstAdded)); + AddStep("Add new set", () => carousel.UpdateBeatmapSet(secondAdded)); + + checkVisibleItemCount(false, (set_count + 2) * diff_count); + + AddStep("Remove set", () => carousel.RemoveBeatmapSet(firstAdded)); + + checkVisibleItemCount(false, (set_count + 1) * diff_count); + + setSelected(set_count + 1, 1); + + AddStep("Remove set", () => carousel.RemoveBeatmapSet(secondAdded)); + + checkVisibleItemCount(false, (set_count) * diff_count); + + waitForSelection(set_count); + } + [Test] public void TestSelectionEnteringFromEmptyRuleset() { @@ -662,7 +693,7 @@ namespace osu.Game.Tests.Visual.SongSelect for (int i = 0; i < 3; i++) { - var set = TestResources.CreateTestBeatmapSetInfo(3); + var set = TestResources.CreateTestBeatmapSetInfo(diff_count); // only need to set the first as they are a shared reference. var beatmap = set.Beatmaps.First(); @@ -709,7 +740,7 @@ namespace osu.Game.Tests.Visual.SongSelect for (int i = 0; i < 3; i++) { - var set = TestResources.CreateTestBeatmapSetInfo(3); + var set = TestResources.CreateTestBeatmapSetInfo(diff_count); // only need to set the first as they are a shared reference. var beatmap = set.Beatmaps.First(); @@ -768,7 +799,7 @@ namespace osu.Game.Tests.Visual.SongSelect for (int i = 0; i < 3; i++) { - var set = TestResources.CreateTestBeatmapSetInfo(3); + var set = TestResources.CreateTestBeatmapSetInfo(diff_count); set.Beatmaps[0].StarRating = 3 - i; set.Beatmaps[2].StarRating = 6 + i; sets.Add(set); @@ -857,7 +888,7 @@ namespace osu.Game.Tests.Visual.SongSelect AddStep("create hidden set", () => { - hidingSet = TestResources.CreateTestBeatmapSetInfo(3); + hidingSet = TestResources.CreateTestBeatmapSetInfo(diff_count); hidingSet.Beatmaps[1].Hidden = true; hiddenList.Clear(); @@ -904,7 +935,7 @@ namespace osu.Game.Tests.Visual.SongSelect AddStep("add mixed ruleset beatmapset", () => { - testMixed = TestResources.CreateTestBeatmapSetInfo(3); + testMixed = TestResources.CreateTestBeatmapSetInfo(diff_count); for (int i = 0; i <= 2; i++) { @@ -926,7 +957,7 @@ namespace osu.Game.Tests.Visual.SongSelect BeatmapSetInfo testSingle = null; AddStep("add single ruleset beatmapset", () => { - testSingle = TestResources.CreateTestBeatmapSetInfo(3); + testSingle = TestResources.CreateTestBeatmapSetInfo(diff_count); testSingle.Beatmaps.ForEach(b => { b.Ruleset = rulesets.AvailableRulesets.ElementAt(1); @@ -949,7 +980,7 @@ namespace osu.Game.Tests.Visual.SongSelect manySets.Clear(); for (int i = 1; i <= 50; i++) - manySets.Add(TestResources.CreateTestBeatmapSetInfo(3)); + manySets.Add(TestResources.CreateTestBeatmapSetInfo(diff_count)); }); loadBeatmaps(manySets); @@ -1113,7 +1144,7 @@ namespace osu.Game.Tests.Visual.SongSelect { beatmapSets.Add(randomDifficulties ? TestResources.CreateTestBeatmapSetInfo() - : TestResources.CreateTestBeatmapSetInfo(3)); + : TestResources.CreateTestBeatmapSetInfo(diff_count)); } } From 5eac604f8b2cf59a5346956d99a7fea0fdda0cd9 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 23 Aug 2023 19:44:39 +0900 Subject: [PATCH 060/729] Add coverage of selection retention when difficulties are split out --- .../SongSelect/TestSceneBeatmapCarousel.cs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs index 5af6d862b2..daa8c9c4c2 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs @@ -1005,6 +1005,43 @@ namespace osu.Game.Tests.Visual.SongSelect AddAssert("Selection was remembered", () => eagerSelectedIDs.Count == 1); } + [Test] + public void TestCarouselRemembersSelectionDifficultySort() + { + List manySets = new List(); + + AddStep("Populuate beatmap sets", () => + { + manySets.Clear(); + + for (int i = 1; i <= 50; i++) + manySets.Add(TestResources.CreateTestBeatmapSetInfo(diff_count)); + }); + + loadBeatmaps(manySets); + + AddStep("Sort by difficulty", () => carousel.Filter(new FilterCriteria { Sort = SortMode.Difficulty }, false)); + + advanceSelection(direction: 1, diff: false); + + for (int i = 0; i < 5; i++) + { + AddStep("Toggle non-matching filter", () => + { + carousel.Filter(new FilterCriteria { SearchText = Guid.NewGuid().ToString() }, false); + }); + + AddStep("Restore no filter", () => + { + carousel.Filter(new FilterCriteria(), false); + eagerSelectedIDs.Add(carousel.SelectedBeatmapSet!.ID); + }); + } + + // always returns to same selection as long as it's available. + AddAssert("Selection was remembered", () => eagerSelectedIDs.Count == 1); + } + [Test] public void TestFilteringByUserStarDifficulty() { From 4881130caeccc728dbb789665fd161da1cfb0b53 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 24 Aug 2023 03:32:12 +0900 Subject: [PATCH 061/729] Limit set/diff count in test to better fit on screen --- .../SongSelect/TestSceneBeatmapCarousel.cs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs index daa8c9c4c2..d68fa6100c 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs @@ -791,17 +791,20 @@ namespace osu.Game.Tests.Visual.SongSelect [Test] public void TestSortingWithDifficultyFiltered() { + const int local_diff_count = 3; + const int local_set_count = 2; + List sets = new List(); AddStep("Populuate beatmap sets", () => { sets.Clear(); - for (int i = 0; i < 3; i++) + for (int i = 0; i < local_set_count; i++) { - var set = TestResources.CreateTestBeatmapSetInfo(diff_count); + var set = TestResources.CreateTestBeatmapSetInfo(local_diff_count); set.Beatmaps[0].StarRating = 3 - i; - set.Beatmaps[2].StarRating = 6 + i; + set.Beatmaps[1].StarRating = 6 + i; sets.Add(set); } }); @@ -810,29 +813,29 @@ namespace osu.Game.Tests.Visual.SongSelect AddStep("Sort by difficulty", () => carousel.Filter(new FilterCriteria { Sort = SortMode.Difficulty }, false)); - checkVisibleItemCount(false, 9); + checkVisibleItemCount(false, local_set_count * local_diff_count); checkVisibleItemCount(true, 1); AddStep("Filter to normal", () => carousel.Filter(new FilterCriteria { Sort = SortMode.Difficulty, SearchText = "Normal" }, false)); - checkVisibleItemCount(false, 3); + checkVisibleItemCount(false, local_set_count); checkVisibleItemCount(true, 1); AddUntilStep("Check all visible sets have one normal", () => { return carousel.Items.OfType() .Where(p => p.IsPresent) - .Count(p => ((CarouselBeatmapSet)p.Item)!.Beatmaps.Single().BeatmapInfo.DifficultyName.StartsWith("Normal", StringComparison.Ordinal)) == 3; + .Count(p => ((CarouselBeatmapSet)p.Item)!.Beatmaps.Single().BeatmapInfo.DifficultyName.StartsWith("Normal", StringComparison.Ordinal)) == local_set_count; }); AddStep("Filter to insane", () => carousel.Filter(new FilterCriteria { Sort = SortMode.Difficulty, SearchText = "Insane" }, false)); - checkVisibleItemCount(false, 3); + checkVisibleItemCount(false, local_set_count); checkVisibleItemCount(true, 1); AddUntilStep("Check all visible sets have one insane", () => { return carousel.Items.OfType() .Where(p => p.IsPresent) - .Count(p => ((CarouselBeatmapSet)p.Item)!.Beatmaps.Single().BeatmapInfo.DifficultyName.StartsWith("Insane", StringComparison.Ordinal)) == 3; + .Count(p => ((CarouselBeatmapSet)p.Item)!.Beatmaps.Single().BeatmapInfo.DifficultyName.StartsWith("Insane", StringComparison.Ordinal)) == local_set_count; }); } From c8f42f73e87029f3e235b92d3a97ba776d6327f9 Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Thu, 24 Aug 2023 11:17:41 +0900 Subject: [PATCH 062/729] Adjust mania hit windows with gameplay rate --- .../Mods/IManiaRateAdjustmentMod.cs | 47 +++++++++++++++++++ .../Mods/ManiaModDaycore.cs | 5 +- .../Mods/ManiaModDoubleTime.cs | 5 +- .../Mods/ManiaModHalfTime.cs | 5 +- .../Mods/ManiaModNightcore.cs | 5 +- .../Scoring/ManiaHitWindows.cs | 20 ++++++++ 6 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 osu.Game.Rulesets.Mania/Mods/IManiaRateAdjustmentMod.cs diff --git a/osu.Game.Rulesets.Mania/Mods/IManiaRateAdjustmentMod.cs b/osu.Game.Rulesets.Mania/Mods/IManiaRateAdjustmentMod.cs new file mode 100644 index 0000000000..ea01bd4436 --- /dev/null +++ b/osu.Game.Rulesets.Mania/Mods/IManiaRateAdjustmentMod.cs @@ -0,0 +1,47 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Bindables; +using osu.Game.Beatmaps; +using osu.Game.Rulesets.Mania.Objects; +using osu.Game.Rulesets.Mania.Scoring; +using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Scoring; + +namespace osu.Game.Rulesets.Mania.Mods +{ + /// + /// May be attached to rate-adjustment mods to adjust hit windows adjust relative to gameplay rate. + /// + /// + /// Historically, in osu!mania, hit windows are expected to adjust relative to the gameplay rate such that the real-world hit window remains the same. + /// + public interface IManiaRateAdjustmentMod : IApplicableToDifficulty, IApplicableToHitObject + { + BindableNumber SpeedChange { get; } + + HitWindows HitWindows { get; set; } + + void IApplicableToDifficulty.ApplyToDifficulty(BeatmapDifficulty difficulty) + { + HitWindows = new ManiaHitWindows(SpeedChange.Value); + HitWindows.SetDifficulty(difficulty.OverallDifficulty); + } + + void IApplicableToHitObject.ApplyToHitObject(HitObject hitObject) + { + switch (hitObject) + { + case Note: + hitObject.HitWindows = HitWindows; + break; + + case HoldNote hold: + hold.Head.HitWindows = HitWindows; + hold.Tail.HitWindows = HitWindows; + break; + } + } + } +} diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModDaycore.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModDaycore.cs index 309393b664..dbe2a9a9fc 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModDaycore.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModDaycore.cs @@ -1,11 +1,14 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +using osu.Game.Rulesets.Mania.Scoring; using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Mania.Mods { - public class ManiaModDaycore : ModDaycore + public class ManiaModDaycore : ModDaycore, IManiaRateAdjustmentMod { + public HitWindows HitWindows { get; set; } = new ManiaHitWindows(); } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModDoubleTime.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModDoubleTime.cs index f4b9cf3b88..a841a8ab37 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModDoubleTime.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModDoubleTime.cs @@ -1,11 +1,14 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +using osu.Game.Rulesets.Mania.Scoring; using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Mania.Mods { - public class ManiaModDoubleTime : ModDoubleTime + public class ManiaModDoubleTime : ModDoubleTime, IManiaRateAdjustmentMod { + public HitWindows HitWindows { get; set; } = new ManiaHitWindows(); } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModHalfTime.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModHalfTime.cs index 8d48e3acde..b0fbb11396 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModHalfTime.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModHalfTime.cs @@ -1,11 +1,14 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +using osu.Game.Rulesets.Mania.Scoring; using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Mania.Mods { - public class ManiaModHalfTime : ModHalfTime + public class ManiaModHalfTime : ModHalfTime, IManiaRateAdjustmentMod { + public HitWindows HitWindows { get; set; } = new ManiaHitWindows(); } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModNightcore.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModNightcore.cs index 748725af9f..f64f7ae31a 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModNightcore.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModNightcore.cs @@ -2,11 +2,14 @@ // See the LICENCE file in the repository root for full licence text. using osu.Game.Rulesets.Mania.Objects; +using osu.Game.Rulesets.Mania.Scoring; using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Mania.Mods { - public class ManiaModNightcore : ModNightcore + public class ManiaModNightcore : ModNightcore, IManiaRateAdjustmentMod { + public HitWindows HitWindows { get; set; } = new ManiaHitWindows(); } } diff --git a/osu.Game.Rulesets.Mania/Scoring/ManiaHitWindows.cs b/osu.Game.Rulesets.Mania/Scoring/ManiaHitWindows.cs index 289f8a00ef..627f48f391 100644 --- a/osu.Game.Rulesets.Mania/Scoring/ManiaHitWindows.cs +++ b/osu.Game.Rulesets.Mania/Scoring/ManiaHitWindows.cs @@ -1,12 +1,25 @@ // 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.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Mania.Scoring { public class ManiaHitWindows : HitWindows { + private readonly double multiplier; + + public ManiaHitWindows() + : this(1) + { + } + + public ManiaHitWindows(double multiplier) + { + this.multiplier = multiplier; + } + public override bool IsHitResultAllowed(HitResult result) { switch (result) @@ -22,5 +35,12 @@ namespace osu.Game.Rulesets.Mania.Scoring return false; } + + protected override DifficultyRange[] GetRanges() => base.GetRanges().Select(r => + new DifficultyRange( + r.Result, + r.Min * multiplier, + r.Average * multiplier, + r.Max * multiplier)).ToArray(); } } From ba70d48d2cc0013fbc42338e0867cbe1e6ea8c82 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 24 Aug 2023 13:31:33 +0900 Subject: [PATCH 063/729] Fix one more test probably going off-screen --- .../SongSelect/TestSceneBeatmapCarousel.cs | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs index d68fa6100c..8a38e2a84b 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs @@ -112,7 +112,7 @@ namespace osu.Game.Tests.Visual.SongSelect [Test] public void TestScrollPositionMaintainedOnAdd() { - loadBeatmaps(count: 1, randomDifficulties: false); + loadBeatmaps(setCount: 1); for (int i = 0; i < 10; i++) { @@ -125,7 +125,7 @@ namespace osu.Game.Tests.Visual.SongSelect [Test] public void TestDeletion() { - loadBeatmaps(count: 5, randomDifficulties: true); + loadBeatmaps(setCount: 5, randomDifficulties: true); AddStep("remove first set", () => carousel.RemoveBeatmapSet(carousel.Items.Select(item => item.Item).OfType().First().BeatmapSet)); AddUntilStep("4 beatmap sets visible", () => this.ChildrenOfType().Count(set => set.Alpha > 0) == 4); @@ -134,7 +134,7 @@ namespace osu.Game.Tests.Visual.SongSelect [Test] public void TestScrollPositionMaintainedOnDelete() { - loadBeatmaps(count: 50, randomDifficulties: false); + loadBeatmaps(setCount: 50); for (int i = 0; i < 10; i++) { @@ -151,7 +151,7 @@ namespace osu.Game.Tests.Visual.SongSelect [Test] public void TestManyPanels() { - loadBeatmaps(count: 5000, randomDifficulties: true); + loadBeatmaps(setCount: 5000, randomDifficulties: true); } [Test] @@ -505,31 +505,34 @@ namespace osu.Game.Tests.Visual.SongSelect [Test] public void TestAddRemoveDifficultySort() { - loadBeatmaps(); + const int local_set_count = 1; + const int local_diff_count = 1; + + loadBeatmaps(setCount: local_set_count, diffCount: local_diff_count); AddStep("Sort by difficulty", () => carousel.Filter(new FilterCriteria { Sort = SortMode.Difficulty }, false)); - checkVisibleItemCount(false, set_count * diff_count); + checkVisibleItemCount(false, local_set_count * local_diff_count); - var firstAdded = TestResources.CreateTestBeatmapSetInfo(diff_count); - var secondAdded = TestResources.CreateTestBeatmapSetInfo(diff_count); + var firstAdded = TestResources.CreateTestBeatmapSetInfo(local_diff_count); + var secondAdded = TestResources.CreateTestBeatmapSetInfo(local_diff_count); AddStep("Add new set", () => carousel.UpdateBeatmapSet(firstAdded)); AddStep("Add new set", () => carousel.UpdateBeatmapSet(secondAdded)); - checkVisibleItemCount(false, (set_count + 2) * diff_count); + checkVisibleItemCount(false, (local_set_count + 2) * local_diff_count); AddStep("Remove set", () => carousel.RemoveBeatmapSet(firstAdded)); - checkVisibleItemCount(false, (set_count + 1) * diff_count); + checkVisibleItemCount(false, (local_set_count + 1) * local_diff_count); - setSelected(set_count + 1, 1); + setSelected(local_set_count + 1, 1); AddStep("Remove set", () => carousel.RemoveBeatmapSet(secondAdded)); - checkVisibleItemCount(false, (set_count) * diff_count); + checkVisibleItemCount(false, (local_set_count) * local_diff_count); - waitForSelection(set_count); + waitForSelection(local_set_count); } [Test] @@ -1171,8 +1174,8 @@ namespace osu.Game.Tests.Visual.SongSelect } } - private void loadBeatmaps(List beatmapSets = null, Func initialCriteria = null, Action carouselAdjust = null, int? count = null, - bool randomDifficulties = false) + private void loadBeatmaps(List beatmapSets = null, Func initialCriteria = null, Action carouselAdjust = null, + int? setCount = null, int? diffCount = null, bool randomDifficulties = false) { bool changed = false; @@ -1180,11 +1183,11 @@ namespace osu.Game.Tests.Visual.SongSelect { beatmapSets = new List(); - for (int i = 1; i <= (count ?? set_count); i++) + for (int i = 1; i <= (setCount ?? set_count); i++) { beatmapSets.Add(randomDifficulties ? TestResources.CreateTestBeatmapSetInfo() - : TestResources.CreateTestBeatmapSetInfo(diff_count)); + : TestResources.CreateTestBeatmapSetInfo(diffCount ?? diff_count)); } } From a045cb71fc3d94f7d0d4f2bc0ab4ff770a1e0878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Tue, 22 Aug 2023 19:44:22 +0200 Subject: [PATCH 064/729] Add assertions checking action type taken by legacy hit policy --- .../TestSceneObjectOrderedHitPolicy.cs | 35 +++++++++++++++++++ osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs index 8a38bf2b08..afda805d26 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs @@ -11,17 +11,20 @@ using NUnit.Framework; using osu.Framework.Extensions; using osu.Framework.Extensions.TypeExtensions; using osu.Framework.Screens; +using osu.Framework.Testing; using osu.Game.Beatmaps; using osu.Game.Beatmaps.ControlPoints; using osu.Game.Beatmaps.Formats; using osu.Game.Replays; using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Osu.Mods; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Replays; using osu.Game.Rulesets.Osu.Scoring; +using osu.Game.Rulesets.Osu.UI; using osu.Game.Rulesets.Replays; using osu.Game.Rulesets.Scoring; using osu.Game.Scoring; @@ -83,6 +86,7 @@ namespace osu.Game.Rulesets.Osu.Tests addJudgementAssert(hitObjects[1], HitResult.Miss); // note lock prevented the object from being hit, so the judgement offset should be very late. addJudgementOffsetAssert(hitObjects[0], referenceHitWindows.WindowFor(HitResult.Meh)); + addClickActionAssert(0, ClickAction.Shake); } /// @@ -119,6 +123,7 @@ namespace osu.Game.Rulesets.Osu.Tests addJudgementAssert(hitObjects[1], HitResult.Miss); // note lock prevented the object from being hit, so the judgement offset should be very late. addJudgementOffsetAssert(hitObjects[0], referenceHitWindows.WindowFor(HitResult.Meh)); + addClickActionAssert(0, ClickAction.Shake); } /// @@ -155,6 +160,7 @@ namespace osu.Game.Rulesets.Osu.Tests addJudgementAssert(hitObjects[1], HitResult.Miss); // note lock prevented the object from being hit, so the judgement offset should be very late. addJudgementOffsetAssert(hitObjects[0], referenceHitWindows.WindowFor(HitResult.Meh)); + addClickActionAssert(0, ClickAction.Shake); } /// @@ -192,6 +198,8 @@ namespace osu.Game.Rulesets.Osu.Tests addJudgementAssert(hitObjects[1], HitResult.Meh); addJudgementOffsetAssert(hitObjects[0], -190); // time_first_circle - 190 addJudgementOffsetAssert(hitObjects[0], -90); // time_second_circle - first_circle_time - 90 + addClickActionAssert(0, ClickAction.Hit); + addClickActionAssert(1, ClickAction.Hit); } /// @@ -229,6 +237,8 @@ namespace osu.Game.Rulesets.Osu.Tests addJudgementAssert(hitObjects[1], HitResult.Ok); addJudgementOffsetAssert(hitObjects[0], -190); // time_first_circle - 190 addJudgementOffsetAssert(hitObjects[1], -100); // time_second_circle - first_circle_time + addClickActionAssert(0, ClickAction.Hit); + addClickActionAssert(1, ClickAction.Hit); } /// @@ -271,6 +281,8 @@ namespace osu.Game.Rulesets.Osu.Tests addJudgementAssert(hitObjects[1], HitResult.Great); addJudgementAssert("slider head", () => ((Slider)hitObjects[1]).HeadCircle, HitResult.LargeTickHit); addJudgementAssert("slider tick", () => ((Slider)hitObjects[1]).NestedHitObjects[1] as SliderTick, HitResult.LargeTickHit); + addClickActionAssert(0, ClickAction.Hit); + addClickActionAssert(1, ClickAction.Hit); } /// @@ -314,6 +326,8 @@ namespace osu.Game.Rulesets.Osu.Tests addJudgementAssert(hitObjects[1], HitResult.Great); addJudgementAssert("slider head", () => ((Slider)hitObjects[1]).HeadCircle, HitResult.LargeTickHit); addJudgementAssert("slider tick", () => ((Slider)hitObjects[1]).NestedHitObjects[1] as SliderTick, HitResult.LargeTickHit); + addClickActionAssert(0, ClickAction.Hit); + addClickActionAssert(1, ClickAction.Hit); } /// @@ -353,6 +367,7 @@ namespace osu.Game.Rulesets.Osu.Tests addJudgementAssert(hitObjects[0], HitResult.Great); addJudgementAssert(hitObjects[1], HitResult.Meh); + addClickActionAssert(0, ClickAction.Hit); } [Test] @@ -391,6 +406,9 @@ namespace osu.Game.Rulesets.Osu.Tests addJudgementAssert(hitObjects[0], HitResult.Great); addJudgementAssert(hitObjects[1], HitResult.Great); + addClickActionAssert(0, ClickAction.Shake); + addClickActionAssert(1, ClickAction.Hit); + addClickActionAssert(2, ClickAction.Hit); } private void addJudgementAssert(OsuHitObject hitObject, HitResult result) @@ -411,8 +429,12 @@ namespace osu.Game.Rulesets.Osu.Tests () => judgementResults.Single(r => r.HitObject == hitObject).TimeOffset, () => Is.EqualTo(offset).Within(100)); } + private void addClickActionAssert(int inputIndex, ClickAction action) + => AddAssert($"input #{inputIndex} resulted in {action}", () => testPolicy.ClickActions[inputIndex], () => Is.EqualTo(action)); + private ScoreAccessibleReplayPlayer currentPlayer = null!; private List judgementResults = null!; + private TestLegacyHitPolicy testPolicy = null!; private void performTest(List hitObjects, List frames, [CallerMemberName] string testCaseName = "") { @@ -513,6 +535,7 @@ namespace osu.Game.Rulesets.Osu.Tests AddUntilStep("Beatmap at 0", () => Beatmap.Value.Track.CurrentTime == 0); AddUntilStep("Wait until player is loaded", () => currentPlayer.IsCurrentScreen()); + AddStep("Substitute hit policy", () => currentPlayer.ChildrenOfType().Single().HitPolicy = testPolicy = new TestLegacyHitPolicy()); AddUntilStep("Wait for completion", () => currentPlayer.ScoreProcessor.HasCompleted.Value); } @@ -540,5 +563,17 @@ namespace osu.Game.Rulesets.Osu.Tests { } } + + private class TestLegacyHitPolicy : LegacyHitPolicy + { + public List ClickActions { get; } = new List(); + + public override ClickAction CheckHittable(DrawableHitObject hitObject, double time) + { + var action = base.CheckHittable(hitObject, time); + ClickActions.Add(action); + return action; + } + } } } diff --git a/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs index c35d4a1b56..6a740a6839 100644 --- a/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs @@ -26,7 +26,7 @@ namespace osu.Game.Rulesets.Osu.UI { } - public ClickAction CheckHittable(DrawableHitObject hitObject, double time) + public virtual ClickAction CheckHittable(DrawableHitObject hitObject, double time) { var aliveObjects = HitObjectContainer.AliveObjects.ToList(); int index = aliveObjects.IndexOf(hitObject); From 9ffc6cdd6110a94524c37b8d2c5bd3eaabb7e5e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Tue, 22 Aug 2023 19:58:31 +0200 Subject: [PATCH 065/729] Add test case covering overlapping slider fail case --- .../TestSceneObjectOrderedHitPolicy.cs | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs index afda805d26..fbbac91af5 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs @@ -411,6 +411,53 @@ namespace osu.Game.Rulesets.Osu.Tests addClickActionAssert(2, ClickAction.Hit); } + [Test] + public void TestOverlappingSliders() + { + const double time_first_slider = 1000; + const double time_second_slider = 1200; + Vector2 positionFirstSlider = new Vector2(100, 50); + Vector2 positionSecondSlider = new Vector2(100, 80); + var midpoint = (positionFirstSlider + positionSecondSlider) / 2; + + var hitObjects = new List + { + new Slider + { + StartTime = time_first_slider, + Position = positionFirstSlider, + Path = new SliderPath(PathType.Linear, new[] + { + Vector2.Zero, + new Vector2(25, 0), + }) + }, + new Slider + { + StartTime = time_second_slider, + Position = positionSecondSlider, + Path = new SliderPath(PathType.Linear, new[] + { + Vector2.Zero, + new Vector2(25, 0), + }) + } + }; + + performTest(hitObjects, new List + { + new OsuReplayFrame { Time = time_first_slider, Position = midpoint, Actions = { OsuAction.RightButton } }, + new OsuReplayFrame { Time = time_first_slider + 25, Position = midpoint, Actions = { OsuAction.LeftButton, OsuAction.RightButton } }, + new OsuReplayFrame { Time = time_first_slider + 50, Position = midpoint }, + new OsuReplayFrame { Time = time_second_slider, Position = positionSecondSlider + new Vector2(0, 10), Actions = { OsuAction.LeftButton } }, + }); + + addJudgementAssert(hitObjects[0], HitResult.Ok); + addJudgementAssert(hitObjects[1], HitResult.Great); + addClickActionAssert(0, ClickAction.Hit); + addClickActionAssert(1, ClickAction.Hit); + } + private void addJudgementAssert(OsuHitObject hitObject, HitResult result) { AddAssert($"({hitObject.GetType().ReadableName()} @ {hitObject.StartTime}) judgement is {result}", From 48b3f7dced93f0600fdf22837c5b9c94308bf1f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Tue, 22 Aug 2023 20:34:36 +0200 Subject: [PATCH 066/729] Add test case covering stacks not shaking --- .../TestSceneObjectOrderedHitPolicy.cs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs index fbbac91af5..738d1a0739 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs @@ -458,6 +458,26 @@ namespace osu.Game.Rulesets.Osu.Tests addClickActionAssert(1, ClickAction.Hit); } + [Test] + public void TestStacksDoNotShake() + { + const double time_stack_start = 1000; + Vector2 position = new Vector2(80); + + var hitObjects = Enumerable.Range(0, 20).Select(i => new HitCircle + { + StartTime = time_stack_start + i * 100, + Position = position + }).Cast().ToList(); + + performTest(hitObjects, new List + { + new OsuReplayFrame { Time = time_stack_start - 450, Position = new Vector2(55), Actions = { OsuAction.LeftButton } }, + }); + + addClickActionAssert(0, ClickAction.Ignore); + } + private void addJudgementAssert(OsuHitObject hitObject, HitResult result) { AddAssert($"({hitObject.GetType().ReadableName()} @ {hitObject.StartTime}) judgement is {result}", From 64b36a73b10691c38889fb5ed530e7c08e53c0b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Wed, 23 Aug 2023 12:43:53 +0200 Subject: [PATCH 067/729] Rename test scene to match tested class --- ...eObjectOrderedHitPolicy.cs => TestSceneLegacyHitPolicy.cs} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename osu.Game.Rulesets.Osu.Tests/{TestSceneObjectOrderedHitPolicy.cs => TestSceneLegacyHitPolicy.cs} (99%) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs similarity index 99% rename from osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs rename to osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs index 738d1a0739..6366a185f2 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneObjectOrderedHitPolicy.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs @@ -35,7 +35,7 @@ using osuTK; namespace osu.Game.Rulesets.Osu.Tests { - public partial class TestSceneObjectOrderedHitPolicy : RateAdjustedBeatmapTestScene + public partial class TestSceneLegacyHitPolicy : RateAdjustedBeatmapTestScene { private readonly OsuHitWindows referenceHitWindows; @@ -46,7 +46,7 @@ namespace osu.Game.Rulesets.Osu.Tests /// private readonly string? exportLocation = null; - public TestSceneObjectOrderedHitPolicy() + public TestSceneLegacyHitPolicy() { referenceHitWindows = new OsuHitWindows(); referenceHitWindows.SetDifficulty(0); From ed2b1a07540fe4038b03424abe14582de495b661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Wed, 23 Aug 2023 13:12:18 +0200 Subject: [PATCH 068/729] Contain entirety of legacy notelock badness inside the hit policy --- osu.Game.Rulesets.Osu.Tests/TestSceneHitCircle.cs | 2 +- osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs | 4 ++-- .../Objects/Drawables/DrawableHitCircle.cs | 9 +++------ .../Objects/Drawables/DrawableOsuHitObject.cs | 3 ++- .../Objects/Drawables/DrawableSliderHead.cs | 2 +- osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs | 3 ++- osu.Game.Rulesets.Osu/UI/IHitPolicy.cs | 4 +++- osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs | 6 +++++- osu.Game.Rulesets.Osu/UI/StartTimeOrderedHitPolicy.cs | 5 +++-- 9 files changed, 22 insertions(+), 16 deletions(-) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircle.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircle.cs index c818a361df..af02087d1a 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircle.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircle.cs @@ -131,7 +131,7 @@ namespace osu.Game.Rulesets.Osu.Tests protected override void CheckForResult(bool userTriggered, double timeOffset) { - if (auto && !userTriggered && timeOffset > hitOffset && CheckHittable?.Invoke(this, Time.Current) == ClickAction.Hit) + if (auto && !userTriggered && timeOffset > hitOffset && CheckHittable?.Invoke(this, Time.Current, HitResult.Great) == ClickAction.Hit) { // force success ApplyResult(r => r.Type = HitResult.Great); diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs index 6366a185f2..3accf4fad7 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs @@ -635,9 +635,9 @@ namespace osu.Game.Rulesets.Osu.Tests { public List ClickActions { get; } = new List(); - public override ClickAction CheckHittable(DrawableHitObject hitObject, double time) + public override ClickAction CheckHittable(DrawableHitObject hitObject, double time, HitResult result) { - var action = base.CheckHittable(hitObject, time); + var action = base.CheckHittable(hitObject, time, result); ClickActions.Add(action); return action; } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs index 09d818def8..932f6d3fff 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs @@ -155,15 +155,12 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables } var result = ResultFor(timeOffset); - var clickAction = CheckHittable?.Invoke(this, Time.Current); + var clickAction = CheckHittable?.Invoke(this, Time.Current, result); - if (clickAction == ClickAction.Shake || (result == HitResult.None && clickAction != ClickAction.Ignore)) - { + if (clickAction == ClickAction.Shake) Shake(); - return; - } - if (result == HitResult.None) + if (result == HitResult.None || clickAction != ClickAction.Hit) return; ApplyResult(r => diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs index a8ce2118c8..920dfcab03 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs @@ -13,6 +13,7 @@ using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Judgements; using osu.Game.Rulesets.Osu.Scoring; using osu.Game.Rulesets.Osu.UI; +using osu.Game.Rulesets.Scoring; using osuTK; using osuTK.Graphics; @@ -37,7 +38,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables /// and , and this hit object will be shaken for return values of /// . /// - public Func CheckHittable; + public Func CheckHittable; protected DrawableOsuHitObject(OsuHitObject hitObject) : base(hitObject) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs index a4cf69ee31..41f6a40c0a 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs @@ -61,7 +61,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables pathVersion.BindTo(DrawableSlider.PathVersion); - CheckHittable = (d, t) => DrawableSlider.CheckHittable?.Invoke(d, t) ?? ClickAction.Hit; + CheckHittable = (d, t, r) => DrawableSlider.CheckHittable?.Invoke(d, t, r) ?? ClickAction.Hit; } protected override void Update() diff --git a/osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs index 7503c43e0b..69bd360b5e 100644 --- a/osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs @@ -4,6 +4,7 @@ #nullable disable using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.UI; namespace osu.Game.Rulesets.Osu.UI @@ -15,7 +16,7 @@ namespace osu.Game.Rulesets.Osu.UI { public IHitObjectContainer HitObjectContainer { get; set; } - public ClickAction CheckHittable(DrawableHitObject hitObject, double time) => ClickAction.Hit; + public ClickAction CheckHittable(DrawableHitObject hitObject, double time, HitResult result) => ClickAction.Hit; public void HandleHit(DrawableHitObject hitObject) { diff --git a/osu.Game.Rulesets.Osu/UI/IHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/IHitPolicy.cs index 9820b8c188..44d3b37408 100644 --- a/osu.Game.Rulesets.Osu/UI/IHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/IHitPolicy.cs @@ -3,6 +3,7 @@ using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.UI; namespace osu.Game.Rulesets.Osu.UI @@ -19,8 +20,9 @@ namespace osu.Game.Rulesets.Osu.UI /// /// The to check. /// The time to check. + /// The result that the object would be judged with if hit. /// Whether can be hit at the given . - ClickAction CheckHittable(DrawableHitObject hitObject, double time); + ClickAction CheckHittable(DrawableHitObject hitObject, double time, HitResult result); /// /// Handles a being hit. diff --git a/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs index 6a740a6839..5260215345 100644 --- a/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs @@ -8,6 +8,7 @@ using System.Linq; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables; +using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.UI; namespace osu.Game.Rulesets.Osu.UI @@ -26,7 +27,7 @@ namespace osu.Game.Rulesets.Osu.UI { } - public virtual ClickAction CheckHittable(DrawableHitObject hitObject, double time) + public virtual ClickAction CheckHittable(DrawableHitObject hitObject, double time, HitResult result) { var aliveObjects = HitObjectContainer.AliveObjects.ToList(); int index = aliveObjects.IndexOf(hitObject); @@ -38,6 +39,9 @@ namespace osu.Game.Rulesets.Osu.UI return ClickAction.Ignore; } + if (result == HitResult.None) + return ClickAction.Shake; + foreach (DrawableHitObject testObject in aliveObjects) { if (testObject.AllJudged) diff --git a/osu.Game.Rulesets.Osu/UI/StartTimeOrderedHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/StartTimeOrderedHitPolicy.cs index f33ca58aef..6fd0b512be 100644 --- a/osu.Game.Rulesets.Osu/UI/StartTimeOrderedHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/StartTimeOrderedHitPolicy.cs @@ -8,6 +8,7 @@ using System.Collections.Generic; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables; +using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.UI; namespace osu.Game.Rulesets.Osu.UI @@ -24,7 +25,7 @@ namespace osu.Game.Rulesets.Osu.UI { public IHitObjectContainer HitObjectContainer { get; set; } - public ClickAction CheckHittable(DrawableHitObject hitObject, double time) + public ClickAction CheckHittable(DrawableHitObject hitObject, double time, HitResult _) { DrawableHitObject blockingObject = null; @@ -51,7 +52,7 @@ namespace osu.Game.Rulesets.Osu.UI if (!hitObjectCanBlockFutureHits(hitObject)) return; - if (CheckHittable(hitObject, hitObject.HitObject.StartTime + hitObject.Result.TimeOffset) != ClickAction.Hit) + if (CheckHittable(hitObject, hitObject.HitObject.StartTime + hitObject.Result.TimeOffset, hitObject.Result.Type) != ClickAction.Hit) throw new InvalidOperationException($"A {hitObject} was hit before it became hittable!"); // Miss all hitobjects prior to the hit one. From a3160364603211a7dd1d06e1996c8603d5c700df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Wed, 23 Aug 2023 13:20:38 +0200 Subject: [PATCH 069/729] Add failing test case for special autopilot hittable range --- .../TestSceneLegacyHitPolicy.cs | 43 +++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs index 3accf4fad7..cc5c27a62c 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs @@ -17,6 +17,7 @@ using osu.Game.Beatmaps.ControlPoints; using osu.Game.Beatmaps.Formats; using osu.Game.Replays; using osu.Game.Rulesets.Judgements; +using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Objects.Types; @@ -478,6 +479,32 @@ namespace osu.Game.Rulesets.Osu.Tests addClickActionAssert(0, ClickAction.Ignore); } + [Test] + public void TestAutopilotReducesHittableRange() + { + const double time_circle = 1500; + Vector2 positionCircle = Vector2.Zero; + + var hitObjects = new List + { + new HitCircle + { + StartTime = time_circle, + Position = positionCircle + }, + }; + + performTest(hitObjects, new List + { + new OsuReplayFrame { Time = time_circle - 250, Position = positionCircle, Actions = { OsuAction.LeftButton } } + }, new Mod[] { new OsuModAutopilot() }); + + addJudgementAssert(hitObjects[0], HitResult.Miss); + // note lock prevented the object from being hit, so the judgement offset should be very late. + addJudgementOffsetAssert(hitObjects[0], referenceHitWindows.WindowFor(HitResult.Meh)); + addClickActionAssert(0, ClickAction.Shake); + } + private void addJudgementAssert(OsuHitObject hitObject, HitResult result) { AddAssert($"({hitObject.GetType().ReadableName()} @ {hitObject.StartTime}) judgement is {result}", @@ -503,11 +530,20 @@ namespace osu.Game.Rulesets.Osu.Tests private List judgementResults = null!; private TestLegacyHitPolicy testPolicy = null!; - private void performTest(List hitObjects, List frames, [CallerMemberName] string testCaseName = "") + private void performTest(List hitObjects, List frames, IEnumerable? extraMods = null, [CallerMemberName] string testCaseName = "") { + List mods = null!; IBeatmap playableBeatmap = null!; Score score = null!; + AddStep("set up mods", () => + { + mods = new List { new OsuModClassic() }; + + if (extraMods != null) + mods.AddRange(extraMods); + }); + AddStep("create beatmap", () => { var cpi = new ControlPointInfo(); @@ -550,7 +586,8 @@ namespace osu.Game.Rulesets.Osu.Tests ScoreInfo = { Ruleset = new OsuRuleset().RulesetInfo, - BeatmapInfo = playableBeatmap.BeatmapInfo + BeatmapInfo = playableBeatmap.BeatmapInfo, + Mods = mods.ToArray() } }; }); @@ -584,7 +621,7 @@ namespace osu.Game.Rulesets.Osu.Tests AddStep("load player", () => { - SelectedMods.Value = new[] { new OsuModClassic() }; + SelectedMods.Value = mods.ToArray(); var p = new ScoreAccessibleReplayPlayer(score); From 7f215f163ffc307ce9060e9d32f572162996e5ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Wed, 23 Aug 2023 13:37:39 +0200 Subject: [PATCH 070/729] Use reduced hittable range with autopilot active --- .../TestSceneLegacyHitPolicy.cs | 16 ++++++++++++++-- osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs | 6 +++++- osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs | 14 +++++++++----- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs index cc5c27a62c..b4ab53a658 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs @@ -639,7 +639,12 @@ namespace osu.Game.Rulesets.Osu.Tests AddUntilStep("Beatmap at 0", () => Beatmap.Value.Track.CurrentTime == 0); AddUntilStep("Wait until player is loaded", () => currentPlayer.IsCurrentScreen()); - AddStep("Substitute hit policy", () => currentPlayer.ChildrenOfType().Single().HitPolicy = testPolicy = new TestLegacyHitPolicy()); + AddStep("Substitute hit policy", () => + { + var playfield = currentPlayer.ChildrenOfType().Single(); + var currentPolicy = playfield.HitPolicy; + playfield.HitPolicy = testPolicy = new TestLegacyHitPolicy(currentPolicy); + }); AddUntilStep("Wait for completion", () => currentPlayer.ScoreProcessor.HasCompleted.Value); } @@ -670,11 +675,18 @@ namespace osu.Game.Rulesets.Osu.Tests private class TestLegacyHitPolicy : LegacyHitPolicy { + private readonly IHitPolicy currentPolicy; + + public TestLegacyHitPolicy(IHitPolicy currentPolicy) + { + this.currentPolicy = currentPolicy; + } + public List ClickActions { get; } = new List(); public override ClickAction CheckHittable(DrawableHitObject hitObject, double time, HitResult result) { - var action = base.CheckHittable(hitObject, time, result); + var action = currentPolicy.CheckHittable(hitObject, time, result); ClickActions.Add(action); return action; } diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs b/osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs index 229f80c2bd..82deec41f5 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs @@ -11,6 +11,7 @@ using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; +using osu.Game.Rulesets.Osu.Scoring; using osu.Game.Rulesets.Osu.UI; using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.UI; @@ -57,7 +58,10 @@ namespace osu.Game.Rulesets.Osu.Mods var osuRuleset = (DrawableOsuRuleset)drawableRuleset; if (ClassicNoteLock.Value) - osuRuleset.Playfield.HitPolicy = new LegacyHitPolicy(); + { + double hittableRange = OsuHitWindows.MISS_WINDOW - (drawableRuleset.Mods.OfType().Any() ? 200 : 0); + osuRuleset.Playfield.HitPolicy = new LegacyHitPolicy(hittableRange); + } usingHiddenFading = drawableRuleset.Mods.OfType().SingleOrDefault()?.OnlyFadeApproachCircles.Value == false; } diff --git a/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs index 5260215345..2b6359fb46 100644 --- a/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs @@ -8,6 +8,7 @@ using System.Linq; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables; +using osu.Game.Rulesets.Osu.Scoring; using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.UI; @@ -23,6 +24,13 @@ namespace osu.Game.Rulesets.Osu.UI { public IHitObjectContainer HitObjectContainer { get; set; } + private readonly double hittableRange; + + public LegacyHitPolicy(double hittableRange = OsuHitWindows.MISS_WINDOW) + { + this.hittableRange = hittableRange; + } + public void HandleHit(DrawableHitObject hitObject) { } @@ -57,11 +65,7 @@ namespace osu.Game.Rulesets.Osu.UI return ClickAction.Shake; } - // stable has `const HitObjectManager.HITTABLE_RANGE = 400;`, which is only used for notelock code. - // probably not a coincidence that this is equivalent to lazer's OsuHitWindows.MISS_WINDOW. - - // TODO stable compares to 200 when autopilot is enabled, instead of 400. - return Math.Abs(hitObject.HitObject.StartTime - time) < 400 ? ClickAction.Hit : ClickAction.Shake; + return Math.Abs(hitObject.HitObject.StartTime - time) < hittableRange ? ClickAction.Hit : ClickAction.Shake; } } } From 38e34593911801c0f31a8ca787b142c18f54b9fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Thu, 24 Aug 2023 08:54:38 +0200 Subject: [PATCH 071/729] Fix broken assertion --- osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs index b4ab53a658..2cfbe6611f 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyHitPolicy.cs @@ -198,7 +198,7 @@ namespace osu.Game.Rulesets.Osu.Tests addJudgementAssert(hitObjects[0], HitResult.Meh); addJudgementAssert(hitObjects[1], HitResult.Meh); addJudgementOffsetAssert(hitObjects[0], -190); // time_first_circle - 190 - addJudgementOffsetAssert(hitObjects[0], -90); // time_second_circle - first_circle_time - 90 + addJudgementOffsetAssert(hitObjects[1], -190); // time_second_circle - first_circle_time - 90 addClickActionAssert(0, ClickAction.Hit); addClickActionAssert(1, ClickAction.Hit); } @@ -520,7 +520,7 @@ namespace osu.Game.Rulesets.Osu.Tests private void addJudgementOffsetAssert(OsuHitObject hitObject, double offset) { AddAssert($"({hitObject.GetType().ReadableName()} @ {hitObject.StartTime}) judged at {offset}", - () => judgementResults.Single(r => r.HitObject == hitObject).TimeOffset, () => Is.EqualTo(offset).Within(100)); + () => judgementResults.Single(r => r.HitObject == hitObject).TimeOffset, () => Is.EqualTo(offset).Within(50)); } private void addClickActionAssert(int inputIndex, ClickAction action) From 2e27a476bb3c4b90d08384cfda3da7e60774e278 Mon Sep 17 00:00:00 2001 From: Jamie Taylor Date: Thu, 24 Aug 2023 18:04:47 +0900 Subject: [PATCH 072/729] Re-enable sample playback for `PasswordEntryPopover` and remove `sampleJoin` playback instead --- osu.Game/Graphics/UserInterfaceV2/OsuPopover.cs | 11 +++-------- .../Screens/OnlinePlay/Lounge/DrawableLoungeRoom.cs | 5 ----- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/osu.Game/Graphics/UserInterfaceV2/OsuPopover.cs b/osu.Game/Graphics/UserInterfaceV2/OsuPopover.cs index 2aa42d0d50..551468beb9 100644 --- a/osu.Game/Graphics/UserInterfaceV2/OsuPopover.cs +++ b/osu.Game/Graphics/UserInterfaceV2/OsuPopover.cs @@ -31,8 +31,6 @@ namespace osu.Game.Graphics.UserInterfaceV2 // required due to LoadAsyncComplete() calling PopOut() during load - similar workaround to `OsuDropdownMenu` private bool wasOpened; - protected virtual bool PlayPopInOutSamples => true; - public OsuPopover(bool withPadding = true) { Content.Padding = withPadding ? new MarginPadding(20) : new MarginPadding(); @@ -64,11 +62,8 @@ namespace osu.Game.Graphics.UserInterfaceV2 this.ScaleTo(1, scale_duration, Easing.OutElasticHalf); this.FadeIn(fade_duration, Easing.OutQuint); - if (PlayPopInOutSamples) - { - samplePopIn?.Play(); - wasOpened = true; - } + samplePopIn?.Play(); + wasOpened = true; } protected override void PopOut() @@ -76,7 +71,7 @@ namespace osu.Game.Graphics.UserInterfaceV2 this.ScaleTo(0.7f, scale_duration, Easing.OutQuint); this.FadeOut(fade_duration, Easing.OutQuint); - if (wasOpened && PlayPopInOutSamples) + if (wasOpened) samplePopOut?.Play(); } diff --git a/osu.Game/Screens/OnlinePlay/Lounge/DrawableLoungeRoom.cs b/osu.Game/Screens/OnlinePlay/Lounge/DrawableLoungeRoom.cs index a45583a2ec..5cf2f91ff4 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/DrawableLoungeRoom.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/DrawableLoungeRoom.cs @@ -170,7 +170,6 @@ namespace osu.Game.Screens.OnlinePlay.Lounge if (Room.HasPassword.Value) { - sampleJoin?.Play(); this.ShowPopover(); return true; } @@ -191,10 +190,6 @@ namespace osu.Game.Screens.OnlinePlay.Lounge protected override bool BlockNonPositionalInput => true; - // When a room is clicked, it already plays a click sound, which clashes pretty badly with the pop in sound. - // Dunno about this one. I'd probably remove the click sound from the panel in cases they are password protected and play these pop in / out sounds. - protected override bool PlayPopInOutSamples => false; - public PasswordEntryPopover(Room room) { this.room = room; From 7ef5a71e91a56a3e8340393376a97973ceb3e266 Mon Sep 17 00:00:00 2001 From: Jamie Taylor Date: Thu, 24 Aug 2023 18:13:23 +0900 Subject: [PATCH 073/729] Move PopIn/PopOut sample playback from `WaveOverlayContainer` to `WaveContainer` (so Multiplayer/Lounge plays the samples) --- osu.Game/Graphics/Containers/WaveContainer.cs | 22 +++++++++++++++++++ osu.Game/Overlays/WaveOverlayContainer.cs | 5 +++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/osu.Game/Graphics/Containers/WaveContainer.cs b/osu.Game/Graphics/Containers/WaveContainer.cs index 9fd3d103c9..0b1d44ccba 100644 --- a/osu.Game/Graphics/Containers/WaveContainer.cs +++ b/osu.Game/Graphics/Containers/WaveContainer.cs @@ -2,6 +2,9 @@ // See the LICENCE file in the repository root for full licence text. using System; +using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -32,6 +35,13 @@ namespace osu.Game.Graphics.Containers protected override bool StartHidden => true; + private Sample? samplePopIn; + private Sample? samplePopOut; + protected virtual string PopInSampleName => "UI/wave-pop-in"; + protected virtual string PopOutSampleName => "UI/overlay-big-pop-out"; + + private bool wasShown = false; + public Color4 FirstWaveColour { get => firstWave.Colour; @@ -56,6 +66,13 @@ namespace osu.Game.Graphics.Containers set => fourthWave.Colour = value; } + [BackgroundDependencyLoader(true)] + private void load(AudioManager audio) + { + samplePopIn = audio.Samples.Get(PopInSampleName); + samplePopOut = audio.Samples.Get(PopOutSampleName); + } + public WaveContainer() { Masking = true; @@ -110,6 +127,8 @@ namespace osu.Game.Graphics.Containers w.Show(); contentContainer.MoveToY(0, APPEAR_DURATION, Easing.OutQuint); + samplePopIn?.Play(); + wasShown = true; } protected override void PopOut() @@ -118,6 +137,9 @@ namespace osu.Game.Graphics.Containers w.Hide(); contentContainer.MoveToY(2, DISAPPEAR_DURATION, Easing.In); + + if (wasShown) + samplePopOut?.Play(); } protected override void UpdateAfterChildren() diff --git a/osu.Game/Overlays/WaveOverlayContainer.cs b/osu.Game/Overlays/WaveOverlayContainer.cs index 848d9e60b7..b0ddef5c2b 100644 --- a/osu.Game/Overlays/WaveOverlayContainer.cs +++ b/osu.Game/Overlays/WaveOverlayContainer.cs @@ -18,8 +18,9 @@ namespace osu.Game.Overlays protected override bool StartHidden => true; - protected override string PopInSampleName => "UI/wave-pop-in"; - protected override string PopOutSampleName => "UI/overlay-big-pop-out"; + // `WaveContainer` plays PopIn/PopOut samples, so we disable the overlay-level one as to not double-up sample playback. + protected override string PopInSampleName => ""; + protected override string PopOutSampleName => ""; public const float HORIZONTAL_PADDING = 50; From f4415a5bab9aec67ea77af89c794921dae6a8c4e Mon Sep 17 00:00:00 2001 From: Jamie Taylor Date: Thu, 24 Aug 2023 18:20:36 +0900 Subject: [PATCH 074/729] Add more detail to comment --- osu.Game/Graphics/Containers/WaveContainer.cs | 3 ++- osu.Game/Graphics/UserInterfaceV2/OsuPopover.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/osu.Game/Graphics/Containers/WaveContainer.cs b/osu.Game/Graphics/Containers/WaveContainer.cs index 0b1d44ccba..09d1f7e9a4 100644 --- a/osu.Game/Graphics/Containers/WaveContainer.cs +++ b/osu.Game/Graphics/Containers/WaveContainer.cs @@ -40,7 +40,8 @@ namespace osu.Game.Graphics.Containers protected virtual string PopInSampleName => "UI/wave-pop-in"; protected virtual string PopOutSampleName => "UI/overlay-big-pop-out"; - private bool wasShown = false; + // required due to LoadAsyncComplete() in `VisibilityContainer` calling PopOut() during load - similar workaround to `OsuDropdownMenu` + private bool wasShown; public Color4 FirstWaveColour { diff --git a/osu.Game/Graphics/UserInterfaceV2/OsuPopover.cs b/osu.Game/Graphics/UserInterfaceV2/OsuPopover.cs index 551468beb9..9b4689958c 100644 --- a/osu.Game/Graphics/UserInterfaceV2/OsuPopover.cs +++ b/osu.Game/Graphics/UserInterfaceV2/OsuPopover.cs @@ -28,7 +28,7 @@ namespace osu.Game.Graphics.UserInterfaceV2 protected virtual string PopInSampleName => "UI/overlay-pop-in"; protected virtual string PopOutSampleName => "UI/overlay-pop-out"; - // required due to LoadAsyncComplete() calling PopOut() during load - similar workaround to `OsuDropdownMenu` + // required due to LoadAsyncComplete() in `VisibilityContainer` calling PopOut() during load - similar workaround to `OsuDropdownMenu` private bool wasOpened; public OsuPopover(bool withPadding = true) From b471ab07a62dc225275154efdfd15c46646f0104 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 24 Aug 2023 18:30:59 +0900 Subject: [PATCH 075/729] Fix typo in test step MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bartłomiej Dach --- osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs index 8a38e2a84b..110466f6d5 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs @@ -1016,7 +1016,7 @@ namespace osu.Game.Tests.Visual.SongSelect { List manySets = new List(); - AddStep("Populuate beatmap sets", () => + AddStep("Populate beatmap sets", () => { manySets.Clear(); From 9e94f3809103b6079a158e19050f9bc15829235a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 24 Aug 2023 18:33:15 +0900 Subject: [PATCH 076/729] Fix typo in local variable --- osu.Game/Screens/Select/BeatmapCarousel.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index c5e46a00b6..91d1ced9d9 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -135,7 +135,7 @@ namespace osu.Game.Screens.Select selectedBeatmapSet = null; var selectedSetBefore = selectedBeatmapSet; - var selectedBetmapBefore = selectedBeatmap; + var selectedBeatmapBefore = selectedBeatmap; CarouselRoot newRoot = new CarouselRoot(this); @@ -170,9 +170,9 @@ namespace osu.Game.Screens.Select signalBeatmapsLoaded(); // Restore selection - if (selectedBetmapBefore != null && selectedSetBefore != null && newRoot.BeatmapSetsByID.TryGetValue(selectedSetBefore.BeatmapSet.ID, out var newSelectionCandidates)) + if (selectedBeatmapBefore != null && selectedSetBefore != null && newRoot.BeatmapSetsByID.TryGetValue(selectedSetBefore.BeatmapSet.ID, out var newSelectionCandidates)) { - CarouselBeatmap? found = newSelectionCandidates.SelectMany(s => s.Beatmaps).SingleOrDefault(b => b.BeatmapInfo.ID == selectedBetmapBefore.BeatmapInfo.ID); + CarouselBeatmap? found = newSelectionCandidates.SelectMany(s => s.Beatmaps).SingleOrDefault(b => b.BeatmapInfo.ID == selectedBeatmapBefore.BeatmapInfo.ID); if (found != null) found.State.Value = CarouselItemState.Selected; From 89eeff515b42a9724ffd2e552f9e7d462f848d5a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 25 Aug 2023 00:52:54 +0900 Subject: [PATCH 077/729] Reduce complexity of selection restore --- osu.Game/Screens/Select/BeatmapCarousel.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 91d1ced9d9..d52b5592f8 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -134,8 +134,7 @@ namespace osu.Game.Screens.Select if (selectedBeatmapSet != null && !originalBeatmapSetsDetached.Contains(selectedBeatmapSet.BeatmapSet)) selectedBeatmapSet = null; - var selectedSetBefore = selectedBeatmapSet; - var selectedBeatmapBefore = selectedBeatmap; + var selectedBeatmapBefore = selectedBeatmap?.BeatmapInfo; CarouselRoot newRoot = new CarouselRoot(this); @@ -170,9 +169,9 @@ namespace osu.Game.Screens.Select signalBeatmapsLoaded(); // Restore selection - if (selectedBeatmapBefore != null && selectedSetBefore != null && newRoot.BeatmapSetsByID.TryGetValue(selectedSetBefore.BeatmapSet.ID, out var newSelectionCandidates)) + if (selectedBeatmapBefore != null && newRoot.BeatmapSetsByID.TryGetValue(selectedBeatmapBefore.BeatmapSet!.ID, out var newSelectionCandidates)) { - CarouselBeatmap? found = newSelectionCandidates.SelectMany(s => s.Beatmaps).SingleOrDefault(b => b.BeatmapInfo.ID == selectedBeatmapBefore.BeatmapInfo.ID); + CarouselBeatmap? found = newSelectionCandidates.SelectMany(s => s.Beatmaps).SingleOrDefault(b => b.BeatmapInfo.ID == selectedBeatmapBefore.ID); if (found != null) found.State.Value = CarouselItemState.Selected; From 35cdd6d8661b2b4df2735e4128c3334fd014670f Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 25 Aug 2023 01:07:07 +0900 Subject: [PATCH 078/729] Use `string.Empty` --- osu.Game/Overlays/WaveOverlayContainer.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Overlays/WaveOverlayContainer.cs b/osu.Game/Overlays/WaveOverlayContainer.cs index b0ddef5c2b..0295ff467a 100644 --- a/osu.Game/Overlays/WaveOverlayContainer.cs +++ b/osu.Game/Overlays/WaveOverlayContainer.cs @@ -19,8 +19,8 @@ namespace osu.Game.Overlays protected override bool StartHidden => true; // `WaveContainer` plays PopIn/PopOut samples, so we disable the overlay-level one as to not double-up sample playback. - protected override string PopInSampleName => ""; - protected override string PopOutSampleName => ""; + protected override string PopInSampleName => string.Empty; + protected override string PopOutSampleName => string.Empty; public const float HORIZONTAL_PADDING = 50; From bf0f4fddad3c2c5e6a54b41333fea68daef82b2c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 25 Aug 2023 01:08:22 +0900 Subject: [PATCH 079/729] Localise non-overridden samples --- osu.Game/Graphics/Containers/WaveContainer.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/osu.Game/Graphics/Containers/WaveContainer.cs b/osu.Game/Graphics/Containers/WaveContainer.cs index 09d1f7e9a4..e84cb276a4 100644 --- a/osu.Game/Graphics/Containers/WaveContainer.cs +++ b/osu.Game/Graphics/Containers/WaveContainer.cs @@ -37,8 +37,6 @@ namespace osu.Game.Graphics.Containers private Sample? samplePopIn; private Sample? samplePopOut; - protected virtual string PopInSampleName => "UI/wave-pop-in"; - protected virtual string PopOutSampleName => "UI/overlay-big-pop-out"; // required due to LoadAsyncComplete() in `VisibilityContainer` calling PopOut() during load - similar workaround to `OsuDropdownMenu` private bool wasShown; @@ -70,8 +68,8 @@ namespace osu.Game.Graphics.Containers [BackgroundDependencyLoader(true)] private void load(AudioManager audio) { - samplePopIn = audio.Samples.Get(PopInSampleName); - samplePopOut = audio.Samples.Get(PopOutSampleName); + samplePopIn = audio.Samples.Get("UI/wave-pop-in"); + samplePopOut = audio.Samples.Get("UI/overlay-big-pop-out"); } public WaveContainer() From 4fd165c0a7dc6b9c49cb0e675de6084ed47fbdc0 Mon Sep 17 00:00:00 2001 From: Dreamurrrr <21233238+Dreamurrrr@users.noreply.github.com> Date: Thu, 24 Aug 2023 13:28:17 -0500 Subject: [PATCH 080/729] Update README.md to include VS Code plugin prerequisites --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cf7ce35791..792e2d646a 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Please make sure you have the following prerequisites: - A desktop platform with the [.NET 6.0 SDK](https://dotnet.microsoft.com/download) installed. -When working with the codebase, we recommend using an IDE with intelligent code completion and syntax highlighting, such as the latest version of [Visual Studio](https://visualstudio.microsoft.com/vs/), [JetBrains Rider](https://www.jetbrains.com/rider/) or [Visual Studio Code](https://code.visualstudio.com/). +When working with the codebase, we recommend using an IDE with intelligent code completion and syntax highlighting, such as the latest version of [Visual Studio](https://visualstudio.microsoft.com/vs/), [JetBrains Rider](https://www.jetbrains.com/rider/), or [Visual Studio Code](https://code.visualstudio.com/) with the [EditorConfig](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) and [C#](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) plugin installed. ### Downloading the source code From 84f4fab9cfad4a122a271977ed7902f9e504904b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 25 Aug 2023 18:09:51 +0900 Subject: [PATCH 081/729] Adjust test to actually test diff splitting --- .../SongSelect/TestSceneBeatmapCarousel.cs | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs index 110466f6d5..040b341584 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarousel.cs @@ -505,8 +505,8 @@ namespace osu.Game.Tests.Visual.SongSelect [Test] public void TestAddRemoveDifficultySort() { - const int local_set_count = 1; - const int local_diff_count = 1; + const int local_set_count = 2; + const int local_diff_count = 2; loadBeatmaps(setCount: local_set_count, diffCount: local_diff_count); @@ -515,23 +515,17 @@ namespace osu.Game.Tests.Visual.SongSelect checkVisibleItemCount(false, local_set_count * local_diff_count); var firstAdded = TestResources.CreateTestBeatmapSetInfo(local_diff_count); - var secondAdded = TestResources.CreateTestBeatmapSetInfo(local_diff_count); AddStep("Add new set", () => carousel.UpdateBeatmapSet(firstAdded)); - AddStep("Add new set", () => carousel.UpdateBeatmapSet(secondAdded)); - - checkVisibleItemCount(false, (local_set_count + 2) * local_diff_count); - - AddStep("Remove set", () => carousel.RemoveBeatmapSet(firstAdded)); checkVisibleItemCount(false, (local_set_count + 1) * local_diff_count); - setSelected(local_set_count + 1, 1); - - AddStep("Remove set", () => carousel.RemoveBeatmapSet(secondAdded)); + AddStep("Remove set", () => carousel.RemoveBeatmapSet(firstAdded)); checkVisibleItemCount(false, (local_set_count) * local_diff_count); + setSelected(local_set_count, 1); + waitForSelection(local_set_count); } From 10b14501380320939f43fe715b033970b8af4a2e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 25 Aug 2023 18:10:54 +0900 Subject: [PATCH 082/729] Rename remove method to better explain return type being `IEnumerable` --- osu.Game/Screens/Select/BeatmapCarousel.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index d52b5592f8..a8da5dc742 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -405,7 +405,7 @@ namespace osu.Game.Screens.Select if (selectedBeatmapSet?.BeatmapSet.ID == beatmapSet.ID) previouslySelectedID = selectedBeatmap?.BeatmapInfo.ID; - var removedSets = root.RemoveChild(beatmapSet.ID); + var removedSets = root.RemoveItemsByID(beatmapSet.ID); foreach (var removedSet in removedSets) { @@ -1147,7 +1147,7 @@ namespace osu.Game.Screens.Select base.AddItem(i); } - public IEnumerable RemoveChild(Guid beatmapSetID) + public IEnumerable RemoveItemsByID(Guid beatmapSetID) { if (BeatmapSetsByID.TryGetValue(beatmapSetID, out var carouselBeatmapSets)) { From 8a1fc7c340070e1f04d5ffca1488cfde70a054be Mon Sep 17 00:00:00 2001 From: Givikap120 Date: Sat, 26 Aug 2023 01:20:41 +0300 Subject: [PATCH 083/729] Basic stuff (not working for now) --- osu.Game/Overlays/Mods/ModMapInfoDisplay.cs | 203 ++++++++++++++++++ osu.Game/Overlays/Mods/ModSelectOverlay.cs | 18 ++ osu.Game/Screens/Select/BeatmapDetails.cs | 6 + .../Screens/Select/Details/AdvancedStats.cs | 21 ++ osu.Game/Screens/Select/SongSelect.cs | 3 + 5 files changed, 251 insertions(+) create mode 100644 osu.Game/Overlays/Mods/ModMapInfoDisplay.cs diff --git a/osu.Game/Overlays/Mods/ModMapInfoDisplay.cs b/osu.Game/Overlays/Mods/ModMapInfoDisplay.cs new file mode 100644 index 0000000000..20666391d6 --- /dev/null +++ b/osu.Game/Overlays/Mods/ModMapInfoDisplay.cs @@ -0,0 +1,203 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Allocation; +using osu.Framework.Bindables; +using osu.Framework.Extensions.LocalisationExtensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Graphics.UserInterface; +using osu.Framework.Localisation; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Graphics.UserInterface; +using osu.Game.Screens.Select.Details; +using osu.Game.Localisation; +using osuTK; + + +namespace osu.Game.Overlays.Mods +{ + public partial class ModMapInfoDisplay : Container, IHasCurrentValue + { + public const float HEIGHT = 42; + private const float transition_duration = 200; + + private readonly Box contentBackground; + private readonly Box labelBackground; + private readonly FillFlowContainer content; + + public Bindable Current + { + get => current.Current; + set => current.Current = value; + } + private readonly BindableWithCurrent current = new BindableWithCurrent(); + + [Resolved] + private OsuColour colours { get; set; } = null!; + + [Resolved] + private OverlayColourProvider colourProvider { get; set; } = null!; + + /// + /// Text to display in the left area of the display. + /// + //protected abstract LocalisableString Label { get; } + protected LocalisableString Label => CommonStrings.Finish; + //protected string Label { get; } + + protected virtual float ValueAreaWidth => 56; + + protected virtual string CounterFormat => @"N0"; + + protected override Container Content => content; + + protected readonly RollingCounter Counter; + + public ModMapInfoDisplay() + { + Height = HEIGHT; + AutoSizeAxes = Axes.X; + + InternalChild = new InputBlockingContainer + { + RelativeSizeAxes = Axes.Y, + AutoSizeAxes = Axes.X, + Masking = true, + CornerRadius = ModSelectPanel.CORNER_RADIUS, + Shear = new Vector2(ShearedOverlayContainer.SHEAR, 0), + Children = new Drawable[] + { + contentBackground = new Box + { + Anchor = Anchor.CentreRight, + Origin = Anchor.CentreRight, + RelativeSizeAxes = Axes.Y, + Width = ValueAreaWidth + ModSelectPanel.CORNER_RADIUS + }, + new GridContainer + { + RelativeSizeAxes = Axes.Y, + AutoSizeAxes = Axes.X, + ColumnDimensions = new[] + { + new Dimension(GridSizeMode.AutoSize), + new Dimension(GridSizeMode.Absolute, ValueAreaWidth) + }, + Content = new[] + { + new Drawable[] + { + new Container + { + RelativeSizeAxes = Axes.Y, + AutoSizeAxes = Axes.X, + Masking = true, + CornerRadius = ModSelectPanel.CORNER_RADIUS, + Children = new Drawable[] + { + labelBackground = new Box + { + RelativeSizeAxes = Axes.Both + }, + new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Margin = new MarginPadding { Horizontal = 18 }, + Shear = new Vector2(-ShearedOverlayContainer.SHEAR, 0), + Text = Label, + Font = OsuFont.Default.With(size: 17, weight: FontWeight.SemiBold) + } + } + }, + content = new FillFlowContainer + { + AutoSizeAxes = Axes.Both, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Direction = FillDirection.Horizontal, + Shear = new Vector2(-ShearedOverlayContainer.SHEAR, 0), + Spacing = new Vector2(2, 0), + Child = Counter = new EffectCounter(CounterFormat) + { + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft, + Current = { BindTarget = Current.Value.StarRating } + } + } + } + } + } + } + }; + } + + [BackgroundDependencyLoader] + private void load() + { + labelBackground.Colour = colourProvider.Background4; + } + + protected override void LoadComplete() + { + Current.BindValueChanged(e => + { + //var effect = CalculateEffectForComparison(e.NewValue.CompareTo(Current.Default)); + setColours(e.NewValue.StarRating.Value); + }, true); + } + + /// + /// Fades colours of text and its background according to displayed value. + /// + /// random number. + private void setColours(double stars) + { + contentBackground.FadeColour(colours.ForStarDifficulty(stars), transition_duration, Easing.OutQuint); + } + + /// + /// Converts signed integer into . Negative values are counted as difficulty reduction, positive as increase. + /// + /// Value to convert. Will arrive from comparison between bindable once it changes and it's . + /// Effect of the value. + protected virtual ModEffect CalculateEffectForComparison(int comparison) + { + if (comparison == 0) + return ModEffect.NotChanged; + if (comparison < 0) + return ModEffect.DifficultyReduction; + + return ModEffect.DifficultyIncrease; + } + + protected enum ModEffect + { + NotChanged, + DifficultyReduction, + DifficultyIncrease + } + + private partial class EffectCounter : RollingCounter + { + private readonly string? format; + + public EffectCounter(string? format) + { + this.format = format; + } + + protected override double RollingDuration => 500; + + protected override LocalisableString FormatCount(double count) => count.ToLocalisableString(format); + + protected override OsuSpriteText CreateSpriteText() => new OsuSpriteText + { + Font = OsuFont.Default.With(size: 17, weight: FontWeight.SemiBold) + }; + } + } +} diff --git a/osu.Game/Overlays/Mods/ModSelectOverlay.cs b/osu.Game/Overlays/Mods/ModSelectOverlay.cs index 9e92e9d959..ef5f6cf323 100644 --- a/osu.Game/Overlays/Mods/ModSelectOverlay.cs +++ b/osu.Game/Overlays/Mods/ModSelectOverlay.cs @@ -25,6 +25,7 @@ using osu.Game.Graphics.UserInterface; using osu.Game.Input.Bindings; using osu.Game.Localisation; using osu.Game.Rulesets.Mods; +using osu.Game.Screens.Select.Details; using osu.Game.Utils; using osuTK; using osuTK.Input; @@ -123,6 +124,7 @@ namespace osu.Game.Overlays.Mods private Container aboveColumnsContent = null!; private DifficultyMultiplierDisplay? multiplierDisplay; + private ModMapInfoDisplay mapInfoDisplay = null!; protected ShearedButton BackButton { get; private set; } = null!; protected ShearedToggleButton? CustomisationButton { get; private set; } @@ -219,6 +221,12 @@ namespace osu.Game.Overlays.Mods }); } + aboveColumnsContent.Add(mapInfoDisplay = new ModMapInfoDisplay + { + Anchor = Anchor.TopLeft, + Origin = Anchor.TopLeft + }); + FooterContent.Child = footerButtonFlow = new FillFlowContainer { RelativeSizeAxes = Axes.X, @@ -244,6 +252,10 @@ namespace osu.Game.Overlays.Mods globalAvailableMods.BindTo(game.AvailableMods); } + public void SetBindedMapStats(Bindable stats) + { + mapInfoDisplay.Current = stats; + } public override void Hide() { base.Hide(); @@ -399,6 +411,12 @@ namespace osu.Game.Overlays.Mods multiplierDisplay.Current.Value = multiplier; } + private void updateMapInfo() + { + if (mapInfoDisplay == null) + return; + } + private void updateCustomisation() { if (CustomisationButton == null) diff --git a/osu.Game/Screens/Select/BeatmapDetails.cs b/osu.Game/Screens/Select/BeatmapDetails.cs index 712b610515..c56411bef5 100644 --- a/osu.Game/Screens/Select/BeatmapDetails.cs +++ b/osu.Game/Screens/Select/BeatmapDetails.cs @@ -3,6 +3,7 @@ using System.Linq; using osu.Framework.Allocation; +using osu.Framework.Bindables; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -273,6 +274,11 @@ namespace osu.Game.Screens.Select loading.Hide(); } + public Bindable GetBindedAdjustedMapStats() + { + return advanced.AdjustedMapStats.GetBoundCopy(); + } + private partial class DetailBox : Container { private readonly Container content; diff --git a/osu.Game/Screens/Select/Details/AdvancedStats.cs b/osu.Game/Screens/Select/Details/AdvancedStats.cs index a383298faa..016e4ff2df 100644 --- a/osu.Game/Screens/Select/Details/AdvancedStats.cs +++ b/osu.Game/Screens/Select/Details/AdvancedStats.cs @@ -113,6 +113,8 @@ namespace osu.Game.Screens.Select.Details updateStatistics(); } + public Bindable AdjustedMapStats = new Bindable(); + private void updateStatistics() { IBeatmapDifficultyInfo baseDifficulty = BeatmapInfo?.Difficulty; @@ -146,6 +148,14 @@ namespace osu.Game.Screens.Select.Details ApproachRate.Value = (baseDifficulty?.ApproachRate ?? 0, adjustedDifficulty?.ApproachRate); updateStarDifficulty(); + + var temp = AdjustedMapStats.Value; + temp.CS.Value = FirstValue.Value.adjustedValue ?? 0; + temp.HP.Value = HpDrain.Value.adjustedValue ?? 0; + temp.OD.Value = Accuracy.Value.adjustedValue ?? 0; + temp.AR.Value = ApproachRate.Value.adjustedValue ?? 5; + AdjustedMapStats.Value = temp; + } private CancellationTokenSource starDifficultyCancellationSource; @@ -178,6 +188,11 @@ namespace osu.Game.Screens.Select.Details return; starDifficulty.Value = ((float)normalDifficulty.Value.Stars, (float)moddedDifficulty.Value.Stars); + + var temp = AdjustedMapStats.Value; + temp.StarRating.Value = moddedDifficulty.Value.Stars; + AdjustedMapStats.Value = temp; + }), starDifficultyCancellationSource.Token, TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.Current); }); @@ -296,4 +311,10 @@ namespace osu.Game.Screens.Select.Details } } } + public struct MapStats + { + public Bindable StarRating; + public Bindable MinBPM, MaxBPM, AvgBPM; + public Bindable CS, HP, AR, OD; + } } diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 58755878d0..17b1b1f870 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -305,6 +305,9 @@ namespace osu.Game.Screens.Select // therein it will be registered at the `OsuGame` level to properly function as a blocking overlay. LoadComponent(ModSelect = CreateModSelectOverlay()); + var bindedStats = BeatmapDetails.Details.GetBindedAdjustedMapStats(); + ModSelect.SetBindedMapStats(bindedStats); + if (Footer != null) { foreach (var (button, overlay) in CreateFooterButtons()) From e77581f64134f7c75b36776d223d7812bb9e4b42 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Sun, 27 Aug 2023 01:25:50 +0300 Subject: [PATCH 084/729] `wholeSpins` -> `currentSpins` --- .../Objects/Drawables/DrawableSpinner.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs index 0ceda1d4b0..2d2a4a05ac 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs @@ -286,7 +286,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables private static readonly int score_per_tick = new SpinnerBonusTick.OsuSpinnerBonusTickJudgement().MaxNumericResult; - private int wholeSpins; + private int currentSpins; private void updateBonusScore() { @@ -295,14 +295,14 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables int spins = (int)(Result.RateAdjustedRotation / 360); - if (spins < wholeSpins) + if (spins < currentSpins) { // rewinding, silently handle - wholeSpins = spins; + currentSpins = spins; return; } - while (wholeSpins != spins) + while (currentSpins != spins) { var tick = ticks.FirstOrDefault(t => !t.Result.HasResult); @@ -315,7 +315,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables gainedBonus.Value = score_per_tick * (spins - HitObject.SpinsRequired); } - wholeSpins++; + currentSpins++; } } } From d614e745b8ff9e45bd46093741d810b18d255203 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Sun, 27 Aug 2023 01:27:19 +0300 Subject: [PATCH 085/729] Calculate spinner ticks as "whole spins" without arbitrary factors --- osu.Game.Rulesets.Osu/Objects/Spinner.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Spinner.cs b/osu.Game.Rulesets.Osu/Objects/Spinner.cs index b800b03c92..f32c6ae979 100644 --- a/osu.Game.Rulesets.Osu/Objects/Spinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Spinner.cs @@ -42,15 +42,10 @@ namespace osu.Game.Rulesets.Osu.Objects { base.ApplyDefaultsToSelf(controlPointInfo, difficulty); - // spinning doesn't match 1:1 with stable, so let's fudge them easier for the time being. - const double stable_matching_fudge = 0.6; - - // close to 477rpm - const double maximum_rotations_per_second = 8; + const double maximum_rotations_per_second = 477f / 60f; double secondsDuration = Duration / 1000; - - double minimumRotationsPerSecond = stable_matching_fudge * IBeatmapDifficultyInfo.DifficultyRange(difficulty.OverallDifficulty, 3, 5, 7.5); + double minimumRotationsPerSecond = IBeatmapDifficultyInfo.DifficultyRange(difficulty.OverallDifficulty, 1.5, 2.5, 3.75); SpinsRequired = (int)(secondsDuration * minimumRotationsPerSecond); MaximumBonusSpins = (int)((maximum_rotations_per_second - minimumRotationsPerSecond) * secondsDuration); From 3bcddf3cc8cb76f9ad154e4baeb39d30fc306e64 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Sun, 27 Aug 2023 01:27:48 +0300 Subject: [PATCH 086/729] Add gap of two whole spins before achieving bonus score --- .../Objects/Drawables/DrawableSpinner.cs | 2 +- osu.Game.Rulesets.Osu/Objects/Spinner.cs | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs index 2d2a4a05ac..20bbb9a1d1 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs @@ -312,7 +312,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables tick.TriggerResult(true); if (tick is DrawableSpinnerBonusTick) - gainedBonus.Value = score_per_tick * (spins - HitObject.SpinsRequired); + gainedBonus.Value = score_per_tick * (spins - HitObject.FirstBonusSpin); } currentSpins++; diff --git a/osu.Game.Rulesets.Osu/Objects/Spinner.cs b/osu.Game.Rulesets.Osu/Objects/Spinner.cs index f32c6ae979..a26cb7b090 100644 --- a/osu.Game.Rulesets.Osu/Objects/Spinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Spinner.cs @@ -31,11 +31,21 @@ namespace osu.Game.Rulesets.Osu.Objects /// public int SpinsRequired { get; protected set; } = 1; + /// + /// The gap between spinner completion and the first bonus-awarding spin. + /// + private const int bonus_spins_gap = 2; + /// /// Number of spins available to give bonus, beyond . /// public int MaximumBonusSpins { get; protected set; } = 1; + /// + /// The first spin awarding bonus score. + /// + public int FirstBonusSpin => SpinsRequired + bonus_spins_gap; + public override Vector2 StackOffset => Vector2.Zero; protected override void ApplyDefaultsToSelf(ControlPointInfo controlPointInfo, IBeatmapDifficultyInfo difficulty) @@ -48,14 +58,14 @@ namespace osu.Game.Rulesets.Osu.Objects double minimumRotationsPerSecond = IBeatmapDifficultyInfo.DifficultyRange(difficulty.OverallDifficulty, 1.5, 2.5, 3.75); SpinsRequired = (int)(secondsDuration * minimumRotationsPerSecond); - MaximumBonusSpins = (int)((maximum_rotations_per_second - minimumRotationsPerSecond) * secondsDuration); + MaximumBonusSpins = (int)((maximum_rotations_per_second - minimumRotationsPerSecond) * secondsDuration) - bonus_spins_gap; } protected override void CreateNestedHitObjects(CancellationToken cancellationToken) { base.CreateNestedHitObjects(cancellationToken); - int totalSpins = MaximumBonusSpins + SpinsRequired; + int totalSpins = MaximumBonusSpins + SpinsRequired + bonus_spins_gap; for (int i = 0; i < totalSpins; i++) { @@ -63,7 +73,7 @@ namespace osu.Game.Rulesets.Osu.Objects double startTime = StartTime + (float)(i + 1) / totalSpins * Duration; - AddNested(i < SpinsRequired + AddNested(i < FirstBonusSpin ? new SpinnerTick { StartTime = startTime, SpinnerDuration = Duration } : new SpinnerBonusTick { StartTime = startTime, SpinnerDuration = Duration, Samples = new[] { CreateHitSampleInfo("spinnerbonus") } }); } From 3a6920c3067f90c53578d021f3ecf7e89d368c71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Mon, 28 Aug 2023 09:51:37 +0200 Subject: [PATCH 087/729] Add failing test coverage of beatmap update flow w/ split diffs --- .../TestSceneUpdateBeatmapSetButton.cs | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneUpdateBeatmapSetButton.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneUpdateBeatmapSetButton.cs index 11d55bc0bd..585d93d3af 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneUpdateBeatmapSetButton.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneUpdateBeatmapSetButton.cs @@ -15,6 +15,7 @@ using osu.Game.Overlays; using osu.Game.Overlays.Dialog; using osu.Game.Screens.Select; using osu.Game.Screens.Select.Carousel; +using osu.Game.Screens.Select.Filter; using osu.Game.Tests.Online; using osu.Game.Tests.Resources; using osuTK.Input; @@ -192,6 +193,57 @@ namespace osu.Game.Tests.Visual.SongSelect AddStep("release mouse button", () => InputManager.ReleaseButton(MouseButton.Left)); } + [Test] + public void TestSplitDisplay() + { + ArchiveDownloadRequest? downloadRequest = null; + + AddStep("set difficulty sort mode", () => carousel.Filter(new FilterCriteria { Sort = SortMode.Difficulty })); + AddStep("update online hash", () => + { + testBeatmapSetInfo.Beatmaps.First().OnlineMD5Hash = "different hash"; + testBeatmapSetInfo.Beatmaps.First().LastOnlineUpdate = DateTimeOffset.Now; + + carousel.UpdateBeatmapSet(testBeatmapSetInfo); + }); + + AddUntilStep("multiple \"sets\" visible", () => carousel.ChildrenOfType().Count(), () => Is.GreaterThan(1)); + AddUntilStep("update button visible", getUpdateButton, () => Is.Not.Null); + + AddStep("click button", () => getUpdateButton()?.TriggerClick()); + + AddUntilStep("wait for download started", () => + { + downloadRequest = beatmapDownloader.GetExistingDownload(testBeatmapSetInfo); + return downloadRequest != null; + }); + + AddUntilStep("wait for button disabled", () => getUpdateButton()?.Enabled.Value == false); + + AddUntilStep("progress download to completion", () => + { + if (downloadRequest is TestSceneOnlinePlayBeatmapAvailabilityTracker.TestDownloadRequest testRequest) + { + testRequest.SetProgress(testRequest.Progress + 0.1f); + + if (testRequest.Progress >= 1) + { + testRequest.TriggerSuccess(); + + // usually this would be done by the import process. + testBeatmapSetInfo.Beatmaps.First().MD5Hash = "different hash"; + testBeatmapSetInfo.Beatmaps.First().LastOnlineUpdate = DateTimeOffset.Now; + + // usually this would be done by a realm subscription. + carousel.UpdateBeatmapSet(testBeatmapSetInfo); + return true; + } + } + + return false; + }); + } + private BeatmapCarousel createCarousel() { return carousel = new BeatmapCarousel From 6251803868588f188ca7b78f74ad4c9e18d4b10b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Mon, 28 Aug 2023 10:02:05 +0200 Subject: [PATCH 088/729] Add failing test coverage of selection not being retained on song select --- .../TestSceneBeatmapEditorNavigation.cs | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/osu.Game.Tests/Visual/Navigation/TestSceneBeatmapEditorNavigation.cs b/osu.Game.Tests/Visual/Navigation/TestSceneBeatmapEditorNavigation.cs index 54ee1659e1..d0fa5fc737 100644 --- a/osu.Game.Tests/Visual/Navigation/TestSceneBeatmapEditorNavigation.cs +++ b/osu.Game.Tests/Visual/Navigation/TestSceneBeatmapEditorNavigation.cs @@ -9,6 +9,7 @@ using osu.Framework.Extensions.ObjectExtensions; using osu.Framework.Screens; using osu.Framework.Testing; using osu.Game.Beatmaps; +using osu.Game.Configuration; using osu.Game.Database; using osu.Game.Rulesets.Mania; using osu.Game.Rulesets.Osu; @@ -16,6 +17,7 @@ using osu.Game.Screens.Edit; using osu.Game.Screens.Edit.GameplayTest; using osu.Game.Screens.Menu; using osu.Game.Screens.Select; +using osu.Game.Screens.Select.Filter; using osu.Game.Tests.Resources; using osuTK.Input; @@ -203,6 +205,33 @@ namespace osu.Game.Tests.Visual.Navigation AddUntilStep("wait for music stopped", () => !Game.MusicController.IsPlaying); } + [TestCase(SortMode.Title)] + [TestCase(SortMode.Difficulty)] + public void TestSelectionRetainedOnExit(SortMode sortMode) + { + BeatmapSetInfo beatmapSet = null!; + + AddStep("import test beatmap", () => Game.BeatmapManager.Import(TestResources.GetTestBeatmapForImport()).WaitSafely()); + AddStep("retrieve beatmap", () => beatmapSet = Game.BeatmapManager.QueryBeatmapSet(set => !set.Protected).AsNonNull().Value.Detach()); + + AddStep($"set sort mode to {sortMode}", () => Game.LocalConfig.SetValue(OsuSetting.SongSelectSortingMode, sortMode)); + AddStep("present beatmap", () => Game.PresentBeatmap(beatmapSet)); + AddUntilStep("wait for song select", + () => Game.Beatmap.Value.BeatmapSetInfo.Equals(beatmapSet) + && Game.ScreenStack.CurrentScreen is PlaySongSelect songSelect + && songSelect.IsLoaded); + + AddStep("open editor", () => ((PlaySongSelect)Game.ScreenStack.CurrentScreen).Edit(beatmapSet.Beatmaps.First(beatmap => beatmap.Ruleset.OnlineID == 0))); + AddUntilStep("wait for editor open", () => Game.ScreenStack.CurrentScreen is Editor editor && editor.ReadyForUse); + + AddStep("exit editor", () => InputManager.Key(Key.Escape)); + AddUntilStep("wait for editor exit", () => Game.ScreenStack.CurrentScreen is not Editor); + + AddUntilStep("selection retained on song select", + () => Game.Beatmap.Value.BeatmapInfo.ID, + () => Is.EqualTo(beatmapSet.Beatmaps.First(b => b.Ruleset.OnlineID == 0).ID)); + } + private EditorBeatmap getEditorBeatmap() => getEditor().ChildrenOfType().Single(); private Editor getEditor() => (Editor)Game.ScreenStack.CurrentScreen; From 0af6cc1394f7fe521bdf94773b423b5ff61c2bb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Mon, 28 Aug 2023 10:02:30 +0200 Subject: [PATCH 089/729] Fix online ID not being propagated in split difficulty mode Would result in failures to re-download the beatmap in update flows, for instance. --- osu.Game/Screens/Select/BeatmapCarousel.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index a8da5dc742..0354e72803 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -145,6 +145,7 @@ namespace osu.Game.Screens.Select return createCarouselSet(new BeatmapSetInfo(new[] { b }) { ID = b.BeatmapSet!.ID, + OnlineID = b.BeatmapSet!.OnlineID }); }).OfType(); @@ -422,7 +423,8 @@ namespace osu.Game.Screens.Select { var newSet = createCarouselSet(new BeatmapSetInfo(new[] { beatmap }) { - ID = beatmapSet.ID + ID = beatmapSet.ID, + OnlineID = beatmapSet.OnlineID }); if (newSet != null) From 80ec18d117fc7ae252731bcde4e65a71be838ad8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Mon, 28 Aug 2023 10:06:26 +0200 Subject: [PATCH 090/729] Fix incorrect selection restore code in split case The fallback to "any of the added sets" needs to be applied after they've all been added, rather than with every added one. Otherwise, in flows that expect a particular difficulty to be selected in the end (such as exiting from editor) would end up switching away from the edited beatmap. --- osu.Game/Screens/Select/BeatmapCarousel.cs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 0354e72803..861385f453 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -419,6 +419,8 @@ namespace osu.Game.Screens.Select if (beatmapsSplitOut) { + var newSets = new List(); + foreach (var beatmap in beatmapSet.Beatmaps) { var newSet = createCarouselSet(new BeatmapSetInfo(new[] { beatmap }) @@ -429,13 +431,18 @@ namespace osu.Game.Screens.Select if (newSet != null) { + newSets.Add(newSet); root.AddItem(newSet); - - // check if we can/need to maintain our current selection. - if (previouslySelectedID != null) - select((CarouselItem?)newSet.Beatmaps.FirstOrDefault(b => b.BeatmapInfo.ID == previouslySelectedID) ?? newSet); } } + + // check if we can/need to maintain our current selection. + if (previouslySelectedID != null) + { + var toSelect = newSets.FirstOrDefault(s => s.Beatmaps.Any(b => b.BeatmapInfo.ID == previouslySelectedID)) + ?? newSets.FirstOrDefault(); + select(toSelect); + } } else { From b9795eb3d4e09d66c9e2950da6e8742637dd8dca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Mon, 28 Aug 2023 11:02:22 +0200 Subject: [PATCH 091/729] Fix changes to beatmap sets being undone on switching sort mode --- osu.Game/Screens/Select/BeatmapCarousel.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 861385f453..9ea94b2a52 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -78,7 +78,7 @@ namespace osu.Game.Screens.Select private CarouselBeatmapSet? selectedBeatmapSet; - private IEnumerable originalBeatmapSetsDetached = Enumerable.Empty(); + private List originalBeatmapSetsDetached = new List(); /// /// Raised when the is changed. @@ -381,6 +381,8 @@ namespace osu.Game.Screens.Select if (!root.BeatmapSetsByID.TryGetValue(beatmapSetID, out var existingSets)) return; + originalBeatmapSetsDetached.RemoveAll(set => set.ID == beatmapSetID); + foreach (var set in existingSets) { foreach (var beatmap in set.Beatmaps) @@ -402,6 +404,9 @@ namespace osu.Game.Screens.Select { Guid? previouslySelectedID = null; + originalBeatmapSetsDetached.RemoveAll(set => set.ID == beatmapSet.ID); + originalBeatmapSetsDetached.Add(beatmapSet.Detach()); + // If the selected beatmap is about to be removed, store its ID so it can be re-selected if required if (selectedBeatmapSet?.BeatmapSet.ID == beatmapSet.ID) previouslySelectedID = selectedBeatmap?.BeatmapInfo.ID; From ba1f6439bf0dc3d5d283c5cf32ce35d8b93acebc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Mon, 28 Aug 2023 12:44:57 +0200 Subject: [PATCH 092/729] Disable redundant verbatim string prefix inspections For some reason this started flaring up recently all over for me and showing inspections all over, which are _technically_ valid, but interfere with our convention of using verbatim string prefixes to denote non-localisable strings. This, as a result, led to circular inspections (addressing the r# inspection results in getting the osu-localisation-analyser one, addresssing that one results in getting the r# inspection back, etc. ad nauseam). --- osu.sln.DotSettings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.sln.DotSettings b/osu.sln.DotSettings index ef39c12768..c2778ca5b1 100644 --- a/osu.sln.DotSettings +++ b/osu.sln.DotSettings @@ -170,7 +170,7 @@ ERROR WARNING WARNING - HINT + DO_NOT_SHOW WARNING WARNING WARNING From 99d5ff9efbd7b7197497acd53f757345dc1666b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Mon, 28 Aug 2023 13:50:52 +0200 Subject: [PATCH 093/729] Switch download requests to new API endpoint This API endpoint is intended for usage with the entire `solo_scores` machinery and ID schema, rather than the legacy `*_scores_high` ID schema. It also supports automagically falling back to downloading legacy replays if a stable-imported score is requested for download (internally this happens via `legacy_score_id` in the `data` json). This change will allow replays to be downloaded, but it will still not yield 100% correct behaviour, as there is further work to be done in that respect. The download tracker is expecting score hashes to arrive from web to verify the integrity of the incoming download, but the API does not expose such a facility right now; we will have to decide as to whether we want to add one web-side, or whether we want to disable the checking client-side. --- osu.Game/Online/API/Requests/DownloadReplayRequest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Online/API/Requests/DownloadReplayRequest.cs b/osu.Game/Online/API/Requests/DownloadReplayRequest.cs index 77174f0bb5..3ea57cf637 100644 --- a/osu.Game/Online/API/Requests/DownloadReplayRequest.cs +++ b/osu.Game/Online/API/Requests/DownloadReplayRequest.cs @@ -14,6 +14,6 @@ namespace osu.Game.Online.API.Requests protected override string FileExtension => ".osr"; - protected override string Target => $@"scores/{Model.Ruleset.ShortName}/{Model.OnlineID}/download"; + protected override string Target => $@"scores/{Model.OnlineID}/download"; } } From 118c86df342340da729c3931a4c58a1ed72e0f12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Mon, 28 Aug 2023 14:57:00 +0200 Subject: [PATCH 094/729] Fix `TestSceneUpdateBeatmapSetButton` using random difficulty count --- .../Visual/SongSelect/TestSceneUpdateBeatmapSetButton.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneUpdateBeatmapSetButton.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneUpdateBeatmapSetButton.cs index 585d93d3af..6d97be730b 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneUpdateBeatmapSetButton.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneUpdateBeatmapSetButton.cs @@ -251,7 +251,7 @@ namespace osu.Game.Tests.Visual.SongSelect RelativeSizeAxes = Axes.Both, BeatmapSets = new List { - (testBeatmapSetInfo = TestResources.CreateTestBeatmapSetInfo()), + (testBeatmapSetInfo = TestResources.CreateTestBeatmapSetInfo(5)), } }; } From 07e126241da902fcf7471e28576c5204fc8b826d Mon Sep 17 00:00:00 2001 From: Wleter Date: Mon, 28 Aug 2023 16:41:55 +0200 Subject: [PATCH 095/729] working negative scaling --- .../SkinEditor/SkinSelectionHandler.cs | 41 ++++++------------- .../Edit/Compose/Components/SelectionBox.cs | 2 + .../SelectionBoxDragHandleContainer.cs | 12 ++++++ 3 files changed, 27 insertions(+), 28 deletions(-) diff --git a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs index c90a1d8edf..ae0a3d0635 100644 --- a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs +++ b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs @@ -31,8 +31,6 @@ namespace osu.Game.Overlays.SkinEditor UpdatePosition = updateDrawablePosition }; - private float accumulatedNegativeScaling; - public override bool HandleScale(Vector2 scale, Anchor anchor) { // convert scale to screen space @@ -73,32 +71,25 @@ namespace osu.Game.Overlays.SkinEditor scale.Y = scale.X / selectionRect.Width * selectionRect.Height; } - // If scaling reverses the selection, don't scale and accumulate the amount of scaling. - if (adjustedRect.Width + scale.X < 0 || adjustedRect.Height + scale.Y < 0) - { - accumulatedNegativeScaling += scale.Length; // - new Vector2(selectionRect.Width, selectionRect.Height).Length; - - return true; - } - - // Compensate for accumulated negative scaling. - if (Precision.AlmostBigger(accumulatedNegativeScaling, 0) && !Precision.AlmostEquals(accumulatedNegativeScaling, 0)) - { - float length = scale.Length; - accumulatedNegativeScaling -= length; - - // If the accumulated negative scaling is still positive, don't scale. - if (Precision.AlmostBigger(accumulatedNegativeScaling, 0)) return true; - scale *= Math.Abs(accumulatedNegativeScaling) / length; - accumulatedNegativeScaling = 0; - } - if (anchor.HasFlagFast(Anchor.x0)) adjustedRect.X -= scale.X; if (anchor.HasFlagFast(Anchor.y0)) adjustedRect.Y -= scale.Y; adjustedRect.Width += scale.X; adjustedRect.Height += scale.Y; + if (adjustedRect.Width < 0) + { + SelectionBox.ScaleHandlesFlip(Direction.Horizontal); + HandleFlip(Direction.Horizontal, false); + } + if (adjustedRect.Height < 0) + { + SelectionBox.ScaleHandlesFlip(Direction.Vertical); + HandleFlip(Direction.Vertical, false); + } + if (adjustedRect.Width < 0 || adjustedRect.Height < 0) + return true; + // scale adjust applied to each individual item should match that of the quad itself. var scaledDelta = new Vector2( adjustedRect.Width / selectionRect.Width, @@ -169,12 +160,6 @@ namespace osu.Game.Overlays.SkinEditor public static void ApplyClosestAnchor(Drawable drawable) => applyAnchor(drawable, getClosestAnchor(drawable)); - protected override void OnOperationEnded() - { - base.OnOperationEnded(); - accumulatedNegativeScaling = 0; - } - protected override void OnSelectionChanged() { base.OnSelectionChanged(); diff --git a/osu.Game/Screens/Edit/Compose/Components/SelectionBox.cs b/osu.Game/Screens/Edit/Compose/Components/SelectionBox.cs index 876e8ccbe9..a261b635b3 100644 --- a/osu.Game/Screens/Edit/Compose/Components/SelectionBox.cs +++ b/osu.Game/Screens/Edit/Compose/Components/SelectionBox.cs @@ -307,6 +307,8 @@ namespace osu.Game.Screens.Edit.Compose.Components return button; } + public void ScaleHandlesFlip(Direction direction) => dragHandles.ScaleHandlesFlip(direction); + private void addScaleHandle(Anchor anchor) { var handle = new SelectionBoxScaleHandle diff --git a/osu.Game/Screens/Edit/Compose/Components/SelectionBoxDragHandleContainer.cs b/osu.Game/Screens/Edit/Compose/Components/SelectionBoxDragHandleContainer.cs index 5c87271493..4fd2e9aba9 100644 --- a/osu.Game/Screens/Edit/Compose/Components/SelectionBoxDragHandleContainer.cs +++ b/osu.Game/Screens/Edit/Compose/Components/SelectionBoxDragHandleContainer.cs @@ -7,6 +7,7 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; using osu.Framework.Allocation; +using osu.Framework.Extensions.EnumExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -69,6 +70,17 @@ namespace osu.Game.Screens.Edit.Compose.Components allDragHandles.Add(handle); } + public void ScaleHandlesFlip(Direction direction) + { + foreach (var handle in scaleHandles) + { + if (direction == Direction.Horizontal && !handle.Anchor.HasFlagFast(Anchor.x1)) + handle.Anchor ^= Anchor.x0 | Anchor.x2; + if (direction == Direction.Vertical && !handle.Anchor.HasFlagFast(Anchor.y1)) + handle.Anchor ^= Anchor.y0 | Anchor.y2; + } + } + private SelectionBoxRotationHandle displayedRotationHandle; private SelectionBoxDragHandle activeHandle; From 390b6f649dd9b9c6408d96b8a9347ba71b12c4a1 Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Tue, 29 Aug 2023 03:46:11 +0900 Subject: [PATCH 096/729] Add test --- .../Mods/TestSceneManiaModDoubleTime.cs | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModDoubleTime.cs diff --git a/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModDoubleTime.cs b/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModDoubleTime.cs new file mode 100644 index 0000000000..08e83b04b5 --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModDoubleTime.cs @@ -0,0 +1,65 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Collections.Generic; +using NUnit.Framework; +using osu.Game.Beatmaps; +using osu.Game.Rulesets.Mania.Mods; +using osu.Game.Rulesets.Mania.Objects; +using osu.Game.Rulesets.Mania.Replays; +using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Replays; +using osu.Game.Tests.Visual; + +namespace osu.Game.Rulesets.Mania.Tests.Mods +{ + public partial class TestSceneManiaModDoubleTime : ModTestScene + { + private const double offset = 18; + + protected override Ruleset CreatePlayerRuleset() => new ManiaRuleset(); + + [Test] + public void TestHitWindowWithoutDoubleTime() => CreateModTest(new ModTestData + { + Mod = new ModNoMod(), + PassCondition = () => Player.ScoreProcessor.JudgedHits > 0 && Player.ScoreProcessor.Accuracy.Value != 1, + Autoplay = false, + Beatmap = new Beatmap + { + BeatmapInfo = { Ruleset = new ManiaRuleset().RulesetInfo }, + Difficulty = { OverallDifficulty = 10 }, + HitObjects = new List + { + new Note { StartTime = 1000 } + }, + }, + ReplayFrames = new List + { + new ManiaReplayFrame(1000 + offset, ManiaAction.Key1) + } + }); + + [Test] + public void TestHitWindowWithDoubleTime() => CreateModTest(new ModTestData + { + Mod = new ManiaModDoubleTime(), + PassCondition = () => Player.ScoreProcessor.JudgedHits > 0 && Player.ScoreProcessor.Accuracy.Value == 1, + Autoplay = false, + Beatmap = new Beatmap + { + BeatmapInfo = { Ruleset = new ManiaRuleset().RulesetInfo }, + Difficulty = { OverallDifficulty = 10 }, + HitObjects = new List + { + new Note { StartTime = 1000 } + }, + }, + ReplayFrames = new List + { + new ManiaReplayFrame(1000 + offset, ManiaAction.Key1) + } + }); + } +} From 50235cc2459c43802099b7b803396fbacf208af6 Mon Sep 17 00:00:00 2001 From: Givikap120 Date: Mon, 28 Aug 2023 23:16:33 +0300 Subject: [PATCH 097/729] somewhat working prototype --- osu.Game/Overlays/Mods/ModMapInfoContainer.cs | 58 ++++++++++++++++ osu.Game/Overlays/Mods/ModMapInfoDisplay.cs | 66 +++++++------------ osu.Game/Overlays/Mods/ModSelectOverlay.cs | 17 +++-- osu.Game/Screens/Select/BeatmapDetailArea.cs | 4 ++ osu.Game/Screens/Select/BeatmapDetails.cs | 5 -- .../Screens/Select/Details/AdvancedStats.cs | 40 +++++------ osu.Game/Screens/Select/SongSelect.cs | 8 ++- 7 files changed, 121 insertions(+), 77 deletions(-) create mode 100644 osu.Game/Overlays/Mods/ModMapInfoContainer.cs diff --git a/osu.Game/Overlays/Mods/ModMapInfoContainer.cs b/osu.Game/Overlays/Mods/ModMapInfoContainer.cs new file mode 100644 index 0000000000..eb5291b0a8 --- /dev/null +++ b/osu.Game/Overlays/Mods/ModMapInfoContainer.cs @@ -0,0 +1,58 @@ +// 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.Allocation; +using osu.Framework.Bindables; +using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Game.Beatmaps; +using osu.Game.Graphics; +using osu.Game.Graphics.Containers; +using osu.Game.Graphics.Sprites; +using osu.Game.Graphics.UserInterface; +using osu.Game.Online; +using osu.Game.Online.API; +using osu.Game.Online.API.Requests; +using osu.Game.Overlays.BeatmapSet; +using osu.Game.Resources.Localisation.Web; +using osu.Game.Screens.Select.Details; +using osuTK; +using osuTK.Graphics; + +namespace osu.Game.Overlays.Mods +{ + public partial class ModMapInfoContainer : Container + { + private ModMapInfoDisplay starRatingDisplay = null!; + + [Resolved] + private OsuColour colours { get; set; } = null!; + + [Resolved] + private Bindable adjustedInfo { get; set; } = null!; + private Bindable starRatingValue = new Bindable(); + + //public ModMapInfoContainer() + //{ + // + //} + + protected override void LoadComplete() + { + starRatingDisplay = new ModMapInfoDisplay("Star Rating", colours.ForStarDifficulty); + starRatingDisplay.Current.BindTo(starRatingValue); + + Content.Add(starRatingDisplay); + + adjustedInfo.BindValueChanged(e => { updateValues(); }, true); + } + + private void updateValues() + { + starRatingValue.Value = adjustedInfo.Value.StarRating; + } + } +} diff --git a/osu.Game/Overlays/Mods/ModMapInfoDisplay.cs b/osu.Game/Overlays/Mods/ModMapInfoDisplay.cs index 20666391d6..ca815984ce 100644 --- a/osu.Game/Overlays/Mods/ModMapInfoDisplay.cs +++ b/osu.Game/Overlays/Mods/ModMapInfoDisplay.cs @@ -1,6 +1,7 @@ // 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.Bindables; using osu.Framework.Extensions.LocalisationExtensions; @@ -12,14 +13,13 @@ using osu.Framework.Localisation; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osu.Game.Graphics.UserInterface; -using osu.Game.Screens.Select.Details; using osu.Game.Localisation; using osuTK; namespace osu.Game.Overlays.Mods { - public partial class ModMapInfoDisplay : Container, IHasCurrentValue + public partial class ModMapInfoDisplay : Container, IHasCurrentValue { public const float HEIGHT = 42; private const float transition_duration = 200; @@ -28,36 +28,40 @@ namespace osu.Game.Overlays.Mods private readonly Box labelBackground; private readonly FillFlowContainer content; - public Bindable Current - { - get => current.Current; - set => current.Current = value; - } - private readonly BindableWithCurrent current = new BindableWithCurrent(); + //public Bindable Current + //{ + // get => current.Current; + // set => current.Current = value; + //} + //private readonly BindableWithCurrent current = new BindableWithCurrent(); - [Resolved] - private OsuColour colours { get; set; } = null!; + public Bindable Current { get; set; } = new BindableWithCurrent(); + + //[Resolved] + //private OsuColour colours { get; set; } = null!; [Resolved] private OverlayColourProvider colourProvider { get; set; } = null!; + protected Func GetColor; + /// /// Text to display in the left area of the display. /// - //protected abstract LocalisableString Label { get; } - protected LocalisableString Label => CommonStrings.Finish; - //protected string Label { get; } + protected LocalisableString Label; protected virtual float ValueAreaWidth => 56; - protected virtual string CounterFormat => @"N0"; + protected virtual string CounterFormat => @"0.00"; protected override Container Content => content; protected readonly RollingCounter Counter; - public ModMapInfoDisplay() + public ModMapInfoDisplay(LocalisableString label, Func colorFunc) { + Label = label; + GetColor = colorFunc; Height = HEIGHT; AutoSizeAxes = Axes.X; @@ -125,7 +129,7 @@ namespace osu.Game.Overlays.Mods { Anchor = Anchor.CentreLeft, Origin = Anchor.CentreLeft, - Current = { BindTarget = Current.Value.StarRating } + Current = { BindTarget = Current } } } } @@ -146,39 +150,17 @@ namespace osu.Game.Overlays.Mods Current.BindValueChanged(e => { //var effect = CalculateEffectForComparison(e.NewValue.CompareTo(Current.Default)); - setColours(e.NewValue.StarRating.Value); + setColours(e.NewValue); }, true); } /// /// Fades colours of text and its background according to displayed value. /// - /// random number. - private void setColours(double stars) + /// value + private void setColours(double value) { - contentBackground.FadeColour(colours.ForStarDifficulty(stars), transition_duration, Easing.OutQuint); - } - - /// - /// Converts signed integer into . Negative values are counted as difficulty reduction, positive as increase. - /// - /// Value to convert. Will arrive from comparison between bindable once it changes and it's . - /// Effect of the value. - protected virtual ModEffect CalculateEffectForComparison(int comparison) - { - if (comparison == 0) - return ModEffect.NotChanged; - if (comparison < 0) - return ModEffect.DifficultyReduction; - - return ModEffect.DifficultyIncrease; - } - - protected enum ModEffect - { - NotChanged, - DifficultyReduction, - DifficultyIncrease + contentBackground.FadeColour(GetColor(value), transition_duration, Easing.OutQuint); } private partial class EffectCounter : RollingCounter diff --git a/osu.Game/Overlays/Mods/ModSelectOverlay.cs b/osu.Game/Overlays/Mods/ModSelectOverlay.cs index ef5f6cf323..a178f2e9dc 100644 --- a/osu.Game/Overlays/Mods/ModSelectOverlay.cs +++ b/osu.Game/Overlays/Mods/ModSelectOverlay.cs @@ -25,9 +25,9 @@ using osu.Game.Graphics.UserInterface; using osu.Game.Input.Bindings; using osu.Game.Localisation; using osu.Game.Rulesets.Mods; -using osu.Game.Screens.Select.Details; using osu.Game.Utils; using osuTK; +using osuTK.Graphics; using osuTK.Input; namespace osu.Game.Overlays.Mods @@ -124,7 +124,8 @@ namespace osu.Game.Overlays.Mods private Container aboveColumnsContent = null!; private DifficultyMultiplierDisplay? multiplierDisplay; - private ModMapInfoDisplay mapInfoDisplay = null!; + + private ModMapInfoContainer mapInfoContainer = null!; protected ShearedButton BackButton { get; private set; } = null!; protected ShearedToggleButton? CustomisationButton { get; private set; } @@ -221,7 +222,7 @@ namespace osu.Game.Overlays.Mods }); } - aboveColumnsContent.Add(mapInfoDisplay = new ModMapInfoDisplay + aboveColumnsContent.Add(mapInfoContainer = new ModMapInfoContainer { Anchor = Anchor.TopLeft, Origin = Anchor.TopLeft @@ -251,11 +252,6 @@ namespace osu.Game.Overlays.Mods globalAvailableMods.BindTo(game.AvailableMods); } - - public void SetBindedMapStats(Bindable stats) - { - mapInfoDisplay.Current = stats; - } public override void Hide() { base.Hide(); @@ -282,6 +278,7 @@ namespace osu.Game.Overlays.Mods SelectedMods.BindValueChanged(_ => { + updateMapInfo(); updateMultiplier(); updateFromExternalSelection(); updateCustomisation(); @@ -413,8 +410,10 @@ namespace osu.Game.Overlays.Mods private void updateMapInfo() { - if (mapInfoDisplay == null) + if (mapInfoContainer == null) return; + + //mapInfoDisplay.Current.Value = 5; } private void updateCustomisation() diff --git a/osu.Game/Screens/Select/BeatmapDetailArea.cs b/osu.Game/Screens/Select/BeatmapDetailArea.cs index 595b86924b..d43831e576 100644 --- a/osu.Game/Screens/Select/BeatmapDetailArea.cs +++ b/osu.Game/Screens/Select/BeatmapDetailArea.cs @@ -4,6 +4,7 @@ #nullable disable using System; +using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -30,6 +31,9 @@ namespace osu.Game.Screens.Select public readonly BeatmapDetails Details; + //[Cached] + //public Bindable AdjustedInfo { get; private set; } = new Bindable(); + protected Bindable CurrentTab => tabControl.Current; protected Bindable CurrentModsFilter => tabControl.CurrentModsFilter; diff --git a/osu.Game/Screens/Select/BeatmapDetails.cs b/osu.Game/Screens/Select/BeatmapDetails.cs index c56411bef5..6ebdca1b8d 100644 --- a/osu.Game/Screens/Select/BeatmapDetails.cs +++ b/osu.Game/Screens/Select/BeatmapDetails.cs @@ -274,11 +274,6 @@ namespace osu.Game.Screens.Select loading.Hide(); } - public Bindable GetBindedAdjustedMapStats() - { - return advanced.AdjustedMapStats.GetBoundCopy(); - } - private partial class DetailBox : Container { private readonly Container content; diff --git a/osu.Game/Screens/Select/Details/AdvancedStats.cs b/osu.Game/Screens/Select/Details/AdvancedStats.cs index 016e4ff2df..8f609888df 100644 --- a/osu.Game/Screens/Select/Details/AdvancedStats.cs +++ b/osu.Game/Screens/Select/Details/AdvancedStats.cs @@ -46,6 +46,11 @@ namespace osu.Game.Screens.Select.Details private IBeatmapInfo beatmapInfo; +#nullable enable + [Resolved] + private Bindable? adjustedInfo { get; set; } = null; +#nullable disable + public IBeatmapInfo BeatmapInfo { get => beatmapInfo; @@ -99,6 +104,21 @@ namespace osu.Game.Screens.Select.Details private ModSettingChangeTracker modSettingChangeTracker; private ScheduledDelegate debouncedStatisticsUpdate; + private void updateBindedInfo() + { + if (adjustedInfo == null) return; + + BeatmapInfo adjusted = (BeatmapInfo)beatmapInfo; + adjusted.Difficulty.CircleSize = FirstValue.Value.adjustedValue ?? 0; + adjusted.Difficulty.DrainRate = HpDrain.Value.adjustedValue ?? 0; + adjusted.Difficulty.ApproachRate = ApproachRate.Value.adjustedValue ?? 5; + adjusted.Difficulty.OverallDifficulty = Accuracy.Value.adjustedValue ?? 0; + adjusted.StarRating = starDifficulty.Value.adjustedValue ?? 0; + + adjustedInfo.Value = adjusted; + adjustedInfo.TriggerChange(); + } + private void modsChanged(ValueChangedEvent> mods) { modSettingChangeTracker?.Dispose(); @@ -113,8 +133,6 @@ namespace osu.Game.Screens.Select.Details updateStatistics(); } - public Bindable AdjustedMapStats = new Bindable(); - private void updateStatistics() { IBeatmapDifficultyInfo baseDifficulty = BeatmapInfo?.Difficulty; @@ -149,13 +167,6 @@ namespace osu.Game.Screens.Select.Details updateStarDifficulty(); - var temp = AdjustedMapStats.Value; - temp.CS.Value = FirstValue.Value.adjustedValue ?? 0; - temp.HP.Value = HpDrain.Value.adjustedValue ?? 0; - temp.OD.Value = Accuracy.Value.adjustedValue ?? 0; - temp.AR.Value = ApproachRate.Value.adjustedValue ?? 5; - AdjustedMapStats.Value = temp; - } private CancellationTokenSource starDifficultyCancellationSource; @@ -188,10 +199,7 @@ namespace osu.Game.Screens.Select.Details return; starDifficulty.Value = ((float)normalDifficulty.Value.Stars, (float)moddedDifficulty.Value.Stars); - - var temp = AdjustedMapStats.Value; - temp.StarRating.Value = moddedDifficulty.Value.Stars; - AdjustedMapStats.Value = temp; + updateBindedInfo(); }), starDifficultyCancellationSource.Token, TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.Current); }); @@ -311,10 +319,4 @@ namespace osu.Game.Screens.Select.Details } } } - public struct MapStats - { - public Bindable StarRating; - public Bindable MinBPM, MaxBPM, AvgBPM; - public Bindable CS, HP, AR, OD; - } } diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 17b1b1f870..4567869e8e 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -99,6 +99,9 @@ namespace osu.Game.Screens.Select [Resolved] private Bindable> selectedMods { get; set; } = null!; + [Cached] + private Bindable adjustedInfo { get; set; } = new Bindable(); + protected BeatmapCarousel Carousel { get; private set; } = null!; private ParallaxContainer wedgeBackground = null!; @@ -305,8 +308,8 @@ namespace osu.Game.Screens.Select // therein it will be registered at the `OsuGame` level to properly function as a blocking overlay. LoadComponent(ModSelect = CreateModSelectOverlay()); - var bindedStats = BeatmapDetails.Details.GetBindedAdjustedMapStats(); - ModSelect.SetBindedMapStats(bindedStats); + //var bindedStats = BeatmapDetails.Details.GetBindedAdjustedMapStats(); + //ModSelect.SetBindedMapStats(bindedStats); if (Footer != null) { @@ -583,6 +586,7 @@ namespace osu.Game.Screens.Select FilterControl.Activate(); ModSelect.SelectedMods.BindTo(selectedMods); + //BeatmapDetails.AdjustedInfo.BindTo(adjustedInfo); beginLooping(); } From d07530b24102faaf6929ce12221bc5903d126095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Tue, 29 Aug 2023 11:48:47 +0200 Subject: [PATCH 098/729] Mark "Score V2" mod as not user-playable The mod generally will only be present on scores imported from stable. As such, it's probably ok to mark it as such. The primary reason for this change is to address #24436 (Score V2 being visible on beatmap overlay leaderboard mod selector). There is one possibly-unintended consequence of this change, namely that the results screen uses `UserPlayable` to determine as to whether animations should be played back, with the intention of turning off the animation playback for autoplay scores specifically. Therefore, turning off this flag will mean that the results screen animations will not play out for Score V2 scores - but I tend to consider this as either largely unimportant, or something that should be fixed in some other way (possibly by checking against the autoplay mod directly). Other usages of `UserPlayable` are either innocuous, or straight-up good safeties going forward in the context of Score V2 (guards against selection in mod select overlays, against score submission with the mod). --- osu.Game/Rulesets/Mods/ModScoreV2.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game/Rulesets/Mods/ModScoreV2.cs b/osu.Game/Rulesets/Mods/ModScoreV2.cs index 6d56b2d86f..df83d96769 100644 --- a/osu.Game/Rulesets/Mods/ModScoreV2.cs +++ b/osu.Game/Rulesets/Mods/ModScoreV2.cs @@ -16,5 +16,6 @@ namespace osu.Game.Rulesets.Mods public override ModType Type => ModType.System; public override LocalisableString Description => "Score set on earlier osu! versions with the V2 scoring algorithm active."; public override double ScoreMultiplier => 1; + public override bool UserPlayable => false; } } From 3c575516ab2f642431e0e4db16f6303d5b3c7e42 Mon Sep 17 00:00:00 2001 From: Wleter Date: Tue, 29 Aug 2023 17:06:23 +0200 Subject: [PATCH 099/729] add correct scaling for 90 degrees rotation --- osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs index ae0a3d0635..ff6b52ca4d 100644 --- a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs +++ b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs @@ -48,10 +48,6 @@ namespace osu.Game.Overlays.SkinEditor // copy to mutate, as we will need to compare to the original later on. var adjustedRect = selectionRect; - // first, remove any scale axis we are not interested in. - if (anchor.HasFlagFast(Anchor.x1)) scale.X = 0; - if (anchor.HasFlagFast(Anchor.y1)) scale.Y = 0; - // for now aspect lock scale adjustments that occur at corners.. if (!anchor.HasFlagFast(Anchor.x1) && !anchor.HasFlagFast(Anchor.y1)) { @@ -61,7 +57,7 @@ namespace osu.Game.Overlays.SkinEditor } // ..or if any of the selection have been rotated. // this is to avoid requiring skew logic (which would likely not be the user's expected transform anyway). - else if (SelectedBlueprints.Any(b => !Precision.AlmostEquals(((Drawable)b.Item).Rotation, 0))) + else if (SelectedBlueprints.Any(b => !Precision.AlmostEquals(((Drawable)b.Item).Rotation % 90, 0))) { if (anchor.HasFlagFast(Anchor.x1)) // if dragging from the horizontal centre, only a vertical component is available. @@ -115,6 +111,11 @@ namespace osu.Game.Overlays.SkinEditor ); updateDrawablePosition(drawableItem, newPositionInAdjusted); + + if (Precision.AlmostEquals(MathF.Abs(drawableItem.Rotation) % 180, 90)) + { + scaledDelta = new Vector2(scaledDelta.Y, scaledDelta.X); + } drawableItem.Scale *= scaledDelta; } From d56ab0fe9af86a96ebf2fe3047d0b059b29aedbb Mon Sep 17 00:00:00 2001 From: Wleter Date: Tue, 29 Aug 2023 17:25:52 +0200 Subject: [PATCH 100/729] change names --- .../SkinEditor/SkinSelectionHandler.cs | 25 ++++++++++--------- .../Edit/Compose/Components/SelectionBox.cs | 2 +- .../SelectionBoxDragHandleContainer.cs | 2 +- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs index ff6b52ca4d..afa592dfba 100644 --- a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs +++ b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs @@ -73,18 +73,20 @@ namespace osu.Game.Overlays.SkinEditor adjustedRect.Width += scale.X; adjustedRect.Height += scale.Y; - if (adjustedRect.Width < 0) - { - SelectionBox.ScaleHandlesFlip(Direction.Horizontal); - HandleFlip(Direction.Horizontal, false); - } - if (adjustedRect.Height < 0) - { - SelectionBox.ScaleHandlesFlip(Direction.Vertical); - HandleFlip(Direction.Vertical, false); - } if (adjustedRect.Width < 0 || adjustedRect.Height < 0) + { + if (adjustedRect.Width < 0) + { + SelectionBox.FlipScaleHandles(Direction.Horizontal); + HandleFlip(Direction.Horizontal, false); + } + if (adjustedRect.Height < 0) + { + SelectionBox.FlipScaleHandles(Direction.Vertical); + HandleFlip(Direction.Vertical, false); + } return true; + } // scale adjust applied to each individual item should match that of the quad itself. var scaledDelta = new Vector2( @@ -113,9 +115,8 @@ namespace osu.Game.Overlays.SkinEditor updateDrawablePosition(drawableItem, newPositionInAdjusted); if (Precision.AlmostEquals(MathF.Abs(drawableItem.Rotation) % 180, 90)) - { scaledDelta = new Vector2(scaledDelta.Y, scaledDelta.X); - } + drawableItem.Scale *= scaledDelta; } diff --git a/osu.Game/Screens/Edit/Compose/Components/SelectionBox.cs b/osu.Game/Screens/Edit/Compose/Components/SelectionBox.cs index a261b635b3..bbf9ea8c3c 100644 --- a/osu.Game/Screens/Edit/Compose/Components/SelectionBox.cs +++ b/osu.Game/Screens/Edit/Compose/Components/SelectionBox.cs @@ -307,7 +307,7 @@ namespace osu.Game.Screens.Edit.Compose.Components return button; } - public void ScaleHandlesFlip(Direction direction) => dragHandles.ScaleHandlesFlip(direction); + public void FlipScaleHandles(Direction direction) => dragHandles.FlipScaleHandles(direction); private void addScaleHandle(Anchor anchor) { diff --git a/osu.Game/Screens/Edit/Compose/Components/SelectionBoxDragHandleContainer.cs b/osu.Game/Screens/Edit/Compose/Components/SelectionBoxDragHandleContainer.cs index 4fd2e9aba9..e7f69b7b37 100644 --- a/osu.Game/Screens/Edit/Compose/Components/SelectionBoxDragHandleContainer.cs +++ b/osu.Game/Screens/Edit/Compose/Components/SelectionBoxDragHandleContainer.cs @@ -70,7 +70,7 @@ namespace osu.Game.Screens.Edit.Compose.Components allDragHandles.Add(handle); } - public void ScaleHandlesFlip(Direction direction) + public void FlipScaleHandles(Direction direction) { foreach (var handle in scaleHandles) { From 586ce6e8d3e6d9ebdbb629d3dff76a6539739cd4 Mon Sep 17 00:00:00 2001 From: Wleter Date: Tue, 29 Aug 2023 17:47:42 +0200 Subject: [PATCH 101/729] fix multiple selected --- osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs index afa592dfba..971ea3d266 100644 --- a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs +++ b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs @@ -73,14 +73,14 @@ namespace osu.Game.Overlays.SkinEditor adjustedRect.Width += scale.X; adjustedRect.Height += scale.Y; - if (adjustedRect.Width < 0 || adjustedRect.Height < 0) + if (adjustedRect.Width <= 0 || adjustedRect.Height <= 0) { - if (adjustedRect.Width < 0) + if (adjustedRect.Width <= 0) { SelectionBox.FlipScaleHandles(Direction.Horizontal); HandleFlip(Direction.Horizontal, false); } - if (adjustedRect.Height < 0) + if (adjustedRect.Height <= 0) { SelectionBox.FlipScaleHandles(Direction.Vertical); HandleFlip(Direction.Vertical, false); @@ -114,10 +114,11 @@ namespace osu.Game.Overlays.SkinEditor updateDrawablePosition(drawableItem, newPositionInAdjusted); + var currentScaledDelta = scaledDelta; if (Precision.AlmostEquals(MathF.Abs(drawableItem.Rotation) % 180, 90)) - scaledDelta = new Vector2(scaledDelta.Y, scaledDelta.X); + currentScaledDelta = new Vector2(scaledDelta.Y, scaledDelta.X); - drawableItem.Scale *= scaledDelta; + drawableItem.Scale *= currentScaledDelta; } return true; From ce1bc7156727ec30c059ab44dab689c4c6d990cc Mon Sep 17 00:00:00 2001 From: Wleter Date: Tue, 29 Aug 2023 18:41:56 +0200 Subject: [PATCH 102/729] formatting --- osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs index 971ea3d266..2acddff0e4 100644 --- a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs +++ b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs @@ -80,11 +80,13 @@ namespace osu.Game.Overlays.SkinEditor SelectionBox.FlipScaleHandles(Direction.Horizontal); HandleFlip(Direction.Horizontal, false); } + if (adjustedRect.Height <= 0) { SelectionBox.FlipScaleHandles(Direction.Vertical); HandleFlip(Direction.Vertical, false); } + return true; } From b658b0e3462170adcb3a57901de17ee514a8d9c1 Mon Sep 17 00:00:00 2001 From: Nabile Rahmani Date: Tue, 29 Aug 2023 23:28:50 +0200 Subject: [PATCH 103/729] Fix and use score user's IsBot property in results screen animation While a mod-created replay did flag itself as performed by a bot, the extension method converting it into a Score did not copy all the generated properties. As noted, it might be preferable for ModCreatedUser to inherit APIUser and forward it as-is to the Score instance. Related to PR #24675 --- osu.Game/Rulesets/Mods/ModExtensions.cs | 4 +++- osu.Game/Screens/Ranking/ResultsScreen.cs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/Mods/ModExtensions.cs b/osu.Game/Rulesets/Mods/ModExtensions.cs index b22030414b..49a3c9178a 100644 --- a/osu.Game/Rulesets/Mods/ModExtensions.cs +++ b/osu.Game/Rulesets/Mods/ModExtensions.cs @@ -21,8 +21,10 @@ namespace osu.Game.Rulesets.Mods { User = new APIUser { - Id = APIUser.SYSTEM_USER_ID, + // TODO: Some fields weren't copied from replayData.User (namely IsBot and Id). Should ModCreatedUser inherit from APIUser so we could pass it verbatim to avoid future mistakes ? + Id = replayData.User.OnlineID, Username = replayData.User.Username, + IsBot = replayData.User.IsBot, } } }; diff --git a/osu.Game/Screens/Ranking/ResultsScreen.cs b/osu.Game/Screens/Ranking/ResultsScreen.cs index 1d0499c909..03231f9329 100644 --- a/osu.Game/Screens/Ranking/ResultsScreen.cs +++ b/osu.Game/Screens/Ranking/ResultsScreen.cs @@ -156,7 +156,7 @@ namespace osu.Game.Screens.Ranking if (Score != null) { // only show flair / animation when arriving after watching a play that isn't autoplay. - bool shouldFlair = player != null && Score.Mods.All(m => m.UserPlayable); + bool shouldFlair = player != null && !Score.User.IsBot; ScorePanelList.AddScore(Score, shouldFlair); } From 270e2a66009b7b551837ad39ed45be9d3cdbf3b9 Mon Sep 17 00:00:00 2001 From: Nabile Rahmani Date: Tue, 29 Aug 2023 23:59:08 +0200 Subject: [PATCH 104/729] Update osu.Game/Rulesets/Mods/ModExtensions.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bartłomiej Dach --- osu.Game/Rulesets/Mods/ModExtensions.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/Rulesets/Mods/ModExtensions.cs b/osu.Game/Rulesets/Mods/ModExtensions.cs index 49a3c9178a..aa106f1203 100644 --- a/osu.Game/Rulesets/Mods/ModExtensions.cs +++ b/osu.Game/Rulesets/Mods/ModExtensions.cs @@ -21,7 +21,6 @@ namespace osu.Game.Rulesets.Mods { User = new APIUser { - // TODO: Some fields weren't copied from replayData.User (namely IsBot and Id). Should ModCreatedUser inherit from APIUser so we could pass it verbatim to avoid future mistakes ? Id = replayData.User.OnlineID, Username = replayData.User.Username, IsBot = replayData.User.IsBot, From a85f0d57911fd880bb7a406cd5bd82d3934f0b50 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 30 Aug 2023 13:29:08 +0900 Subject: [PATCH 105/729] Allow saving changes in tournament system using `Ctrl`+`S` --- osu.Game.Tournament/SaveChangesOverlay.cs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/osu.Game.Tournament/SaveChangesOverlay.cs b/osu.Game.Tournament/SaveChangesOverlay.cs index 7838d4ba48..0b5194a51f 100644 --- a/osu.Game.Tournament/SaveChangesOverlay.cs +++ b/osu.Game.Tournament/SaveChangesOverlay.cs @@ -7,13 +7,16 @@ using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; +using osu.Framework.Input; +using osu.Framework.Input.Bindings; +using osu.Framework.Input.Events; using osu.Game.Graphics; using osu.Game.Online.Multiplayer; using osuTK; namespace osu.Game.Tournament { - internal partial class SaveChangesOverlay : CompositeDrawable + internal partial class SaveChangesOverlay : CompositeDrawable, IKeyBindingHandler { [Resolved] private TournamentGame tournamentGame { get; set; } = null!; @@ -78,6 +81,21 @@ namespace osu.Game.Tournament scheduleNextCheck(); } + public bool OnPressed(KeyBindingPressEvent e) + { + if (e.Action == PlatformAction.Save && !e.Repeat) + { + saveChangesButton.TriggerClick(); + return true; + } + + return false; + } + + public void OnReleased(KeyBindingReleaseEvent e) + { + } + private void scheduleNextCheck() => Scheduler.AddDelayed(() => checkForChanges().FireAndForget(), 1000); private void saveChanges() From 24d6cbefe12b5ac570db353ebaeb2c7e3e192dad Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 30 Aug 2023 13:44:59 +0900 Subject: [PATCH 106/729] Remove tournament client minimum window size This seemed like a good idea but people were using it with smaller resolutions, do let's just not do it. Addresses https://github.com/ppy/osu/discussions/24670. --- osu.Game.Tournament/TournamentGame.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/osu.Game.Tournament/TournamentGame.cs b/osu.Game.Tournament/TournamentGame.cs index ba3b17b513..9baa448ab8 100644 --- a/osu.Game.Tournament/TournamentGame.cs +++ b/osu.Game.Tournament/TournamentGame.cs @@ -48,8 +48,6 @@ namespace osu.Game.Tournament { frameworkConfig.BindWith(FrameworkSetting.WindowedSize, windowSize); - windowSize.MinValue = new Size(TournamentSceneManager.REQUIRED_WIDTH, TournamentSceneManager.STREAM_AREA_HEIGHT); - windowMode = frameworkConfig.GetBindable(FrameworkSetting.WindowMode); Add(loadingSpinner = new LoadingSpinner(true, true) From 0f123fd8e0be4127405236fec5cb4a114a5893fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Wed, 30 Aug 2023 08:20:57 +0200 Subject: [PATCH 107/729] Remove unused using directive --- osu.Game.Tournament/TournamentGame.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game.Tournament/TournamentGame.cs b/osu.Game.Tournament/TournamentGame.cs index 9baa448ab8..25dc8ae1e5 100644 --- a/osu.Game.Tournament/TournamentGame.cs +++ b/osu.Game.Tournament/TournamentGame.cs @@ -1,7 +1,6 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -using System.Drawing; using System.Linq; using osu.Framework.Allocation; using osu.Framework.Bindables; From f277909470749c7ecadae849f4b25e30b1bf0260 Mon Sep 17 00:00:00 2001 From: Wleter Date: Wed, 30 Aug 2023 09:16:16 +0200 Subject: [PATCH 108/729] maintain rotated selection's centre position --- osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs index 2acddff0e4..ff53095e22 100644 --- a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs +++ b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs @@ -47,6 +47,7 @@ namespace osu.Game.Overlays.SkinEditor // copy to mutate, as we will need to compare to the original later on. var adjustedRect = selectionRect; + bool isRotated = false; // for now aspect lock scale adjustments that occur at corners.. if (!anchor.HasFlagFast(Anchor.x1) && !anchor.HasFlagFast(Anchor.y1)) @@ -59,6 +60,7 @@ namespace osu.Game.Overlays.SkinEditor // this is to avoid requiring skew logic (which would likely not be the user's expected transform anyway). else if (SelectedBlueprints.Any(b => !Precision.AlmostEquals(((Drawable)b.Item).Rotation % 90, 0))) { + isRotated = true; if (anchor.HasFlagFast(Anchor.x1)) // if dragging from the horizontal centre, only a vertical component is available. scale.X = scale.Y / selectionRect.Height * selectionRect.Width; @@ -70,6 +72,10 @@ namespace osu.Game.Overlays.SkinEditor if (anchor.HasFlagFast(Anchor.x0)) adjustedRect.X -= scale.X; if (anchor.HasFlagFast(Anchor.y0)) adjustedRect.Y -= scale.Y; + // Maintain the selection's centre position if dragging from the centre anchors and selection is rotated. + if (isRotated && anchor.HasFlagFast(Anchor.x1)) adjustedRect.X -= scale.X / 2; + if (isRotated && anchor.HasFlagFast(Anchor.y1)) adjustedRect.Y -= scale.Y / 2; + adjustedRect.Width += scale.X; adjustedRect.Height += scale.Y; From c91031604c20043e5e9315ef2eff5de6c708344d Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Wed, 30 Aug 2023 21:41:57 +0300 Subject: [PATCH 109/729] Add test cases for hitting hit circles with "early fade" behaviour --- .../TestSceneHitCircleLateFade.cs | 74 ++++++++++++++++--- 1 file changed, 64 insertions(+), 10 deletions(-) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs index 3c32b4fa65..149fd61311 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs @@ -3,8 +3,10 @@ using System; using System.Linq; +using FFmpeg.AutoGen; using NUnit.Framework; using osu.Framework.Extensions.ObjectExtensions; +using osu.Framework.Graphics; using osu.Game.Beatmaps; using osu.Game.Beatmaps.ControlPoints; using osu.Game.Rulesets.Mods; @@ -13,6 +15,7 @@ using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Osu.Mods; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; +using osu.Game.Rulesets.Scoring; using osu.Game.Tests.Visual; using osuTK; @@ -23,7 +26,7 @@ namespace osu.Game.Rulesets.Osu.Tests private float? alphaAtMiss; [Test] - public void TestHitCircleClassicMod() + public void TestHitCircleClassicModMiss() { AddStep("Create hit circle", () => { @@ -61,8 +64,21 @@ namespace osu.Game.Rulesets.Osu.Tests AddAssert("Transparent when missed", () => alphaAtMiss == 0); } + /// + /// No early fade is expected to be applied if the hit circle has been hit. + /// [Test] - public void TestHitCircleNoMod() + public void TestHitCircleClassicModHit() + { + AddStep("Create hit circle", () => + { + SelectedMods.Value = new Mod[] { new OsuModClassic() }; + createCircle(true); + }); + } + + [Test] + public void TestHitCircleNoModMiss() { AddStep("Create hit circle", () => { @@ -74,6 +90,16 @@ namespace osu.Game.Rulesets.Osu.Tests AddAssert("Opaque when missed", () => alphaAtMiss == 1); } + [Test] + public void TestHitCircleNoModHit() + { + AddStep("Create hit circle", () => + { + SelectedMods.Value = Array.Empty(); + createCircle(true); + }); + } + [Test] public void TestSliderClassicMod() { @@ -100,24 +126,27 @@ namespace osu.Game.Rulesets.Osu.Tests AddAssert("Head circle opaque when missed", () => alphaAtMiss == 1); } - private void createCircle() + private void createCircle(bool auto = false) { alphaAtMiss = null; - DrawableHitCircle drawableHitCircle = new DrawableHitCircle(new HitCircle + TestDrawableHitCircle drawableHitCircle = new TestDrawableHitCircle(new HitCircle { StartTime = Time.Current + 500, - Position = new Vector2(250) - }); + Position = new Vector2(250), + }, auto); + + drawableHitCircle.Scale = new Vector2(2f); foreach (var mod in SelectedMods.Value.OfType()) mod.ApplyToDrawableHitObject(drawableHitCircle); drawableHitCircle.HitObject.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty()); - drawableHitCircle.OnNewResult += (_, _) => + drawableHitCircle.OnNewResult += (_, result) => { - alphaAtMiss = drawableHitCircle.Alpha; + if (!result.IsHit) + alphaAtMiss = drawableHitCircle.Alpha; }; Child = drawableHitCircle; @@ -138,6 +167,8 @@ namespace osu.Game.Rulesets.Osu.Tests }) }); + drawableSlider.Scale = new Vector2(2f); + drawableSlider.HitObject.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty()); drawableSlider.OnLoadComplete += _ => @@ -145,12 +176,35 @@ namespace osu.Game.Rulesets.Osu.Tests foreach (var mod in SelectedMods.Value.OfType()) mod.ApplyToDrawableHitObject(drawableSlider.HeadCircle); - drawableSlider.HeadCircle.OnNewResult += (_, _) => + drawableSlider.HeadCircle.OnNewResult += (_, result) => { - alphaAtMiss = drawableSlider.HeadCircle.Alpha; + if (!result.IsHit) + alphaAtMiss = drawableSlider.HeadCircle.Alpha; }; }; Child = drawableSlider; } + + protected partial class TestDrawableHitCircle : DrawableHitCircle + { + private readonly bool auto; + + public TestDrawableHitCircle(HitCircle h, bool auto) + : base(h) + { + this.auto = auto; + } + + protected override void CheckForResult(bool userTriggered, double timeOffset) + { + if (auto && !userTriggered && timeOffset >= 0 && CheckHittable?.Invoke(this, Time.Current) != false) + { + // force success + ApplyResult(r => r.Type = HitResult.Great); + } + else + base.CheckForResult(userTriggered, timeOffset); + } + } } } From 993cebe785a07d8c9054a4e7bf6c36567b65ef61 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Wed, 30 Aug 2023 21:42:47 +0300 Subject: [PATCH 110/729] Fix mod "Classic" interfering with `DrawableHitCircle` animation while in hit state --- osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs b/osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs index 250d97c537..e740e6d201 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModClassic.cs @@ -85,13 +85,16 @@ namespace osu.Game.Rulesets.Osu.Mods private void applyEarlyFading(DrawableHitCircle circle) { - circle.ApplyCustomUpdateState += (o, _) => + circle.ApplyCustomUpdateState += (dho, state) => { - using (o.BeginAbsoluteSequence(o.StateUpdateTime)) + using (dho.BeginAbsoluteSequence(dho.StateUpdateTime)) { - double okWindow = o.HitObject.HitWindows.WindowFor(HitResult.Ok); - double lateMissFadeTime = o.HitObject.HitWindows.WindowFor(HitResult.Meh) - okWindow; - o.Delay(okWindow).FadeOut(lateMissFadeTime); + if (state != ArmedState.Hit) + { + double okWindow = dho.HitObject.HitWindows.WindowFor(HitResult.Ok); + double lateMissFadeTime = dho.HitObject.HitWindows.WindowFor(HitResult.Meh) - okWindow; + dho.Delay(okWindow).FadeOut(lateMissFadeTime); + } } }; } From b8df714f56c162376396efa2ee71a8c14894e276 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Wed, 30 Aug 2023 21:50:52 +0300 Subject: [PATCH 111/729] Remove unused using directives --- osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs index 149fd61311..1557afbf84 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs @@ -3,10 +3,8 @@ using System; using System.Linq; -using FFmpeg.AutoGen; using NUnit.Framework; using osu.Framework.Extensions.ObjectExtensions; -using osu.Framework.Graphics; using osu.Game.Beatmaps; using osu.Game.Beatmaps.ControlPoints; using osu.Game.Rulesets.Mods; From 2d88135198c245a1185fe904b0d61abbd483319f Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 31 Aug 2023 16:18:18 +0900 Subject: [PATCH 112/729] Add automated test coverage for new test --- .../TestSceneHitCircleLateFade.cs | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs index 1557afbf84..3b051912fd 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs @@ -68,11 +68,17 @@ namespace osu.Game.Rulesets.Osu.Tests [Test] public void TestHitCircleClassicModHit() { + TestDrawableHitCircle circle = null!; + AddStep("Create hit circle", () => { SelectedMods.Value = new Mod[] { new OsuModClassic() }; - createCircle(true); + circle = createCircle(true); }); + + AddUntilStep("Wait until circle is hit", () => circle.Result?.Type == HitResult.Great); + AddUntilStep("Wait for miss window", () => Clock.CurrentTime, () => Is.GreaterThanOrEqualTo(circle.HitObject.StartTime + circle.HitObject.HitWindows.WindowFor(HitResult.Miss))); + AddAssert("Check circle is still visible", () => circle.Alpha, () => Is.GreaterThan(0)); } [Test] @@ -124,7 +130,7 @@ namespace osu.Game.Rulesets.Osu.Tests AddAssert("Head circle opaque when missed", () => alphaAtMiss == 1); } - private void createCircle(bool auto = false) + private TestDrawableHitCircle createCircle(bool shouldHit = false) { alphaAtMiss = null; @@ -132,7 +138,7 @@ namespace osu.Game.Rulesets.Osu.Tests { StartTime = Time.Current + 500, Position = new Vector2(250), - }, auto); + }, shouldHit); drawableHitCircle.Scale = new Vector2(2f); @@ -148,6 +154,8 @@ namespace osu.Game.Rulesets.Osu.Tests }; Child = drawableHitCircle; + + return drawableHitCircle; } private void createSlider() @@ -180,22 +188,23 @@ namespace osu.Game.Rulesets.Osu.Tests alphaAtMiss = drawableSlider.HeadCircle.Alpha; }; }; + Child = drawableSlider; } protected partial class TestDrawableHitCircle : DrawableHitCircle { - private readonly bool auto; + private readonly bool shouldHit; - public TestDrawableHitCircle(HitCircle h, bool auto) + public TestDrawableHitCircle(HitCircle h, bool shouldHit) : base(h) { - this.auto = auto; + this.shouldHit = shouldHit; } protected override void CheckForResult(bool userTriggered, double timeOffset) { - if (auto && !userTriggered && timeOffset >= 0 && CheckHittable?.Invoke(this, Time.Current) != false) + if (shouldHit && !userTriggered && timeOffset >= 0 && CheckHittable?.Invoke(this, Time.Current) != false) { // force success ApplyResult(r => r.Type = HitResult.Great); From 5241634c491e058aae4026a0a81a34d80e1dffde Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Thu, 31 Aug 2023 16:31:54 +0900 Subject: [PATCH 113/729] Add one more test --- .../TestSceneHoldNoteInput.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/osu.Game.Rulesets.Mania.Tests/TestSceneHoldNoteInput.cs b/osu.Game.Rulesets.Mania.Tests/TestSceneHoldNoteInput.cs index 77db1b0bd8..ebf25d7a9b 100644 --- a/osu.Game.Rulesets.Mania.Tests/TestSceneHoldNoteInput.cs +++ b/osu.Game.Rulesets.Mania.Tests/TestSceneHoldNoteInput.cs @@ -192,6 +192,25 @@ namespace osu.Game.Rulesets.Mania.Tests assertTailJudgement(HitResult.Miss); } + /// + /// -----[ ]----- + /// xox o + /// + [Test] + public void TestPressAtStartThenReleaseAndImmediatelyRepress() + { + performTest(new List + { + new ManiaReplayFrame(time_head, ManiaAction.Key1), + new ManiaReplayFrame(time_head + 1), + new ManiaReplayFrame(time_head + 2, ManiaAction.Key1), + new ManiaReplayFrame(time_tail), + }); + + assertHeadJudgement(HitResult.Perfect); + assertTailJudgement(HitResult.Meh); + } + /// /// -----[ ]----- /// xo x o From c60f13dd92133d8d7359450cf1e3284bbfda2bc3 Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Thu, 31 Aug 2023 17:30:27 +0900 Subject: [PATCH 114/729] Remove mania hold note ticks --- .../TestSceneHoldNoteInput.cs | 57 --------- .../Objects/Drawables/DrawableHoldNote.cs | 17 --- .../Objects/Drawables/DrawableHoldNoteTick.cs | 110 ------------------ osu.Game.Rulesets.Mania/Objects/HoldNote.cs | 34 ------ .../Objects/HoldNoteTick.cs | 19 --- osu.Game.Rulesets.Mania/UI/Column.cs | 1 - osu.Game.Rulesets.Mania/UI/Stage.cs | 4 - 7 files changed, 242 deletions(-) delete mode 100644 osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNoteTick.cs delete mode 100644 osu.Game.Rulesets.Mania/Objects/HoldNoteTick.cs diff --git a/osu.Game.Rulesets.Mania.Tests/TestSceneHoldNoteInput.cs b/osu.Game.Rulesets.Mania.Tests/TestSceneHoldNoteInput.cs index ebf25d7a9b..1bf768012e 100644 --- a/osu.Game.Rulesets.Mania.Tests/TestSceneHoldNoteInput.cs +++ b/osu.Game.Rulesets.Mania.Tests/TestSceneHoldNoteInput.cs @@ -54,7 +54,6 @@ namespace osu.Game.Rulesets.Mania.Tests }); assertHeadJudgement(HitResult.Miss); - assertTickJudgement(HitResult.LargeTickMiss); assertTailJudgement(HitResult.Miss); assertNoteJudgement(HitResult.IgnoreMiss); } @@ -73,7 +72,6 @@ namespace osu.Game.Rulesets.Mania.Tests }); assertHeadJudgement(HitResult.Perfect); - assertTickJudgement(HitResult.LargeTickHit); assertTailJudgement(HitResult.Perfect); assertNoteJudgement(HitResult.IgnoreHit); } @@ -92,7 +90,6 @@ namespace osu.Game.Rulesets.Mania.Tests }); assertHeadJudgement(HitResult.Perfect); - assertTickJudgement(HitResult.LargeTickHit); assertTailJudgement(HitResult.Miss); assertNoteJudgement(HitResult.IgnoreMiss); } @@ -111,7 +108,6 @@ namespace osu.Game.Rulesets.Mania.Tests }); assertHeadJudgement(HitResult.Miss); - assertTickJudgement(HitResult.LargeTickMiss); assertTailJudgement(HitResult.Miss); } @@ -129,7 +125,6 @@ namespace osu.Game.Rulesets.Mania.Tests }); assertHeadJudgement(HitResult.Miss); - assertTickJudgement(HitResult.LargeTickMiss); assertTailJudgement(HitResult.Miss); } @@ -149,7 +144,6 @@ namespace osu.Game.Rulesets.Mania.Tests }); assertHeadJudgement(HitResult.Perfect); - assertTickJudgement(HitResult.LargeTickHit); assertTailJudgement(HitResult.Miss); } @@ -169,7 +163,6 @@ namespace osu.Game.Rulesets.Mania.Tests }); assertHeadJudgement(HitResult.Perfect); - assertTickJudgement(HitResult.LargeTickHit); assertTailJudgement(HitResult.Perfect); } @@ -188,7 +181,6 @@ namespace osu.Game.Rulesets.Mania.Tests }); assertHeadJudgement(HitResult.Perfect); - assertTickJudgement(HitResult.LargeTickMiss); assertTailJudgement(HitResult.Miss); } @@ -227,7 +219,6 @@ namespace osu.Game.Rulesets.Mania.Tests }); assertHeadJudgement(HitResult.Perfect); - assertTickJudgement(HitResult.LargeTickHit); assertTailJudgement(HitResult.Miss); } @@ -247,7 +238,6 @@ namespace osu.Game.Rulesets.Mania.Tests }); assertHeadJudgement(HitResult.Perfect); - assertTickJudgement(HitResult.LargeTickHit); assertTailJudgement(HitResult.Meh); } @@ -265,7 +255,6 @@ namespace osu.Game.Rulesets.Mania.Tests }); assertHeadJudgement(HitResult.Miss); - assertTickJudgement(HitResult.LargeTickHit); assertTailJudgement(HitResult.Miss); } @@ -283,7 +272,6 @@ namespace osu.Game.Rulesets.Mania.Tests }); assertHeadJudgement(HitResult.Miss); - assertTickJudgement(HitResult.LargeTickHit); assertTailJudgement(HitResult.Meh); } @@ -377,7 +365,6 @@ namespace osu.Game.Rulesets.Mania.Tests }, beatmap); assertHeadJudgement(HitResult.Miss); - assertTickJudgement(HitResult.LargeTickMiss); assertTailJudgement(HitResult.Miss); assertHitObjectJudgement(note, HitResult.Good); @@ -424,7 +411,6 @@ namespace osu.Game.Rulesets.Mania.Tests }, beatmap); assertHeadJudgement(HitResult.Miss); - assertTickJudgement(HitResult.LargeTickMiss); assertTailJudgement(HitResult.Miss); assertHitObjectJudgement(note, HitResult.Great); @@ -444,7 +430,6 @@ namespace osu.Game.Rulesets.Mania.Tests }); assertHeadJudgement(HitResult.Miss); - assertTickJudgement(HitResult.LargeTickMiss); assertTailJudgement(HitResult.Meh); } @@ -495,42 +480,6 @@ namespace osu.Game.Rulesets.Mania.Tests .All(j => j.Type.IsHit())); } - [Test] - public void TestHitTailBeforeLastTick() - { - const int tick_rate = 8; - const double tick_spacing = TimingControlPoint.DEFAULT_BEAT_LENGTH / tick_rate; - const double time_last_tick = time_head + tick_spacing * (int)((time_tail - time_head) / tick_spacing - 1); - - var beatmap = new Beatmap - { - HitObjects = - { - new HoldNote - { - StartTime = time_head, - Duration = time_tail - time_head, - Column = 0, - } - }, - BeatmapInfo = - { - Difficulty = new BeatmapDifficulty { SliderTickRate = tick_rate }, - Ruleset = new ManiaRuleset().RulesetInfo - }, - }; - - performTest(new List - { - new ManiaReplayFrame(time_head, ManiaAction.Key1), - new ManiaReplayFrame(time_last_tick - 5) - }, beatmap); - - assertHeadJudgement(HitResult.Perfect); - assertLastTickJudgement(HitResult.LargeTickMiss); - assertTailJudgement(HitResult.Ok); - } - [Test] public void TestZeroLength() { @@ -570,12 +519,6 @@ namespace osu.Game.Rulesets.Mania.Tests private void assertNoteJudgement(HitResult result) => AddAssert($"hold note judged as {result}", () => judgementResults.Single(j => j.HitObject is HoldNote).Type, () => Is.EqualTo(result)); - private void assertTickJudgement(HitResult result) - => AddAssert($"any tick judged as {result}", () => judgementResults.Where(j => j.HitObject is HoldNoteTick).Select(j => j.Type), () => Does.Contain(result)); - - private void assertLastTickJudgement(HitResult result) - => AddAssert($"last tick judged as {result}", () => judgementResults.Last(j => j.HitObject is HoldNoteTick).Type, () => Is.EqualTo(result)); - private ScoreAccessibleReplayPlayer currentPlayer = null!; private void performTest(List frames, Beatmap? beatmap = null) diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs index c3fec92b92..3032a3ee39 100644 --- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs +++ b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs @@ -38,7 +38,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables private Container headContainer; private Container tailContainer; - private Container tickContainer; private PausableSkinnableSound slidingSample; @@ -110,7 +109,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables { RelativeSizeAxes = Axes.X }, - tickContainer = new Container { RelativeSizeAxes = Axes.Both }, tailContainer = new Container { RelativeSizeAxes = Axes.Both }, slidingSample = new PausableSkinnableSound { Looping = true } }); @@ -118,7 +116,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables maskedContents.AddRange(new[] { bodyPiece.CreateProxy(), - tickContainer.CreateProxy(), tailContainer.CreateProxy(), }); } @@ -153,10 +150,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables case DrawableHoldNoteTail tail: tailContainer.Child = tail; break; - - case DrawableHoldNoteTick tick: - tickContainer.Add(tick); - break; } } @@ -165,7 +158,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables base.ClearNestedHitObjects(); headContainer.Clear(false); tailContainer.Clear(false); - tickContainer.Clear(false); } protected override DrawableHitObject CreateNestedHitObject(HitObject hitObject) @@ -177,9 +169,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables case HeadNote head: return new DrawableHoldNoteHead(head); - - case HoldNoteTick tick: - return new DrawableHoldNoteTick(tick); } return base.CreateNestedHitObject(hitObject); @@ -266,12 +255,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables { if (Tail.AllJudged) { - foreach (var tick in tickContainer) - { - if (!tick.Judged) - tick.MissForcefully(); - } - if (Tail.IsHit) ApplyResult(r => r.Type = r.Judgement.MaxResult); else diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNoteTick.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNoteTick.cs deleted file mode 100644 index ce6a83f79f..0000000000 --- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNoteTick.cs +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. -// See the LICENCE file in the repository root for full licence text. - -#nullable disable - -using System; -using System.Diagnostics; -using osu.Framework.Allocation; -using osu.Framework.Extensions.Color4Extensions; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Effects; -using osu.Framework.Graphics.Shapes; - -namespace osu.Game.Rulesets.Mania.Objects.Drawables -{ - /// - /// Visualises a hit object. - /// - public partial class DrawableHoldNoteTick : DrawableManiaHitObject - { - /// - /// References the time at which the user started holding the hold note. - /// - private Func holdStartTime; - - private Container glowContainer; - - public DrawableHoldNoteTick() - : this(null) - { - } - - public DrawableHoldNoteTick(HoldNoteTick hitObject) - : base(hitObject) - { - Anchor = Anchor.TopCentre; - Origin = Anchor.TopCentre; - - RelativeSizeAxes = Axes.X; - } - - [BackgroundDependencyLoader] - private void load() - { - AddInternal(glowContainer = new CircularContainer - { - Anchor = Anchor.TopCentre, - Origin = Anchor.TopCentre, - RelativeSizeAxes = Axes.Both, - Masking = true, - Children = new[] - { - new Box - { - RelativeSizeAxes = Axes.Both, - Alpha = 0, - AlwaysPresent = true - } - } - }); - } - - protected override void LoadComplete() - { - base.LoadComplete(); - - AccentColour.BindValueChanged(colour => - { - glowContainer.EdgeEffect = new EdgeEffectParameters - { - Type = EdgeEffectType.Glow, - Radius = 2f, - Roundness = 15f, - Colour = colour.NewValue.Opacity(0.3f) - }; - }, true); - } - - protected override void OnApply() - { - base.OnApply(); - - Debug.Assert(ParentHitObject != null); - - var holdNote = (DrawableHoldNote)ParentHitObject; - holdStartTime = () => holdNote.HoldStartTime; - } - - protected override void OnFree() - { - base.OnFree(); - - holdStartTime = null; - } - - protected override void CheckForResult(bool userTriggered, double timeOffset) - { - if (Time.Current < HitObject.StartTime) - return; - - double? startTime = holdStartTime?.Invoke(); - - if (startTime == null || startTime > HitObject.StartTime) - ApplyResult(r => r.Type = r.Judgement.MinResult); - else - ApplyResult(r => r.Type = r.Judgement.MaxResult); - } - } -} diff --git a/osu.Game.Rulesets.Mania/Objects/HoldNote.cs b/osu.Game.Rulesets.Mania/Objects/HoldNote.cs index c367886efe..333912dd0c 100644 --- a/osu.Game.Rulesets.Mania/Objects/HoldNote.cs +++ b/osu.Game.Rulesets.Mania/Objects/HoldNote.cs @@ -6,8 +6,6 @@ using System.Collections.Generic; using System.Threading; using osu.Game.Audio; -using osu.Game.Beatmaps; -using osu.Game.Beatmaps.ControlPoints; using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Scoring; @@ -83,25 +81,10 @@ namespace osu.Game.Rulesets.Mania.Objects public override double MaximumJudgementOffset => Tail.MaximumJudgementOffset; - /// - /// The time between ticks of this hold. - /// - private double tickSpacing = 50; - - protected override void ApplyDefaultsToSelf(ControlPointInfo controlPointInfo, IBeatmapDifficultyInfo difficulty) - { - base.ApplyDefaultsToSelf(controlPointInfo, difficulty); - - TimingControlPoint timingPoint = controlPointInfo.TimingPointAt(StartTime); - tickSpacing = timingPoint.BeatLength / difficulty.SliderTickRate; - } - protected override void CreateNestedHitObjects(CancellationToken cancellationToken) { base.CreateNestedHitObjects(cancellationToken); - createTicks(cancellationToken); - AddNested(Head = new HeadNote { StartTime = StartTime, @@ -117,23 +100,6 @@ namespace osu.Game.Rulesets.Mania.Objects }); } - private void createTicks(CancellationToken cancellationToken) - { - if (tickSpacing == 0) - return; - - for (double t = StartTime + tickSpacing; t <= EndTime - tickSpacing; t += tickSpacing) - { - cancellationToken.ThrowIfCancellationRequested(); - - AddNested(new HoldNoteTick - { - StartTime = t, - Column = Column - }); - } - } - public override Judgement CreateJudgement() => new IgnoreJudgement(); protected override HitWindows CreateHitWindows() => HitWindows.Empty; diff --git a/osu.Game.Rulesets.Mania/Objects/HoldNoteTick.cs b/osu.Game.Rulesets.Mania/Objects/HoldNoteTick.cs deleted file mode 100644 index e5c5260a49..0000000000 --- a/osu.Game.Rulesets.Mania/Objects/HoldNoteTick.cs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. -// See the LICENCE file in the repository root for full licence text. - -using osu.Game.Rulesets.Judgements; -using osu.Game.Rulesets.Mania.Judgements; -using osu.Game.Rulesets.Scoring; - -namespace osu.Game.Rulesets.Mania.Objects -{ - /// - /// A scoring tick of a hold note. - /// - public class HoldNoteTick : ManiaHitObject - { - public override Judgement CreateJudgement() => new HoldNoteTickJudgement(); - - protected override HitWindows CreateHitWindows() => HitWindows.Empty; - } -} diff --git a/osu.Game.Rulesets.Mania/UI/Column.cs b/osu.Game.Rulesets.Mania/UI/Column.cs index f38571a6d3..1c4f0462ec 100644 --- a/osu.Game.Rulesets.Mania/UI/Column.cs +++ b/osu.Game.Rulesets.Mania/UI/Column.cs @@ -112,7 +112,6 @@ namespace osu.Game.Rulesets.Mania.UI RegisterPool(10, 50); RegisterPool(10, 50); RegisterPool(10, 50); - RegisterPool(50, 250); } private void onSourceChanged() diff --git a/osu.Game.Rulesets.Mania/UI/Stage.cs b/osu.Game.Rulesets.Mania/UI/Stage.cs index 4382f8e84a..fa9af6d157 100644 --- a/osu.Game.Rulesets.Mania/UI/Stage.cs +++ b/osu.Game.Rulesets.Mania/UI/Stage.cs @@ -195,10 +195,6 @@ namespace osu.Game.Rulesets.Mania.UI if (!judgedObject.DisplayResult || !DisplayJudgements.Value) return; - // Tick judgements should not display text. - if (judgedObject is DrawableHoldNoteTick) - return; - judgements.Clear(false); judgements.Add(judgementPool.Get(j => { From 5fa31b7b359ca15a5a0cde035df2279a22f695d4 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 31 Aug 2023 18:05:34 +0900 Subject: [PATCH 115/729] Fix schedule screen not responding to new matches being added --- .../Screens/Schedule/ScheduleScreen.cs | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs b/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs index 063c231add..ee4b762be3 100644 --- a/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs +++ b/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs @@ -2,6 +2,7 @@ // See the LICENCE file in the repository root for full licence text. using System; +using System.Collections.Generic; using System.Linq; using osu.Framework.Allocation; using osu.Framework.Bindables; @@ -19,6 +20,7 @@ namespace osu.Game.Tournament.Screens.Schedule { public partial class ScheduleScreen : TournamentScreen { + private readonly BindableList allMatches = new BindableList(); private readonly Bindable currentMatch = new Bindable(); private Container mainContainer = null!; private LadderInfo ladder = null!; @@ -101,16 +103,23 @@ namespace osu.Game.Tournament.Screens.Schedule { base.LoadComplete(); + allMatches.BindTo(ladder.Matches); + allMatches.BindCollectionChanged((_, _) => refresh()); + currentMatch.BindTo(ladder.CurrentMatch); - currentMatch.BindValueChanged(matchChanged, true); + currentMatch.BindValueChanged(_ => refresh(), true); } - private void matchChanged(ValueChangedEvent match) + private void refresh() { - var upcoming = ladder.Matches.Where(p => !p.Completed.Value && p.Team1.Value != null && p.Team2.Value != null && Math.Abs(p.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < 4); - var conditionals = ladder - .Matches.Where(p => !p.Completed.Value && (p.Team1.Value == null || p.Team2.Value == null) && Math.Abs(p.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < 4) - .SelectMany(m => m.ConditionalMatches.Where(cp => m.Acronyms.TrueForAll(a => cp.Acronyms.Contains(a)))); + IEnumerable upcoming = + allMatches + .Where(p => !p.Completed.Value && p.Team1.Value != null && p.Team2.Value != null && Math.Abs(p.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < 4); + + IEnumerable conditionals = + allMatches + .Where(p => !p.Completed.Value && (p.Team1.Value == null || p.Team2.Value == null) && Math.Abs(p.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < 4) + .SelectMany(m => m.ConditionalMatches.Where(cp => m.Acronyms.TrueForAll(a => cp.Acronyms.Contains(a)))); upcoming = upcoming.Concat(conditionals); upcoming = upcoming.OrderBy(p => p.Date.Value).Take(8); @@ -137,12 +146,12 @@ namespace osu.Game.Tournament.Screens.Schedule { RelativeSizeAxes = Axes.Both, Width = 0.4f, - ChildrenEnumerable = ladder.Matches - .Where(p => p.Completed.Value && p.Team1.Value != null && p.Team2.Value != null - && Math.Abs(p.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < 4) - .OrderByDescending(p => p.Date.Value) - .Take(8) - .Select(p => new ScheduleMatch(p)) + ChildrenEnumerable = allMatches + .Where(p => p.Completed.Value && p.Team1.Value != null && p.Team2.Value != null + && Math.Abs(p.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < 4) + .OrderByDescending(p => p.Date.Value) + .Take(8) + .Select(p => new ScheduleMatch(p)) }, new ScheduleContainer("upcoming matches") { @@ -161,7 +170,7 @@ namespace osu.Game.Tournament.Screens.Schedule } }; - if (match.NewValue != null) + if (currentMatch.Value != null) { comingUpNext.Child = new FillFlowContainer { @@ -170,12 +179,12 @@ namespace osu.Game.Tournament.Screens.Schedule Spacing = new Vector2(30), Children = new Drawable[] { - new ScheduleMatch(match.NewValue, false) + new ScheduleMatch(currentMatch.Value, false) { Anchor = Anchor.CentreLeft, Origin = Anchor.CentreLeft, }, - new TournamentSpriteTextWithBackground(match.NewValue.Round.Value?.Name.Value ?? string.Empty) + new TournamentSpriteTextWithBackground(currentMatch.Value.Round.Value?.Name.Value ?? string.Empty) { Anchor = Anchor.CentreLeft, Origin = Anchor.CentreLeft, @@ -185,7 +194,7 @@ namespace osu.Game.Tournament.Screens.Schedule { Anchor = Anchor.CentreLeft, Origin = Anchor.CentreLeft, - Text = match.NewValue.Team1.Value?.FullName + " vs " + match.NewValue.Team2.Value?.FullName, + Text = currentMatch.Value.Team1.Value?.FullName + " vs " + currentMatch.Value.Team2.Value?.FullName, Font = OsuFont.Torus.With(size: 24, weight: FontWeight.SemiBold) }, new FillFlowContainer @@ -196,7 +205,7 @@ namespace osu.Game.Tournament.Screens.Schedule Origin = Anchor.CentreLeft, Children = new Drawable[] { - new ScheduleMatchDate(match.NewValue.Date.Value) + new ScheduleMatchDate(currentMatch.Value.Date.Value) { Font = OsuFont.Torus.With(size: 24, weight: FontWeight.Regular) } From 7aa1505062cd3d15082d3e10dbf9cc232048b6c1 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 31 Aug 2023 18:13:36 +0900 Subject: [PATCH 116/729] Improve legibility of LINQ queries for recent/upcoming matches --- .../Screens/Schedule/ScheduleScreen.cs | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs b/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs index ee4b762be3..62c54daa75 100644 --- a/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs +++ b/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs @@ -112,17 +112,25 @@ namespace osu.Game.Tournament.Screens.Schedule private void refresh() { - IEnumerable upcoming = - allMatches - .Where(p => !p.Completed.Value && p.Team1.Value != null && p.Team2.Value != null && Math.Abs(p.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < 4); + const int days_for_displays = 4; IEnumerable conditionals = allMatches - .Where(p => !p.Completed.Value && (p.Team1.Value == null || p.Team2.Value == null) && Math.Abs(p.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < 4) + .Where(m => !m.Completed.Value && (m.Team1.Value == null || m.Team2.Value == null) && Math.Abs(m.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < days_for_displays) .SelectMany(m => m.ConditionalMatches.Where(cp => m.Acronyms.TrueForAll(a => cp.Acronyms.Contains(a)))); - upcoming = upcoming.Concat(conditionals); - upcoming = upcoming.OrderBy(p => p.Date.Value).Take(8); + IEnumerable upcoming = + allMatches + .Where(m => !m.Completed.Value && m.Team1.Value != null && m.Team2.Value != null && Math.Abs(m.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < days_for_displays) + .Concat(conditionals) + .OrderBy(m => m.Date.Value) + .Take(8); + + var recent = + allMatches + .Where(m => m.Completed.Value && m.Team1.Value != null && m.Team2.Value != null && Math.Abs(m.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < days_for_displays) + .OrderByDescending(m => m.Date.Value) + .Take(8); ScheduleContainer comingUpNext; @@ -146,12 +154,7 @@ namespace osu.Game.Tournament.Screens.Schedule { RelativeSizeAxes = Axes.Both, Width = 0.4f, - ChildrenEnumerable = allMatches - .Where(p => p.Completed.Value && p.Team1.Value != null && p.Team2.Value != null - && Math.Abs(p.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < 4) - .OrderByDescending(p => p.Date.Value) - .Take(8) - .Select(p => new ScheduleMatch(p)) + ChildrenEnumerable = recent.Select(p => new ScheduleMatch(p)) }, new ScheduleContainer("upcoming matches") { From 4b68493084a4f9b87bbead6fdb02367d5d062832 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 31 Aug 2023 18:05:18 +0900 Subject: [PATCH 117/729] Add ability to test recent / upcoming matches on schedule screen --- .../Screens/TestSceneScheduleScreen.cs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/osu.Game.Tournament.Tests/Screens/TestSceneScheduleScreen.cs b/osu.Game.Tournament.Tests/Screens/TestSceneScheduleScreen.cs index f3c3fdec97..a58f09d13a 100644 --- a/osu.Game.Tournament.Tests/Screens/TestSceneScheduleScreen.cs +++ b/osu.Game.Tournament.Tests/Screens/TestSceneScheduleScreen.cs @@ -12,6 +12,13 @@ namespace osu.Game.Tournament.Tests.Screens { public partial class TestSceneScheduleScreen : TournamentScreenTestScene { + public override void SetUpSteps() + { + AddStep("clear matches", () => Ladder.Matches.Clear()); + + base.SetUpSteps(); + } + [BackgroundDependencyLoader] private void load() { @@ -34,6 +41,36 @@ namespace osu.Game.Tournament.Tests.Screens AddStep("Set null current match", () => Ladder.CurrentMatch.Value = null); } + [Test] + public void TestUpcomingMatches() + { + AddStep("Add upcoming match", () => + { + var tournamentMatch = CreateSampleMatch(); + + tournamentMatch.Date.Value = DateTimeOffset.UtcNow.AddMinutes(5); + tournamentMatch.Completed.Value = false; + + Ladder.Matches.Add(tournamentMatch); + }); + } + + [Test] + public void TestRecentMatches() + { + AddStep("Add recent match", () => + { + var tournamentMatch = CreateSampleMatch(); + + tournamentMatch.Date.Value = DateTimeOffset.UtcNow; + tournamentMatch.Completed.Value = true; + tournamentMatch.Team1Score.Value = tournamentMatch.PointsToWin; + tournamentMatch.Team2Score.Value = tournamentMatch.PointsToWin / 2; + + Ladder.Matches.Add(tournamentMatch); + }); + } + private void setMatchDate(TimeSpan relativeTime) // Humanizer cannot handle negative timespans. => AddStep($"start time is {relativeTime}", () => From 540c58c359ed47ee758519da0b089621be41b7cc Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 31 Aug 2023 18:46:47 +0900 Subject: [PATCH 118/729] Fix tournament screen tests not matching `OsuGameBase` resolution This would cause things to look completely out of whack. The numbers here match `DrawSizePreservingFillContainer` defaults as used by `OsuGameBase.CreateScalingContainer()`. --- osu.Game.Tournament.Tests/TournamentScreenTestScene.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Tournament.Tests/TournamentScreenTestScene.cs b/osu.Game.Tournament.Tests/TournamentScreenTestScene.cs index 8adffe1468..e8cca00c92 100644 --- a/osu.Game.Tournament.Tests/TournamentScreenTestScene.cs +++ b/osu.Game.Tournament.Tests/TournamentScreenTestScene.cs @@ -23,7 +23,7 @@ namespace osu.Game.Tournament.Tests { public TournamentScalingContainer() { - TargetDrawSize = new Vector2(1920, 1080); + TargetDrawSize = new Vector2(1024, 768); RelativeSizeAxes = Axes.Both; } From 4bdaca3816ad8cf6ddd3125fce83c5c11e975a20 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 31 Aug 2023 18:05:04 +0900 Subject: [PATCH 119/729] Fix regression in spacing on schedule screen --- osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs b/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs index 62c54daa75..d02559d6b7 100644 --- a/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs +++ b/osu.Game.Tournament/Screens/Schedule/ScheduleScreen.cs @@ -294,6 +294,7 @@ namespace osu.Game.Tournament.Screens.Schedule { Direction = FillDirection.Vertical, RelativeSizeAxes = Axes.Both, + Spacing = new Vector2(0, -6), Margin = new MarginPadding(10) }, } From 34b279845bf4d4569b8cc9897cba0b58e4219c20 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 31 Aug 2023 19:03:56 +0900 Subject: [PATCH 120/729] Add more testability for song bar --- osu.Game.Tournament.Tests/Components/TestSceneSongBar.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/osu.Game.Tournament.Tests/Components/TestSceneSongBar.cs b/osu.Game.Tournament.Tests/Components/TestSceneSongBar.cs index e0444b6126..95d6b6d107 100644 --- a/osu.Game.Tournament.Tests/Components/TestSceneSongBar.cs +++ b/osu.Game.Tournament.Tests/Components/TestSceneSongBar.cs @@ -58,9 +58,14 @@ namespace osu.Game.Tournament.Tests.Components songBar.Beatmap = new TournamentBeatmap(beatmap); }); + AddStep("set mods to HR", () => songBar.Mods = LegacyMods.HardRock); AddStep("set mods to DT", () => songBar.Mods = LegacyMods.DoubleTime); AddStep("unset mods", () => songBar.Mods = LegacyMods.None); + + AddToggleStep("toggle expanded", expanded => songBar.Expanded = expanded); + + AddStep("set null beatmap", () => songBar.Beatmap = null); } } } From cf9c8120c5292774b8aec7d2b0282003cdca32d6 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 31 Aug 2023 19:04:06 +0900 Subject: [PATCH 121/729] Fix potential race condition in song bar beatmap lookup flow Cancelling a web request may not necessarily cancel the callbacks. This might help with https://github.com/ppy/osu/issues/24598. --- osu.Game.Tournament/IPC/FileBasedIPC.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/osu.Game.Tournament/IPC/FileBasedIPC.cs b/osu.Game.Tournament/IPC/FileBasedIPC.cs index bf835122cc..5407c21079 100644 --- a/osu.Game.Tournament/IPC/FileBasedIPC.cs +++ b/osu.Game.Tournament/IPC/FileBasedIPC.cs @@ -92,8 +92,16 @@ namespace osu.Game.Tournament.IPC else { beatmapLookupRequest = new GetBeatmapRequest(new APIBeatmap { OnlineID = beatmapId }); - beatmapLookupRequest.Success += b => Beatmap.Value = new TournamentBeatmap(b); - beatmapLookupRequest.Failure += _ => Beatmap.Value = null; + beatmapLookupRequest.Success += b => + { + if (lastBeatmapId == beatmapId) + Beatmap.Value = new TournamentBeatmap(b); + }; + beatmapLookupRequest.Failure += _ => + { + if (lastBeatmapId == beatmapId) + Beatmap.Value = null; + }; API.Queue(beatmapLookupRequest); } } From 47160f7744823a4f53716fbc001b707003430a15 Mon Sep 17 00:00:00 2001 From: Wleter Date: Thu, 31 Aug 2023 20:24:26 +0200 Subject: [PATCH 122/729] make getClosestAnchor work with rotated drawable --- .../SkinEditor/SkinSelectionHandler.cs | 22 +------------------ 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs index 72216f040e..fe2816db6f 100644 --- a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs +++ b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs @@ -291,7 +291,7 @@ namespace osu.Game.Overlays.SkinEditor if (parent == null) return drawable.Anchor; - var screenPosition = getScreenPosition(); + var screenPosition = drawable.ToScreenSpace(drawable.OriginPosition); var absolutePosition = parent.ToLocalSpace(screenPosition); var factor = parent.RelativeToAbsoluteFactor; @@ -313,26 +313,6 @@ namespace osu.Game.Overlays.SkinEditor result |= getAnchorFromPosition(absolutePosition.Y / factor.Y, Anchor.y0, Anchor.y1, Anchor.y2); return result; - - Vector2 getScreenPosition() - { - var quad = drawable.ScreenSpaceDrawQuad; - var origin = drawable.Origin; - - var pos = quad.TopLeft; - - if (origin.HasFlagFast(Anchor.x2)) - pos.X += quad.Width; - else if (origin.HasFlagFast(Anchor.x1)) - pos.X += quad.Width / 2f; - - if (origin.HasFlagFast(Anchor.y2)) - pos.Y += quad.Height; - else if (origin.HasFlagFast(Anchor.y1)) - pos.Y += quad.Height / 2f; - - return pos; - } } private static void applyAnchor(Drawable drawable, Anchor anchor) From c75b14c72994c51a54b4f01fc16a4f52c22d9c4d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 1 Sep 2023 16:54:35 +0900 Subject: [PATCH 123/729] Apply NRT to new `LegacyHitPolicy` class (and other implementations) --- osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs | 4 +--- osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs | 7 ++++--- .../UI/StartTimeOrderedHitPolicy.cs | 14 +++++++++----- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs index 69bd360b5e..2c6895d7ec 100644 --- a/osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/AnyOrderHitPolicy.cs @@ -1,8 +1,6 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -#nullable disable - using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.UI; @@ -14,7 +12,7 @@ namespace osu.Game.Rulesets.Osu.UI /// public class AnyOrderHitPolicy : IHitPolicy { - public IHitObjectContainer HitObjectContainer { get; set; } + public IHitObjectContainer HitObjectContainer { get; set; } = null!; public ClickAction CheckHittable(DrawableHitObject hitObject, double time, HitResult result) => ClickAction.Hit; diff --git a/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs index 2b6359fb46..daf498581e 100644 --- a/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/LegacyHitPolicy.cs @@ -1,8 +1,6 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -#nullable disable - using System; using System.Linq; using osu.Game.Rulesets.Objects; @@ -22,7 +20,7 @@ namespace osu.Game.Rulesets.Osu.UI /// public class LegacyHitPolicy : IHitPolicy { - public IHitObjectContainer HitObjectContainer { get; set; } + public IHitObjectContainer? HitObjectContainer { get; set; } private readonly double hittableRange; @@ -37,6 +35,9 @@ namespace osu.Game.Rulesets.Osu.UI public virtual ClickAction CheckHittable(DrawableHitObject hitObject, double time, HitResult result) { + if (HitObjectContainer == null) + throw new InvalidOperationException($"{nameof(HitObjectContainer)} should be set before {nameof(CheckHittable)} is called."); + var aliveObjects = HitObjectContainer.AliveObjects.ToList(); int index = aliveObjects.IndexOf(hitObject); diff --git a/osu.Game.Rulesets.Osu/UI/StartTimeOrderedHitPolicy.cs b/osu.Game.Rulesets.Osu/UI/StartTimeOrderedHitPolicy.cs index 6fd0b512be..2b24fb9398 100644 --- a/osu.Game.Rulesets.Osu/UI/StartTimeOrderedHitPolicy.cs +++ b/osu.Game.Rulesets.Osu/UI/StartTimeOrderedHitPolicy.cs @@ -1,8 +1,6 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -#nullable disable - using System; using System.Collections.Generic; using osu.Game.Rulesets.Objects; @@ -23,11 +21,14 @@ namespace osu.Game.Rulesets.Osu.UI /// public class StartTimeOrderedHitPolicy : IHitPolicy { - public IHitObjectContainer HitObjectContainer { get; set; } + public IHitObjectContainer? HitObjectContainer { get; set; } public ClickAction CheckHittable(DrawableHitObject hitObject, double time, HitResult _) { - DrawableHitObject blockingObject = null; + if (HitObjectContainer == null) + throw new InvalidOperationException($"{nameof(HitObjectContainer)} should be set before {nameof(CheckHittable)} is called."); + + DrawableHitObject? blockingObject = null; foreach (var obj in enumerateHitObjectsUpTo(hitObject.HitObject.StartTime)) { @@ -48,6 +49,9 @@ namespace osu.Game.Rulesets.Osu.UI public void HandleHit(DrawableHitObject hitObject) { + if (HitObjectContainer == null) + throw new InvalidOperationException($"{nameof(HitObjectContainer)} should be set before {nameof(HandleHit)} is called."); + // Hitobjects which themselves don't block future hitobjects don't cause misses (e.g. slider ticks, spinners). if (!hitObjectCanBlockFutureHits(hitObject)) return; @@ -75,7 +79,7 @@ namespace osu.Game.Rulesets.Osu.UI private IEnumerable enumerateHitObjectsUpTo(double targetTime) { - foreach (var obj in HitObjectContainer.AliveObjects) + foreach (var obj in HitObjectContainer!.AliveObjects) { if (obj.HitObject.StartTime >= targetTime) yield break; From ede9fae38166e69e85ee7fbd643109b218eea4d1 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 1 Sep 2023 17:19:39 +0900 Subject: [PATCH 124/729] Remove broken check from `TestSceneHitCircleLateFade` --- osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs index 3b051912fd..d74a31ada4 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneHitCircleLateFade.cs @@ -204,7 +204,7 @@ namespace osu.Game.Rulesets.Osu.Tests protected override void CheckForResult(bool userTriggered, double timeOffset) { - if (shouldHit && !userTriggered && timeOffset >= 0 && CheckHittable?.Invoke(this, Time.Current) != false) + if (shouldHit && !userTriggered && timeOffset >= 0) { // force success ApplyResult(r => r.Type = HitResult.Great); From 6ce251fbb5023705bc01325741e61b548b33502d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 1 Sep 2023 19:17:53 +0900 Subject: [PATCH 125/729] Expose base `VisualisationMethod` so we don't need to `new` it locally per ruleset --- osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs | 7 ------- osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs b/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs index eb99434e04..9169599798 100644 --- a/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs @@ -13,7 +13,6 @@ using osu.Framework.Graphics; using osu.Framework.Input; using osu.Game.Beatmaps; using osu.Game.Beatmaps.ControlPoints; -using osu.Game.Configuration; using osu.Game.Input.Handlers; using osu.Game.Replays; using osu.Game.Rulesets.Mania.Beatmaps; @@ -51,12 +50,6 @@ namespace osu.Game.Rulesets.Mania.UI protected new ManiaRulesetConfigManager Config => (ManiaRulesetConfigManager)base.Config; - public new ScrollVisualisationMethod VisualisationMethod - { - get => base.VisualisationMethod; - set => base.VisualisationMethod = value; - } - private readonly Bindable configDirection = new Bindable(); private readonly BindableInt configScrollSpeed = new BindableInt(); private double smoothTimeRange; diff --git a/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs b/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs index d082d26792..6abfc6ee49 100644 --- a/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs +++ b/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs @@ -165,7 +165,7 @@ namespace osu.Game.Rulesets.UI.Scrolling private ScrollVisualisationMethod visualisationMethod = ScrollVisualisationMethod.Sequential; - protected ScrollVisualisationMethod VisualisationMethod + public ScrollVisualisationMethod VisualisationMethod { get => visualisationMethod; set From 37c2b330a235a99fe999be7975c256325fa8c50a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 1 Sep 2023 19:49:57 +0900 Subject: [PATCH 126/729] Move toggle implementation to work on all scrolling rulesets automatically --- .../Edit/CatchHitObjectComposer.cs | 1 + .../Mods/TestSceneManiaModConstantSpeed.cs | 2 +- .../Edit/DrawableManiaEditorRuleset.cs | 19 +----- .../Edit/ManiaHitObjectComposer.cs | 30 +-------- .../Edit/TaikoHitObjectComposer.cs | 2 +- .../Edit/DistancedHitObjectComposer.cs | 2 +- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 5 +- .../Edit/ScrollingHitObjectComposer.cs | 62 +++++++++++++++++++ 8 files changed, 73 insertions(+), 50 deletions(-) create mode 100644 osu.Game/Rulesets/Edit/ScrollingHitObjectComposer.cs diff --git a/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs b/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs index f2877572e8..136a78b343 100644 --- a/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs +++ b/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs @@ -26,6 +26,7 @@ using osuTK; namespace osu.Game.Rulesets.Catch.Edit { public partial class CatchHitObjectComposer : DistancedHitObjectComposer + // we're also a ScrollingHitObjectComposer candidate, but can't be everything can we? { private const float distance_snap_radius = 50; diff --git a/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModConstantSpeed.cs b/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModConstantSpeed.cs index dc4f660a45..474430414c 100644 --- a/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModConstantSpeed.cs +++ b/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModConstantSpeed.cs @@ -24,7 +24,7 @@ namespace osu.Game.Rulesets.Mania.Tests.Mods PassCondition = () => { var hitObject = Player.ChildrenOfType().FirstOrDefault(); - return hitObject?.Dependencies.Get().Algorithm is ConstantScrollAlgorithm; + return hitObject?.Dependencies.Get().Algorithm.Value is ConstantScrollAlgorithm; } }); } diff --git a/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs b/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs index 013dd3dcbd..1741dad5d6 100644 --- a/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs +++ b/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs @@ -2,23 +2,18 @@ // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; -using osu.Framework.Bindables; using osu.Framework.Graphics; -using osuTK; using osu.Game.Beatmaps; -using osu.Game.Configuration; -using osu.Game.Graphics.UserInterface; using osu.Game.Rulesets.Mania.UI; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.UI; using osu.Game.Rulesets.UI.Scrolling; +using osuTK; namespace osu.Game.Rulesets.Mania.Edit { public partial class DrawableManiaEditorRuleset : DrawableManiaRuleset { - public readonly IBindable ShowSpeedChanges = new Bindable(); - public new IScrollingInfo ScrollingInfo => base.ScrollingInfo; public DrawableManiaEditorRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList? mods) @@ -26,18 +21,6 @@ namespace osu.Game.Rulesets.Mania.Edit { } - protected override void LoadComplete() - { - base.LoadComplete(); - - ShowSpeedChanges.BindValueChanged(state => - { - VisualisationMethod = state.NewValue == TernaryState.True - ? ScrollVisualisationMethod.Sequential - : ScrollVisualisationMethod.Constant; - }, true); - } - protected override Playfield CreatePlayfield() => new ManiaEditorPlayfield(Beatmap.Stages) { Anchor = Anchor.Centre, diff --git a/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs b/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs index 44e238efac..9bde9485b2 100644 --- a/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs +++ b/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs @@ -6,13 +6,8 @@ using System.Collections.Generic; using System.Linq; using osu.Framework.Allocation; -using osu.Framework.Bindables; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Sprites; using osu.Framework.Input; using osu.Game.Beatmaps; -using osu.Game.Graphics.UserInterface; using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Edit.Tools; using osu.Game.Rulesets.Mania.Objects; @@ -21,16 +16,13 @@ using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.UI; using osu.Game.Rulesets.UI.Scrolling; -using osu.Game.Screens.Edit.Components.TernaryButtons; using osu.Game.Screens.Edit.Compose.Components; using osuTK; namespace osu.Game.Rulesets.Mania.Edit { - public partial class ManiaHitObjectComposer : HitObjectComposer + public partial class ManiaHitObjectComposer : ScrollingHitObjectComposer { - private readonly Bindable showSpeedChanges = new Bindable(); - private DrawableManiaEditorRuleset drawableRuleset; private ManiaBeatSnapGrid beatSnapGrid; private InputManager inputManager; @@ -44,21 +36,6 @@ namespace osu.Game.Rulesets.Mania.Edit private void load() { AddInternal(beatSnapGrid = new ManiaBeatSnapGrid()); - - LeftToolbox.Add(new EditorToolboxGroup("playfield") - { - Child = new FillFlowContainer - { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Direction = FillDirection.Vertical, - Spacing = new Vector2(0, 5), - Children = new[] - { - new DrawableTernaryButton(new TernaryButton(showSpeedChanges, "Show speed changes", () => new SpriteIcon { Icon = FontAwesome.Solid.TachometerAlt })) - } - }, - }); } protected override void LoadComplete() @@ -82,10 +59,7 @@ namespace osu.Game.Rulesets.Mania.Edit protected override DrawableRuleset CreateDrawableRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList mods = null) { - drawableRuleset = new DrawableManiaEditorRuleset(ruleset, beatmap, mods) - { - ShowSpeedChanges = { BindTarget = showSpeedChanges } - }; + drawableRuleset = new DrawableManiaEditorRuleset(ruleset, beatmap, mods); // This is the earliest we can cache the scrolling info to ourselves, before masks are added to the hierarchy and inject it dependencies.CacheAs(drawableRuleset.ScrollingInfo); diff --git a/osu.Game.Rulesets.Taiko/Edit/TaikoHitObjectComposer.cs b/osu.Game.Rulesets.Taiko/Edit/TaikoHitObjectComposer.cs index 3e63d624e7..fbad8c7fad 100644 --- a/osu.Game.Rulesets.Taiko/Edit/TaikoHitObjectComposer.cs +++ b/osu.Game.Rulesets.Taiko/Edit/TaikoHitObjectComposer.cs @@ -9,7 +9,7 @@ using osu.Game.Screens.Edit.Compose.Components; namespace osu.Game.Rulesets.Taiko.Edit { - public partial class TaikoHitObjectComposer : HitObjectComposer + public partial class TaikoHitObjectComposer : ScrollingHitObjectComposer { protected override bool ApplyHorizontalCentering => false; diff --git a/osu.Game/Rulesets/Edit/DistancedHitObjectComposer.cs b/osu.Game/Rulesets/Edit/DistancedHitObjectComposer.cs index 817e8bd5fe..d1db8cb1f1 100644 --- a/osu.Game/Rulesets/Edit/DistancedHitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/DistancedHitObjectComposer.cs @@ -62,7 +62,7 @@ namespace osu.Game.Rulesets.Edit } [BackgroundDependencyLoader] - private void load(OverlayColourProvider colourProvider) + private void load() { RightToolbox.Add(new EditorToolboxGroup("snapping") { diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index c967187b5c..295a016c7b 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -87,6 +87,8 @@ namespace osu.Game.Rulesets.Edit private IBindable hasTiming; private Bindable autoSeekOnPlacement; + protected DrawableRuleset DrawableRuleset { get; private set; } + protected HitObjectComposer(Ruleset ruleset) : base(ruleset) { @@ -104,7 +106,8 @@ namespace osu.Game.Rulesets.Edit try { - drawableRulesetWrapper = new DrawableEditorRulesetWrapper(CreateDrawableRuleset(Ruleset, EditorBeatmap.PlayableBeatmap, new[] { Ruleset.GetAutoplayMod() })) + DrawableRuleset = CreateDrawableRuleset(Ruleset, EditorBeatmap.PlayableBeatmap, new[] { Ruleset.GetAutoplayMod() }); + drawableRulesetWrapper = new DrawableEditorRulesetWrapper(DrawableRuleset) { Clock = EditorClock, ProcessCustomClock = false diff --git a/osu.Game/Rulesets/Edit/ScrollingHitObjectComposer.cs b/osu.Game/Rulesets/Edit/ScrollingHitObjectComposer.cs new file mode 100644 index 0000000000..0340354016 --- /dev/null +++ b/osu.Game/Rulesets/Edit/ScrollingHitObjectComposer.cs @@ -0,0 +1,62 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Allocation; +using osu.Framework.Bindables; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Sprites; +using osu.Game.Configuration; +using osu.Game.Graphics.UserInterface; +using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.UI.Scrolling; +using osu.Game.Screens.Edit.Components.TernaryButtons; +using osuTK; + +namespace osu.Game.Rulesets.Edit +{ + public abstract partial class ScrollingHitObjectComposer : HitObjectComposer + where TObject : HitObject + { + private readonly Bindable showSpeedChanges = new Bindable(); + + protected ScrollingHitObjectComposer(Ruleset ruleset) + : base(ruleset) + { + } + + [BackgroundDependencyLoader] + private void load() + { + if (DrawableRuleset is DrawableScrollingRuleset drawableScrollingRuleset) + { + var originalVisualisationMethod = drawableScrollingRuleset.VisualisationMethod; + + if (originalVisualisationMethod != ScrollVisualisationMethod.Constant) + { + LeftToolbox.Add(new EditorToolboxGroup("playfield") + { + Child = new FillFlowContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Direction = FillDirection.Vertical, + Spacing = new Vector2(0, 5), + Children = new[] + { + new DrawableTernaryButton(new TernaryButton(showSpeedChanges, "Show speed changes", () => new SpriteIcon { Icon = FontAwesome.Solid.TachometerAlt })) + } + }, + }); + + showSpeedChanges.BindValueChanged(state => + { + drawableScrollingRuleset.VisualisationMethod = state.NewValue == TernaryState.True + ? originalVisualisationMethod + : ScrollVisualisationMethod.Constant; + }, true); + } + } + } + } +} From fc4069f794e91e6ea1eb4a4b28c334b12e301a85 Mon Sep 17 00:00:00 2001 From: Wleter Date: Fri, 1 Sep 2023 13:01:51 +0200 Subject: [PATCH 127/729] let SelectionBox perform flip with scale handles --- .../SkinEditor/SkinSelectionHandler.cs | 14 ++++--------- .../Edit/Compose/Components/SelectionBox.cs | 20 ++++++++++++++++++- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs index ff53095e22..b30351f61b 100644 --- a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs +++ b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs @@ -81,18 +81,12 @@ namespace osu.Game.Overlays.SkinEditor if (adjustedRect.Width <= 0 || adjustedRect.Height <= 0) { - if (adjustedRect.Width <= 0) - { - SelectionBox.FlipScaleHandles(Direction.Horizontal); - HandleFlip(Direction.Horizontal, false); - } + Axes toFlip = Axes.None; - if (adjustedRect.Height <= 0) - { - SelectionBox.FlipScaleHandles(Direction.Vertical); - HandleFlip(Direction.Vertical, false); - } + if (adjustedRect.Width <= 0) toFlip |= Axes.X; + if (adjustedRect.Height <= 0) toFlip |= Axes.Y; + SelectionBox.PerformFlipFromScaleHandles(toFlip); return true; } diff --git a/osu.Game/Screens/Edit/Compose/Components/SelectionBox.cs b/osu.Game/Screens/Edit/Compose/Components/SelectionBox.cs index bbf9ea8c3c..0c19f6c62e 100644 --- a/osu.Game/Screens/Edit/Compose/Components/SelectionBox.cs +++ b/osu.Game/Screens/Edit/Compose/Components/SelectionBox.cs @@ -4,6 +4,7 @@ using System; using osu.Framework.Allocation; using osu.Framework.Bindables; +using osu.Framework.Extensions.EnumExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; @@ -307,7 +308,24 @@ namespace osu.Game.Screens.Edit.Compose.Components return button; } - public void FlipScaleHandles(Direction direction) => dragHandles.FlipScaleHandles(direction); + /// + /// This method should be called when a selection needs to be flipped + /// because of an ongoing scale handle drag that would otherwise cause width or height to go negative. + /// + public void PerformFlipFromScaleHandles(Axes axes) + { + if (axes.HasFlagFast(Axes.X)) + { + dragHandles.FlipScaleHandles(Direction.Horizontal); + OnFlip?.Invoke(Direction.Horizontal, false); + } + + if (axes.HasFlagFast(Axes.Y)) + { + dragHandles.FlipScaleHandles(Direction.Vertical); + OnFlip?.Invoke(Direction.Vertical, false); + } + } private void addScaleHandle(Anchor anchor) { From 0fd445f913d44c2e89c2a291147167ac14c2735f Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Fri, 1 Sep 2023 20:42:27 +0900 Subject: [PATCH 128/729] Adjust test to fail --- osu.Game.Rulesets.Mania.Tests/TestSceneHoldNoteInput.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/osu.Game.Rulesets.Mania.Tests/TestSceneHoldNoteInput.cs b/osu.Game.Rulesets.Mania.Tests/TestSceneHoldNoteInput.cs index 1bf768012e..5bc477535d 100644 --- a/osu.Game.Rulesets.Mania.Tests/TestSceneHoldNoteInput.cs +++ b/osu.Game.Rulesets.Mania.Tests/TestSceneHoldNoteInput.cs @@ -200,7 +200,9 @@ namespace osu.Game.Rulesets.Mania.Tests }); assertHeadJudgement(HitResult.Perfect); + assertCombo(1); assertTailJudgement(HitResult.Meh); + assertCombo(1); } /// @@ -519,6 +521,9 @@ namespace osu.Game.Rulesets.Mania.Tests private void assertNoteJudgement(HitResult result) => AddAssert($"hold note judged as {result}", () => judgementResults.Single(j => j.HitObject is HoldNote).Type, () => Is.EqualTo(result)); + private void assertCombo(int combo) + => AddAssert($"combo is {combo}", () => currentPlayer.ScoreProcessor.Combo.Value, () => Is.EqualTo(combo)); + private ScoreAccessibleReplayPlayer currentPlayer = null!; private void performTest(List frames, Beatmap? beatmap = null) From f74dfa9c6cc23c2807225b3e69be4f6ba446adac Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Fri, 1 Sep 2023 22:55:32 +0300 Subject: [PATCH 129/729] Apply flashlight slider dim immediately to match osu!(stable) --- osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs b/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs index efeac9a180..765af80959 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs @@ -69,7 +69,7 @@ namespace osu.Game.Rulesets.Osu.Mods public void OnSliderTrackingChange(ValueChangedEvent e) { // If a slider is in a tracking state, a further dim should be applied to the (remaining) visible portion of the playfield over a brief duration. - this.TransformTo(nameof(FlashlightDim), e.NewValue ? 0.8f : 0.0f, 50); + FlashlightDim = e.NewValue ? 0.8f : 0.0f; } protected override bool OnMouseMove(MouseMoveEvent e) From 920c6fa48facbd43c5edbae6ea1e66468fadc9b3 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Fri, 1 Sep 2023 23:29:51 +0300 Subject: [PATCH 130/729] Update comment --- osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs b/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs index 765af80959..252d7e2762 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs @@ -68,7 +68,7 @@ namespace osu.Game.Rulesets.Osu.Mods public void OnSliderTrackingChange(ValueChangedEvent e) { - // If a slider is in a tracking state, a further dim should be applied to the (remaining) visible portion of the playfield over a brief duration. + // If a slider is in a tracking state, a further dim should be applied to the (remaining) visible portion of the playfield. FlashlightDim = e.NewValue ? 0.8f : 0.0f; } From b0398b62595bbf099ce957cafe9af3ea9769f16a Mon Sep 17 00:00:00 2001 From: Givikap120 Date: Sun, 3 Sep 2023 02:09:01 +0300 Subject: [PATCH 131/729] functionality is done --- osu.Game/Beatmaps/BeatmapShortInfo.cs | 29 +++ osu.Game/Overlays/Mods/ModMapInfoContainer.cs | 171 +++++++++++++--- osu.Game/Overlays/Mods/ModMapInfoDisplay.cs | 185 ------------------ osu.Game/Overlays/Mods/ModSelectOverlay.cs | 17 +- .../Overlays/Mods/VerticalAttributeDisplay.cs | 76 +++++++ osu.Game/Screens/Select/BeatmapDetailArea.cs | 4 - .../Screens/Select/Details/AdvancedStats.cs | 33 ++-- osu.Game/Screens/Select/SongSelect.cs | 2 +- 8 files changed, 287 insertions(+), 230 deletions(-) create mode 100644 osu.Game/Beatmaps/BeatmapShortInfo.cs delete mode 100644 osu.Game/Overlays/Mods/ModMapInfoDisplay.cs create mode 100644 osu.Game/Overlays/Mods/VerticalAttributeDisplay.cs diff --git a/osu.Game/Beatmaps/BeatmapShortInfo.cs b/osu.Game/Beatmaps/BeatmapShortInfo.cs new file mode 100644 index 0000000000..633e12d1b2 --- /dev/null +++ b/osu.Game/Beatmaps/BeatmapShortInfo.cs @@ -0,0 +1,29 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; + +namespace osu.Game.Beatmaps +{ + public class BeatmapShortInfo : IEquatable + { + public StarDifficulty StarDifficulty; + public float CircleSize; + public float DrainRate; + public float ApproachRate; + public float OverallDifficulty; + public double BPM; + public bool Equals(BeatmapShortInfo? other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return StarDifficulty.Stars == other.StarDifficulty.Stars && + CircleSize.Equals(other.CircleSize) && + DrainRate.Equals(other.DrainRate) && + ApproachRate.Equals(other.ApproachRate) && + OverallDifficulty.Equals(other.OverallDifficulty) && + BPM.Equals(other.BPM); + } + } +} diff --git a/osu.Game/Overlays/Mods/ModMapInfoContainer.cs b/osu.Game/Overlays/Mods/ModMapInfoContainer.cs index eb5291b0a8..378e6f6057 100644 --- a/osu.Game/Overlays/Mods/ModMapInfoContainer.cs +++ b/osu.Game/Overlays/Mods/ModMapInfoContainer.cs @@ -1,24 +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.Linq; +#nullable disable + using osu.Framework.Allocation; using osu.Framework.Bindables; -using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Extensions.LocalisationExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Shapes; +using osu.Framework.Localisation; using osu.Game.Beatmaps; +using osu.Game.Beatmaps.Drawables; using osu.Game.Graphics; -using osu.Game.Graphics.Containers; using osu.Game.Graphics.Sprites; using osu.Game.Graphics.UserInterface; -using osu.Game.Online; -using osu.Game.Online.API; -using osu.Game.Online.API.Requests; -using osu.Game.Overlays.BeatmapSet; -using osu.Game.Resources.Localisation.Web; -using osu.Game.Screens.Select.Details; using osuTK; using osuTK.Graphics; @@ -26,33 +23,161 @@ namespace osu.Game.Overlays.Mods { public partial class ModMapInfoContainer : Container { - private ModMapInfoDisplay starRatingDisplay = null!; + private Container content; + private Container innerContent; + + private Box background; + private Box innerBackground; + + private StarRatingDisplay starRatingDisplay; + private BPMDisplay bpmDisplay; + + private VerticalAttributeDisplay circleSizeDisplay; + private VerticalAttributeDisplay drainRateDisplay; + private VerticalAttributeDisplay approachRateDisplay; + private VerticalAttributeDisplay overallDifficultyDisplay; [Resolved] - private OsuColour colours { get; set; } = null!; + private OverlayColourProvider colourProvider { get; set; } [Resolved] - private Bindable adjustedInfo { get; set; } = null!; - private Bindable starRatingValue = new Bindable(); + private Bindable adjustedInfo { get; set; } - //public ModMapInfoContainer() - //{ - // - //} + public ModMapInfoContainer() + { + // values as ModSelectOverlay footer buttons + const float shear = ShearedOverlayContainer.SHEAR; + const float corner_radius = 7; + const float border_thickness = 2; + InternalChild = content = new InputBlockingContainer + { + Origin = Anchor.BottomRight, + Anchor = Anchor.BottomRight, + AutoSizeAxes = Axes.X, + Height = 50, // as ModSelectOverlay footer buttons + Shear = new Vector2(shear, 0), + CornerRadius = corner_radius, + BorderThickness = border_thickness, + Masking = true, + Children = new Drawable[] + { + background = new Box + { + RelativeSizeAxes = Axes.Both + }, + new FillFlowContainer // divide inner and outer content + { + Origin = Anchor.BottomLeft, + Anchor = Anchor.BottomLeft, + AutoSizeAxes = Axes.X, + RelativeSizeAxes = Axes.Y, + Direction = FillDirection.Horizontal, + Children = new Drawable[] + { + innerContent = new Container + { + AutoSizeAxes = Axes.X, + RelativeSizeAxes = Axes.Y, + BorderThickness = border_thickness, + CornerRadius = corner_radius, + Masking = true, + Children = new Drawable[] + { + innerBackground = new Box + { + RelativeSizeAxes = Axes.Both + }, + new FillFlowContainer // actual inner content + { + Origin = Anchor.CentreLeft, + Anchor = Anchor.CentreLeft, + AutoSizeAxes = Axes.X, + Direction = FillDirection.Horizontal, + Margin = new MarginPadding { Horizontal = 15 }, + Children = new Drawable[] + { + new Container // wrap to reserve space for StarRatingDisplay + { + Width = 70, // can be up to 70px on extra high SR + Child = starRatingDisplay = new StarRatingDisplay(default, animated: true) + { + Origin = Anchor.CentreLeft, + Anchor = Anchor.CentreLeft, + Shear = new Vector2(-shear, 0), + } + }, + new Container // wrap to reserve space for BPM + { + Origin = Anchor.CentreLeft, + Anchor = Anchor.CentreLeft, + Width = 70, + Child = bpmDisplay = new BPMDisplay + { + Origin = Anchor.CentreLeft, + Anchor = Anchor.CentreLeft, + Shear = new Vector2(-shear, 0), + } + } + } + } + } + }, + new FillFlowContainer // outer content + { + Origin = Anchor.CentreLeft, + Anchor = Anchor.CentreLeft, + AutoSizeAxes = Axes.X, + RelativeSizeAxes = Axes.Y, + Direction = FillDirection.Horizontal, + Children = new[] + { + circleSizeDisplay = new VerticalAttributeDisplay("CS"), + drainRateDisplay = new VerticalAttributeDisplay("HP"), + approachRateDisplay = new VerticalAttributeDisplay("AR"), + overallDifficultyDisplay = new VerticalAttributeDisplay("OD"), + } + } + } + } + } + }; + } protected override void LoadComplete() { - starRatingDisplay = new ModMapInfoDisplay("Star Rating", colours.ForStarDifficulty); - starRatingDisplay.Current.BindTo(starRatingValue); + adjustedInfo.BindValueChanged(e => { UpdateValues(); }, true); - Content.Add(starRatingDisplay); + background.Colour = colourProvider.Background4; + innerBackground.Colour = colourProvider.Background3; + Color4 glow_colour = colourProvider.Background1; - adjustedInfo.BindValueChanged(e => { updateValues(); }, true); + content.BorderColour = ColourInfo.GradientVertical(background.Colour, glow_colour); + innerContent.BorderColour = ColourInfo.GradientVertical(innerBackground.Colour, glow_colour); } - private void updateValues() + public void UpdateValues() { - starRatingValue.Value = adjustedInfo.Value.StarRating; + if (adjustedInfo.Value == null) return; + + starRatingDisplay.Current.Value = adjustedInfo.Value.StarDifficulty; + bpmDisplay.Current.Value = adjustedInfo.Value.BPM; + + circleSizeDisplay.Current.Value = adjustedInfo.Value.CircleSize; + drainRateDisplay.Current.Value = adjustedInfo.Value.DrainRate; + approachRateDisplay.Current.Value = adjustedInfo.Value.ApproachRate; + overallDifficultyDisplay.Current.Value = adjustedInfo.Value.OverallDifficulty; + } + + private partial class BPMDisplay : RollingCounter + { + protected override double RollingDuration => 500; + + protected override LocalisableString FormatCount(double count) => count.ToLocalisableString("0 BPM"); + + protected override OsuSpriteText CreateSpriteText() => new OsuSpriteText + { + Font = OsuFont.Default.With(size: 20, weight: FontWeight.SemiBold) + }; } } } diff --git a/osu.Game/Overlays/Mods/ModMapInfoDisplay.cs b/osu.Game/Overlays/Mods/ModMapInfoDisplay.cs deleted file mode 100644 index ca815984ce..0000000000 --- a/osu.Game/Overlays/Mods/ModMapInfoDisplay.cs +++ /dev/null @@ -1,185 +0,0 @@ -// 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.Bindables; -using osu.Framework.Extensions.LocalisationExtensions; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Shapes; -using osu.Framework.Graphics.UserInterface; -using osu.Framework.Localisation; -using osu.Game.Graphics; -using osu.Game.Graphics.Sprites; -using osu.Game.Graphics.UserInterface; -using osu.Game.Localisation; -using osuTK; - - -namespace osu.Game.Overlays.Mods -{ - public partial class ModMapInfoDisplay : Container, IHasCurrentValue - { - public const float HEIGHT = 42; - private const float transition_duration = 200; - - private readonly Box contentBackground; - private readonly Box labelBackground; - private readonly FillFlowContainer content; - - //public Bindable Current - //{ - // get => current.Current; - // set => current.Current = value; - //} - //private readonly BindableWithCurrent current = new BindableWithCurrent(); - - public Bindable Current { get; set; } = new BindableWithCurrent(); - - //[Resolved] - //private OsuColour colours { get; set; } = null!; - - [Resolved] - private OverlayColourProvider colourProvider { get; set; } = null!; - - protected Func GetColor; - - /// - /// Text to display in the left area of the display. - /// - protected LocalisableString Label; - - protected virtual float ValueAreaWidth => 56; - - protected virtual string CounterFormat => @"0.00"; - - protected override Container Content => content; - - protected readonly RollingCounter Counter; - - public ModMapInfoDisplay(LocalisableString label, Func colorFunc) - { - Label = label; - GetColor = colorFunc; - Height = HEIGHT; - AutoSizeAxes = Axes.X; - - InternalChild = new InputBlockingContainer - { - RelativeSizeAxes = Axes.Y, - AutoSizeAxes = Axes.X, - Masking = true, - CornerRadius = ModSelectPanel.CORNER_RADIUS, - Shear = new Vector2(ShearedOverlayContainer.SHEAR, 0), - Children = new Drawable[] - { - contentBackground = new Box - { - Anchor = Anchor.CentreRight, - Origin = Anchor.CentreRight, - RelativeSizeAxes = Axes.Y, - Width = ValueAreaWidth + ModSelectPanel.CORNER_RADIUS - }, - new GridContainer - { - RelativeSizeAxes = Axes.Y, - AutoSizeAxes = Axes.X, - ColumnDimensions = new[] - { - new Dimension(GridSizeMode.AutoSize), - new Dimension(GridSizeMode.Absolute, ValueAreaWidth) - }, - Content = new[] - { - new Drawable[] - { - new Container - { - RelativeSizeAxes = Axes.Y, - AutoSizeAxes = Axes.X, - Masking = true, - CornerRadius = ModSelectPanel.CORNER_RADIUS, - Children = new Drawable[] - { - labelBackground = new Box - { - RelativeSizeAxes = Axes.Both - }, - new OsuSpriteText - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Margin = new MarginPadding { Horizontal = 18 }, - Shear = new Vector2(-ShearedOverlayContainer.SHEAR, 0), - Text = Label, - Font = OsuFont.Default.With(size: 17, weight: FontWeight.SemiBold) - } - } - }, - content = new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Direction = FillDirection.Horizontal, - Shear = new Vector2(-ShearedOverlayContainer.SHEAR, 0), - Spacing = new Vector2(2, 0), - Child = Counter = new EffectCounter(CounterFormat) - { - Anchor = Anchor.CentreLeft, - Origin = Anchor.CentreLeft, - Current = { BindTarget = Current } - } - } - } - } - } - } - }; - } - - [BackgroundDependencyLoader] - private void load() - { - labelBackground.Colour = colourProvider.Background4; - } - - protected override void LoadComplete() - { - Current.BindValueChanged(e => - { - //var effect = CalculateEffectForComparison(e.NewValue.CompareTo(Current.Default)); - setColours(e.NewValue); - }, true); - } - - /// - /// Fades colours of text and its background according to displayed value. - /// - /// value - private void setColours(double value) - { - contentBackground.FadeColour(GetColor(value), transition_duration, Easing.OutQuint); - } - - private partial class EffectCounter : RollingCounter - { - private readonly string? format; - - public EffectCounter(string? format) - { - this.format = format; - } - - protected override double RollingDuration => 500; - - protected override LocalisableString FormatCount(double count) => count.ToLocalisableString(format); - - protected override OsuSpriteText CreateSpriteText() => new OsuSpriteText - { - Font = OsuFont.Default.With(size: 17, weight: FontWeight.SemiBold) - }; - } - } -} diff --git a/osu.Game/Overlays/Mods/ModSelectOverlay.cs b/osu.Game/Overlays/Mods/ModSelectOverlay.cs index a178f2e9dc..426c424541 100644 --- a/osu.Game/Overlays/Mods/ModSelectOverlay.cs +++ b/osu.Game/Overlays/Mods/ModSelectOverlay.cs @@ -222,13 +222,18 @@ namespace osu.Game.Overlays.Mods }); } - aboveColumnsContent.Add(mapInfoContainer = new ModMapInfoContainer + FooterContent.Add(mapInfoContainer = new ModMapInfoContainer { - Anchor = Anchor.TopLeft, - Origin = Anchor.TopLeft + Anchor = Anchor.BottomRight, + Origin = Anchor.BottomRight, + Padding = new MarginPadding + { + Vertical = PADDING, + Horizontal = 70 + }, }); - FooterContent.Child = footerButtonFlow = new FillFlowContainer + FooterContent.Add(footerButtonFlow = new FillFlowContainer { RelativeSizeAxes = Axes.X, AutoSizeAxes = Axes.Y, @@ -248,7 +253,7 @@ namespace osu.Game.Overlays.Mods DarkerColour = colours.Pink2, LighterColour = colours.Pink1 }) - }; + }); globalAvailableMods.BindTo(game.AvailableMods); } @@ -413,7 +418,7 @@ namespace osu.Game.Overlays.Mods if (mapInfoContainer == null) return; - //mapInfoDisplay.Current.Value = 5; + mapInfoContainer.UpdateValues(); } private void updateCustomisation() diff --git a/osu.Game/Overlays/Mods/VerticalAttributeDisplay.cs b/osu.Game/Overlays/Mods/VerticalAttributeDisplay.cs new file mode 100644 index 0000000000..2ad420657c --- /dev/null +++ b/osu.Game/Overlays/Mods/VerticalAttributeDisplay.cs @@ -0,0 +1,76 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Bindables; +using osu.Framework.Extensions.LocalisationExtensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.UserInterface; +using osu.Framework.Localisation; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Graphics.UserInterface; +using osuTK; + + +namespace osu.Game.Overlays.Mods +{ + public partial class VerticalAttributeDisplay : Container, IHasCurrentValue + { + public Bindable Current + { + get => current.Current; + set => current.Current = value; + } + private readonly BindableWithCurrent current = new BindableWithCurrent(); + + /// + /// Text to display in the top area of the display. + /// + public LocalisableString Label { get; protected set; } + + public VerticalAttributeDisplay(LocalisableString label) + { + Label = label; + AutoSizeAxes = Axes.X; + Origin = Anchor = Anchor.CentreLeft; + Shear = new Vector2(-ShearedOverlayContainer.SHEAR, 0); + InternalChild = new FillFlowContainer + { + Origin = Anchor.CentreLeft, + Anchor = Anchor.CentreLeft, + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Children = new Drawable[] + { + new OsuSpriteText + { + Origin = Anchor.Centre, + Anchor = Anchor.Centre, + Text = Label, + Margin = new MarginPadding { Horizontal = 15 }, // to reserve space for 0.XX value + Font = OsuFont.Default.With(size: 20, weight: FontWeight.Bold) + }, + new EffectCounter() + { + Origin = Anchor.Centre, + Anchor = Anchor.Centre, + Current = { BindTarget = Current } + } + } + }; + } + + private partial class EffectCounter : RollingCounter + { + protected override double RollingDuration => 500; + + protected override LocalisableString FormatCount(double count) => count.ToLocalisableString("0.##"); + + protected override OsuSpriteText CreateSpriteText() => new OsuSpriteText + { + Font = OsuFont.Default.With(size: 18, weight: FontWeight.SemiBold) + }; + } + } +} diff --git a/osu.Game/Screens/Select/BeatmapDetailArea.cs b/osu.Game/Screens/Select/BeatmapDetailArea.cs index d43831e576..595b86924b 100644 --- a/osu.Game/Screens/Select/BeatmapDetailArea.cs +++ b/osu.Game/Screens/Select/BeatmapDetailArea.cs @@ -4,7 +4,6 @@ #nullable disable using System; -using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -31,9 +30,6 @@ namespace osu.Game.Screens.Select public readonly BeatmapDetails Details; - //[Cached] - //public Bindable AdjustedInfo { get; private set; } = new Bindable(); - protected Bindable CurrentTab => tabControl.Current; protected Bindable CurrentModsFilter => tabControl.CurrentModsFilter; diff --git a/osu.Game/Screens/Select/Details/AdvancedStats.cs b/osu.Game/Screens/Select/Details/AdvancedStats.cs index 8f609888df..31fac8b4a0 100644 --- a/osu.Game/Screens/Select/Details/AdvancedStats.cs +++ b/osu.Game/Screens/Select/Details/AdvancedStats.cs @@ -46,10 +46,8 @@ namespace osu.Game.Screens.Select.Details private IBeatmapInfo beatmapInfo; -#nullable enable - [Resolved] - private Bindable? adjustedInfo { get; set; } = null; -#nullable disable + [Resolved(canBeNull: true)] + private Bindable adjustedInfo { get; set; } = null; public IBeatmapInfo BeatmapInfo { @@ -104,19 +102,30 @@ namespace osu.Game.Screens.Select.Details private ModSettingChangeTracker modSettingChangeTracker; private ScheduledDelegate debouncedStatisticsUpdate; + private StarDifficulty latestStarDifficulty = new StarDifficulty(); private void updateBindedInfo() { if (adjustedInfo == null) return; - BeatmapInfo adjusted = (BeatmapInfo)beatmapInfo; - adjusted.Difficulty.CircleSize = FirstValue.Value.adjustedValue ?? 0; - adjusted.Difficulty.DrainRate = HpDrain.Value.adjustedValue ?? 0; - adjusted.Difficulty.ApproachRate = ApproachRate.Value.adjustedValue ?? 5; - adjusted.Difficulty.OverallDifficulty = Accuracy.Value.adjustedValue ?? 0; - adjusted.StarRating = starDifficulty.Value.adjustedValue ?? 0; + // sadly need to calculate this to prevent additional data transportation + double rate = 1; + foreach (var mod in mods.Value.OfType()) + rate = mod.ApplyToRate(0, rate); + + double bpm = 0; + if (beatmapInfo != null) bpm = beatmapInfo.BPM * rate; + + BeatmapShortInfo adjusted = new BeatmapShortInfo() + { + CircleSize = FirstValue.Value.adjustedValue ?? FirstValue.Value.baseValue, + DrainRate = HpDrain.Value.adjustedValue ?? HpDrain.Value.baseValue, + ApproachRate = ApproachRate.Value.adjustedValue ?? ApproachRate.Value.baseValue, + OverallDifficulty = Accuracy.Value.adjustedValue ?? Accuracy.Value.baseValue, + BPM = bpm, + StarDifficulty = latestStarDifficulty + }; adjustedInfo.Value = adjusted; - adjustedInfo.TriggerChange(); } private void modsChanged(ValueChangedEvent> mods) @@ -165,6 +174,7 @@ namespace osu.Game.Screens.Select.Details Accuracy.Value = (baseDifficulty?.OverallDifficulty ?? 0, adjustedDifficulty?.OverallDifficulty); ApproachRate.Value = (baseDifficulty?.ApproachRate ?? 0, adjustedDifficulty?.ApproachRate); + updateBindedInfo(); // to faster UI response (without SR calculation) updateStarDifficulty(); } @@ -199,6 +209,7 @@ namespace osu.Game.Screens.Select.Details return; starDifficulty.Value = ((float)normalDifficulty.Value.Stars, (float)moddedDifficulty.Value.Stars); + latestStarDifficulty = moddedDifficulty ?? default; updateBindedInfo(); }), starDifficultyCancellationSource.Token, TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.Current); diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 4567869e8e..ad98d1721b 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -100,7 +100,7 @@ namespace osu.Game.Screens.Select private Bindable> selectedMods { get; set; } = null!; [Cached] - private Bindable adjustedInfo { get; set; } = new Bindable(); + private Bindable adjustedInfo { get; set; } = new Bindable(); protected BeatmapCarousel Carousel { get; private set; } = null!; From 0779cd8f4f998c2d9b29fd71787681875bec9979 Mon Sep 17 00:00:00 2001 From: Givikap120 Date: Sun, 3 Sep 2023 02:17:04 +0300 Subject: [PATCH 132/729] minor design fixes --- osu.Game/Overlays/Mods/ModSelectOverlay.cs | 59 ++++++++++++---------- osu.Game/Screens/Select/SongSelect.cs | 4 -- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/osu.Game/Overlays/Mods/ModSelectOverlay.cs b/osu.Game/Overlays/Mods/ModSelectOverlay.cs index 426c424541..8de4447b31 100644 --- a/osu.Game/Overlays/Mods/ModSelectOverlay.cs +++ b/osu.Game/Overlays/Mods/ModSelectOverlay.cs @@ -222,41 +222,44 @@ namespace osu.Game.Overlays.Mods }); } - FooterContent.Add(mapInfoContainer = new ModMapInfoContainer + FooterContent.Children = new Drawable[] { - Anchor = Anchor.BottomRight, - Origin = Anchor.BottomRight, - Padding = new MarginPadding + mapInfoContainer = new ModMapInfoContainer { - Vertical = PADDING, - Horizontal = 70 + Anchor = Anchor.BottomRight, + Origin = Anchor.BottomRight, + Padding = new MarginPadding + { + Vertical = PADDING, + Horizontal = 70 + } }, - }); - - FooterContent.Add(footerButtonFlow = new FillFlowContainer - { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Direction = FillDirection.Horizontal, - Anchor = Anchor.BottomLeft, - Origin = Anchor.BottomLeft, - Padding = new MarginPadding + footerButtonFlow = new FillFlowContainer { - Vertical = PADDING, - Horizontal = 70 - }, - Spacing = new Vector2(10), - ChildrenEnumerable = CreateFooterButtons().Prepend(BackButton = new ShearedButton(BUTTON_WIDTH) - { - Text = CommonStrings.Back, - Action = Hide, - DarkerColour = colours.Pink2, - LighterColour = colours.Pink1 - }) - }); + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Direction = FillDirection.Horizontal, + Anchor = Anchor.BottomLeft, + Origin = Anchor.BottomLeft, + Padding = new MarginPadding + { + Vertical = PADDING, + Horizontal = 70 + }, + Spacing = new Vector2(10), + ChildrenEnumerable = CreateFooterButtons().Prepend(BackButton = new ShearedButton(BUTTON_WIDTH) + { + Text = CommonStrings.Back, + Action = Hide, + DarkerColour = colours.Pink2, + LighterColour = colours.Pink1 + }) + } + }; globalAvailableMods.BindTo(game.AvailableMods); } + public override void Hide() { base.Hide(); diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index ad98d1721b..7749e3937a 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -308,9 +308,6 @@ namespace osu.Game.Screens.Select // therein it will be registered at the `OsuGame` level to properly function as a blocking overlay. LoadComponent(ModSelect = CreateModSelectOverlay()); - //var bindedStats = BeatmapDetails.Details.GetBindedAdjustedMapStats(); - //ModSelect.SetBindedMapStats(bindedStats); - if (Footer != null) { foreach (var (button, overlay) in CreateFooterButtons()) @@ -586,7 +583,6 @@ namespace osu.Game.Screens.Select FilterControl.Activate(); ModSelect.SelectedMods.BindTo(selectedMods); - //BeatmapDetails.AdjustedInfo.BindTo(adjustedInfo); beginLooping(); } From 5e5fe84a88d15af428ee6bff7ecd3e46b26bbf65 Mon Sep 17 00:00:00 2001 From: Givikap120 Date: Sun, 3 Sep 2023 02:19:02 +0300 Subject: [PATCH 133/729] Update AdvancedStats.cs --- osu.Game/Screens/Select/Details/AdvancedStats.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/Screens/Select/Details/AdvancedStats.cs b/osu.Game/Screens/Select/Details/AdvancedStats.cs index 31fac8b4a0..a12323ab70 100644 --- a/osu.Game/Screens/Select/Details/AdvancedStats.cs +++ b/osu.Game/Screens/Select/Details/AdvancedStats.cs @@ -176,7 +176,6 @@ namespace osu.Game.Screens.Select.Details updateBindedInfo(); // to faster UI response (without SR calculation) updateStarDifficulty(); - } private CancellationTokenSource starDifficultyCancellationSource; From 2c81fe5613e79e2e9370f19d40a1839e28a20c45 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Sat, 2 Sep 2023 01:29:57 +0300 Subject: [PATCH 134/729] Make gameplay skin elements in `special-skin` awfully large --- .../special-skin/fruit-apple-overlay.png | Bin 4677 -> 26684 bytes .../Resources/special-skin/fruit-apple.png | Bin 4677 -> 26685 bytes .../special-skin/fruit-bananas-overlay.png | Bin 4949 -> 23898 bytes .../Resources/special-skin/fruit-bananas.png | Bin 4949 -> 23899 bytes .../special-skin/fruit-drop-overlay.png | Bin 4677 -> 26684 bytes .../Resources/special-skin/fruit-drop.png | Bin 4677 -> 26684 bytes .../special-skin/fruit-grapes-overlay.png | Bin 4677 -> 26684 bytes .../Resources/special-skin/fruit-grapes.png | Bin 4633 -> 26684 bytes .../special-skin/fruit-orange-overlay.png | Bin 4633 -> 26685 bytes .../Resources/special-skin/fruit-orange.png | Bin 4633 -> 26685 bytes .../special-skin/fruit-pear-overlay.png | Bin 4633 -> 26685 bytes .../Resources/special-skin/fruit-pear.png | Bin 4633 -> 26686 bytes .../Resources/special-skin/hitcircle@2x.png | Bin 245645 -> 295339 bytes .../special-skin/hitcircleoverlay-0@2x.png | Bin 26595 -> 87032 bytes .../special-skin/hitcircleoverlay-1@2x.png | Bin 40858 -> 119975 bytes .../Resources/old-skin/taiko-roll-end.png | Bin 0 -> 2095 bytes .../Resources/old-skin/taiko-roll-middle.png | Bin 0 -> 140 bytes .../special-skin/taiko-drum-inner.png | Bin 0 -> 1926 bytes .../special-skin/taiko-drum-outer.png | Bin 0 -> 3749 bytes .../Resources/special-skin/taiko-roll-end.png | Bin 0 -> 14570 bytes .../special-skin/taiko-roll-middle.png | Bin 0 -> 4791 bytes ...ikobigcircle@2x.png => taikobigcircle.png} | Bin .../special-skin/taikobigcircleoverlay.png | Bin 0 -> 66280 bytes .../Resources/special-skin/taikohitcircle.png | Bin 0 -> 12374 bytes .../special-skin/taikohitcircleoverlay.png | Bin 0 -> 66281 bytes 25 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-roll-end.png create mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-roll-middle.png create mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taiko-drum-inner.png create mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taiko-drum-outer.png create mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taiko-roll-end.png create mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taiko-roll-middle.png rename osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/{taikobigcircle@2x.png => taikobigcircle.png} (100%) create mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikobigcircleoverlay.png create mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikohitcircle.png create mode 100644 osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikohitcircleoverlay.png diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-apple-overlay.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-apple-overlay.png index fe567d158d0b47f06c39eca9d055b9c8361b040a..c6e27996b92328a0c6fbcf3fb9f4f6b6598bbdfb 100755 GIT binary patch literal 26684 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 literal 4677 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 Hu0mjfgVw2; diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-apple.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-apple.png index 17f3be9c262953cac52da794d601bb853d8dc276..6a862572faca191c265bd1bdd76283c08fdab790 100755 GIT binary patch literal 26685 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 B13Lf! literal 4677 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 Hu0mjf9r&r4 diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-bananas-overlay.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-bananas-overlay.png index 2c94ea78bfdba901614472a3215401d7b0a2dd71..9d1d6d1177b9e36bcef557251ba3914fa5acbae2 100755 GIT binary patch literal 23898 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 literal 4949 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 Hu0mjfi%6-N diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-drop.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-drop.png index f259684055ad3ce25b2c3cdb5c3a53062b60a8e9..b3d7e39dcdec42cc39c96f004690d7f6a7337be3 100755 GIT binary patch literal 26684 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 literal 4677 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 Hu0mjfQGBVH diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-grapes-overlay.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-grapes-overlay.png index 17f3be9c262953cac52da794d601bb853d8dc276..2529b5cd1928637c69a512b292d5533fee42a48c 100755 GIT binary patch literal 26684 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 Hu0mjf9r&r4 diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-grapes.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-grapes.png index 3dc60464cf31e3ba07d5585542d75d616f63da03..f2bbf26ad759fb2ca151a839d4e61a983ac45f2a 100755 GIT binary patch literal 26684 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 P00000NkvXXu0mjfY&D(f diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-orange-overlay.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-orange-overlay.png index 3dc60464cf31e3ba07d5585542d75d616f63da03..254a6f32bca09ab3009cb6d25ca4d57c048ba97a 100755 GIT binary patch literal 26685 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 B;9~#) literal 4633 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 P00000NkvXXu0mjfY&D(f diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-orange.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-orange.png index 3dc60464cf31e3ba07d5585542d75d616f63da03..998f5fb3cb6f04dd8541efdc151bde4014aa69db 100755 GIT binary patch literal 26685 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 P00000NkvXXu0mjfY&D(f diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-pear-overlay.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-pear-overlay.png index 3dc60464cf31e3ba07d5585542d75d616f63da03..0d8d037a5f0357f90e13ff9cb05544cbd6d7d931 100755 GIT binary patch literal 26685 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 literal 4633 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 P00000NkvXXu0mjfY&D(f diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-pear.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-pear.png index 3dc60464cf31e3ba07d5585542d75d616f63da03..c8acaaa58349b47893c0c3ab3bbd4a2d472c8721 100755 GIT binary patch literal 26686 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 B?Uw)m literal 4633 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 P00000NkvXXu0mjfY&D(f diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/special-skin/hitcircle@2x.png b/osu.Game.Rulesets.Osu.Tests/Resources/special-skin/hitcircle@2x.png index 919d8f405ca7f40c921e71b91e7a81655db1f94b..207ce15dfabab74df8b5c13932506d94ef19dcfe 100755 GIT binary patch delta 95844 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�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 K?H<|qr~Dr=#f2~c delta 42344 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 diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/special-skin/hitcircleoverlay-0@2x.png b/osu.Game.Rulesets.Osu.Tests/Resources/special-skin/hitcircleoverlay-0@2x.png index 8e50cd033596fb3daacd173247d6779168cc8f99..ccd1494cdf1a9d19a9c860b88d240392ef1919ea 100755 GIT binary patch literal 87032 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 CAgN>k literal 26595 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

yftJ!Y0GsdcN%;MEM+5u>2KjHnOqx_AeVsl z_CP*3E@GR?8nTYm7?*od@l=B^+bO&1n(VdXMvK|N!rqKja`Kj{vv~f?(>M=p=c)}| zOvv?Al|yS>FjK${A~9cf?eXzO_o5MXclE2rX9LkU5zkX)UYqP+`w)CzE`P7{&dJ9g zm@6d|ZEWnPV~@4lML3)+>Nhx4NZYf1R_J$6m!a zz;P`c#CMGl|9vdXa+l(``Ew=)Y?f{W9!%J@YDKla@!VTZx;n}cj^r)XdUS$yq|ae$LT>Uj2lnE z1dwpKVfy~Khpk8BMsBeE8FTeueKK_Fv$lPZI=q>on^SJIy-O|nHwMH59hPy_rys-6`O;iCCar`US4wr>E(?kD5Y>WE5cYiTgY2_-v?f!90 z0@e!o;xXmU+FRD>38qxfW-X339=Z-5mC|1O>6ek;nhY~xhVD+>JWQFSZ0TL2AXv{2 z?92H(47a=>M3p=c>Jl;1$Oro9&iswXP?w0hc3W37yEKZ&wwC=tH*KGFq`Smj%EZ!j z_?%_>o8>SJcwHmTx9dX?1AFG}bP=vmh>N3V;Zb*(etZI%a}K_T0^I_L5I zdTOw|0T_ur`mCEiob3&{Q+2sY$?s<4&s?>YwtcDv-uW!`OJL3e96^BR9Nh|2-PPhz zzN=Z?V)J`4gY=(>{f;s3uF|||Dv1MTs4V5%LIsTM>Bv_ayp!ur;ln~qclIeJA52%N zpsLa30u4F|Jo1|1ELXA27~Vy&EpTsdLR5h@V+nNgmbrd<+Br>JmAr;zy3a84xXd(# zOWKyk(@!-%tF@MDya@@X`eZ29P;-u`UXdHBxMRN_iRx_R`s1*DU-hq&`S-3Ow{KsN zqQjvXP%r5UoYlAXoxuddXISVUA=2O&dy!_VH}AqTX;7|xE}=nf8=D$8(*-4n>^l1= zh3+=Ew&!|uG{R-Rq?v2_s$D!Iry)NOCV-=qD+^BO8rV?(CQoDi8TGpUgZ4e) z>o|TTFzR=b*Q8O^I2qLqYSGuD7AUcg>aixg2sEu-dWcSx<{GQNwshARNIm8HRY$zb zd?)6(+{hWBhHAS;b2$V?%O%!ulA;0`153I4LxSIU8Hi~zFBqUiFZVTJb_g*7B~e5e zgeKqh8OsUDjAjcaCKB&Dxp3+3x)K=bf$ayn5#RK-XHQ=7ei4}Doyhz1Sj+0{@9w2H zN|~u8;WC@Tyefyu+nmbGyk`1O*2kD{pEo;4$sSvmFU$$yrS`g z&NpLE*6W7nS3AEy1pbL=38T(sh=1+yJiCWZ=kp3(Uib5%r~+wvmv8IM!cs7Etxi(p zx3Mfk$$Ze5y;7;lqP#i-VLlXh7bT7#XJLdwH0U1F1PmOtRTQp|JyB*L{`d{3;%|V> zS;$w=m9B?J;F=fs@?n;JB5TiInq05QJ2x;xl>+gQ4%IRC%qQonbb0gC zv!Pwhr?r5#Dp5zPYy(#Qj12&MdmJwLd3ACrQ|-hafm@anmPUMONVD{=X9uq*D5h&~ zU&RR(-?g}l5~q&HdA9V=;K%533LPEKE7t0sqz5100ZuI?hn3wu(e^9_s|kxYv`1^| zBohM$97kQjQ@JNsa0Dt8*(JO|@`#;~X+MltPbRm*^-e4oA$6rw%BVr zI8?}b>>UTbEn(qupPzu#0IjJKL+(jAU(kh+zl@j}Rvz6JRH{P9xl&z6<8iae%{z#@ zH@9>*YF;~9j)x6Np?_cf8Kr1m-BF*W*cliLGvtRFe|lEm2UtN3`x0dXU)8}?49`Nu zgy?&0ssyuiTz1acpJbBLEH=#3KUg(LKu;@{foRQ?_rd^(`yF;aj{_8m9@6&OSDuDt z7=6T5Y$xt@mt)`smt5YyN1%YIeC6uX9!kS_k4*^c?j^Xw#`ixTYTsvAaAG{6H6z^F zC%o;E)X!SMU`A+ivG*^U>2TzhfF$)f8(^#pC?fhmfB2cx`4a3J(V7VbCLkli44&3 zhL6bO5t~{f_xV@vedk-+veC%ziSgH^?u?YmeTArWaPP1K*MKM@kErgCNBW44Tboav zCtR*=(-bBAeb)U`*GYR6d_5^^_h6kQR+yKj)v4iPTNPu&L4?jWT!5?AHKHCrU=%IA4?hAs+# z*yX3cxwQ^B*W$*WWI}2Hm!xGeF9gqRFW#3Qknp)~A&#@@I__5bG~;20M3ygQZ%0-1 zaSF7tsPBO>JavUgmegHBFvR8jo6YmE#N&5Q`7!13Ow+?={lr)l2f{m6DKw`SvE=sKp7hW>=_RxJKxa!hM3L+L`;N* zAeGJlBj5Z#c)BOwx2MMynN=<|VxYcgDk)}EG|U8I1IF*`8Gu0cH*hr1$LoM+#geeG zi!l&^htB;6Ef*e_N44;O`Fz=iPGu1 z42*{r%*>YEeOl8o(yZ+Bv-3nf8rhSnYT3of2sSJ@{>z|GKIQ~s=hZ>0><;5>x|OO< z2e_@o+sImdYIreRIeQ1e8 zfnB_}SQA6~tq}uxH9BIRBChi;Z2SiRw;n>!zl7wkI5DC_&jFe7?p7uv4wBB_ z-BBw{T5T-Qe{t0n1OpT^4oQW$fH&^vdk$PM6?La`LCdcW{?XZb4AVsFh{Z4fk&9Y} z&tT~5%DXoUZ6p>=;!E!-Y0ve0v5fae$bXIadKYn&f-~(>OHY@tSxBPT-F+#PB)$AH8zzn}cCy(Vb zU#W88C*iNq&slaQi>U%Fi02J2l+%0m{*h_%m50BGycu)qIL>R@;3#L93T~v`!NOi@ zG$2&khc!zDcn^J^j^rR_!R>~bQqKo4&6I1uD{1Dr?Z*4E*1-`(m@mHK2h8%nMKGuK z!`#;JMfe+W^+c*|5@$edo#j`?-nQ=j&aQ}3>2k@DP`6_tHwZf3!&h&}7w%Lntc^;n zxR!aw!V zx~*w;VJ~J{E@DX+*DJ}tE1k>fC;Z)2Z6&Sf>prX@s{ti^djQ@{8Tr94O`X&z=c6(N z!zl@?vMmBM?4W{wT3q$7xcQ0a@;6pt8lyAlS6lHienC3sRf6SwHLtca8>=*qt|7E9 zf3v8xQ?T(YZr3SI{Yedm0p&q>urB5z@^g7WQ=p`G>6q;PArZ2~SO*rAKKxJi>|hVW8g*F9vRPVG9`>$kfp9 z1tm*si}{xSAu+P@V;mV@IkRMUsVF~m*E{}P7;sLT=ztXbON-3WS z9h)n02KAGv%L-Ga>ArX1oaFg04PM+UWf!nExft-^UWt`#8a>~)XKx^AnWIO<_nD~P zrBF8mDk;~X=<|AGhlr~HFH>?VNX+%`Cg#B{qM1c7six&Xt=?DR1XCi z%*s<2qaa#lnv*Qu7F``ZWuimrc@Vx+W&A?NeJL3@VlZK&y(4X(V~T7;Q1!YrrcazD zt#QdBA=llwhINoPM@BkC(KaNS<0)#>*vd2 zX>icx(eevJHy)Me@I!IC575thPm8F1>i-dr6JoJ%`rBRj&fX|3{as~qsW?BPFqc)P z|BsdkKgb4NNyGG5p{%X#`HPHVb~{zZx1tk6Os$E3)2#n(+NhXt-thBr@0vAx z)k_zq?r+YzN+kcl_6hI5R`(afZuC(;j-OyfPO(M%LSj=)Ja=GT^SU!Jqba5jZP3Cr z+yQZ?KUZxcL1x=^h0170UyNmiK2EK@Csiq4An*H=wd-eR;UOe%#kE8$R^dB>^%9YR zN)Jv0R5UnE-JC80pH~+aySMiddVdqX|2Jb>%L;-q20N3)rtN-`7y+D$dOWgf9Qd)q z(XsUWHT!6PMRUc%BIunK;wRD6k`z1gau;#*_HpC@|Jq1}A+Awx&^e949Dbm1&~4ljjEG*y$@n+_&K7Q>$gH zOryOfOB=`DmEb~|AD@R$Zi^wPvYemHB3zt@A&6;48euVj!4Tuk?8#u{PlF6bL}xI5 z;wsLcuAE*3Au_itx}opD-m{V%szFBS3v~P#)tvMFU=;Dlnw$jE7@T34a-4K51)oTJ zj)mbXBJrxqG|!)w5Xu={o-!qVhTkS#5^I2$X*|8FnCcSkZ!<7qH&dWB9%7l43GeHN z>sgVLX+FQOIX)S|n9pLL9ypht&%Ac&&G4m{%B!l<=^u{k=N_LnaoU}cOFdy&Bxu15 z`Dlv7<|JmP6vQ0u%Fjya4z&Lm^bAyUl6#i-0kn)9rk(aYg0u-6!!=f<-I{^y%meK7^6+52<#w!KI#D>?X2hr|cx5l(B`#+me0BD3UEnmMk-4tVxl*QbXBg z4`rPqi7b)GHq&A!TNuppy?cEA`TgeKdCbhY&s_Jp&UMb~dG7jsFYoY}X1Bgv%?CG} z2t=wKUR%CsppoU2QhF87aeDT0%_q;(#RpLz%;g=yJGG-|t$ID@AF)xM?dMzB`FbKK z`iDmr6KuB)3>~iPYz^vPybbIWr0)^RGk93M1b zO0f$=YF+VS(LnV&@KawFbsn!iElexdWq|KSkTot%mucSy<(+DQszJ)mCD|4>^f}6q zYphD>mfAgLlH{usX9RTm*vl4Jv>=on6+57uUuo`ysFedTP_N2?U7+hS#ET)=F3J0O z3ruSg*3(3318zj)u57~(5l#EA54?VT@+)>yD4qEG(t$ayuDkyc6HG?WmXlJrl8>-z zAc!343-Hx@wbFI$B*eAL+5;va1lqA3?Hv``YW-P2^D(TO3*K-}(lvbfFcXgJ_CE}) zxheR3{hWvISJ6-qV#$vlO>?2|VX$PhD}G>j!|Ljl`nBPC^wpeiR72_D%DzaKW|nRW*&N3T@B%JT?B*Q|ruL6Gy3-mJi7$W=0t z0F5<#;^66JKu>`81RDmzW6xstEfO}{cH2+@pI#{1b33$ncV}?i-%3l|u`i)sPY|Kn z1m)1?@HUr(F^^GEUmL5+4hr|Uqjom;<))W0h=v6B==gwM z&krdI=FSi4exr@=75*jU32-7pIPtMCm@HA)$E^amE9GS_$w4=a>C8AtGRGOFm-vDw zlTST;CO@WT1eK;LT|s@fp4F|NVmLoCvzTQ2WLctkRjLmfPw$c>Rr0L%L$QJm7%@N@ z7(T*EaH+CWLQh4vd~3V8s|%)W&nHqt2G96-I^d7IkQ!nI1l=K7VBAE-p)u3imkw5* zsD>S?JoX5}x#ODl?^wR3XFQ}4NJH7A!F8!w;tWLUa~MSWJ*g;6e*lVQ2?{&2Bo0yI z)ojz>n3@R^vC<-5s=}MxId+}p`h@dqR(kl+!O1vbDxCs~54wsvP41k_W<0f0B>%yV z-T;@-sF?um(_>~#>@&%AqSNkSSLYjc67z#~GCQIkvgPnIC?VCE4Sx*CyJrR*vHdK_ zktUKR;@IjKSNUfr;^#z`Mqg<4OGzbg6p9cm@g!yt62eKsUrRM`!0jguX6dss0H(y^ zVO&vX_1*9$MW?&38b7aT}IY_(e*`5aUhAPiEVDqe>>xwTje%4_a+(4*JDdj29;WahnJoTky; zr>py!LG#Y@5bY;@EL@tm-aT`H^f;M7g{eM-t6Wh&mS*KO2Uz#fy6PpfaS&G*^L_Hr zd%4rrz46Lwhf^f@eIRw|XnSl&F0Qj0V5mWLubF+@TL`YiO><(t#AEW<^>3XLqjCcb zRXhDF=d7bqq+ZQS;D)7)+oOIc8*3F$Ta{|RF?#Y^YA`CF4FJ>!bxb+E79QjKV(py z%|z&GKI9|kC*q}NJhv1!$_DjKpdQ@Rmna;r(_{QEDTi1n`o>LuB~ANz7B=FbYx2Kq zK8<;5^I)2k^^SZx;ylxX<@#|xaK-f;maai%1rA?WoPEsdJbdb@8JNLstWX*HI7=D zGmnB^?tEuCl{Wi+?_HUVlX@{!6f5VF2|h4MeViH5(Z8nZ$n}y zyL+$Hg#(F+Wk*N@M+@Qd5vK+}5;h%x0{E3E^+y65^Ds^@39=^!p~JzJgukvqnnw2GjRMTkd?sG-9|H*&Y+0>jsAmePiBE{D5cnq8H~vRlG^ zh<21*7&-{f`qPXFs-12&g7Rxl0bXOce4+r=vJCKLL9Ge#<8FW~VIxR#{I<4w|2p@8ja>K$bFdQU0-k3P$LpY4Kt7V$p!|xY6%oaPdIY?K&wX~g8R8w1 zaI(j3S!3`F4%b8mwPQC?D9o`q4pkuT?Jad>!QQVV`tBi$_I%wmou3B63JGXE@CU(A z6Q=b)vLo>4Q1%KV=;tK*NR3=JqwpR1nG!%`Pp*ettOB!3cPrdcMM?H9|D?+!;hlCbB1A zW0~)8+z8|BfCg#QD)Z~B_=*EB&gV7%%L>+57xGW_=m44^N6H3@JO{m?s_Mf)?K!>_ z&xgD}vux`w^IGb{Q|l6PBrn5=)yp8&fcOQ9ZfB2m{t=s7vpSs1A}@#iC|$q>fYw;) z{=+!hvaP26WOjI5Sz#(XpVPxFM-}BTBrZX^ts%iJP+knn?<=t$a7b3xIiOS$0@iof z!B6?mCcqF*JkL;snOs=oUl zpR~_m=^=f#cKwnYC--d~KwWklNIYW_k@!aaeXqAFu>qdX!p-e%yb%oQ`j#y|rPaNu zTczQLJ|C9=6;!l-t#L&ujxI9 z@ym+PHVp8i&Kz_65duwL+Ojzd{ zg0&|(vf$&L$V{75-k*7%suhf{C}lgCFkiGL#ne8=eoG0iJ~L8z1SDWKXZ`Ayx%Q)X zeogLKb&!wxG6T<{*=icYRZ&c)Om*Ph_dHV=MC`W zQ^|I)`pdlOJYL4>oKyqM-U%9`qNapa@!OHku!GzXX}ZHP-hX-U! ziGM1_5Tv>~>)K*NEypj-d{yZ>iv_8InAx)uQ@y(ykVO3fmLj=yKm9Ny%}=uSvgAE| z8_-d*unzWJb&6WWfi_$CEH&nCUQ+o}uf`_7n19<;=>qzu9vR#577V$M6Mc(y`dr;_ zCy^}xDzm%sRU+2r9!{E!n+jEeBI=;Q+xW6Ul2F_BF!pG{IE13R(UWjFW(a;H;BgLE z=5!x9{mdz`Snw5Xv!9+j4sxGe5W_n^B@>Oojs>ePlJFJ(gv%HeJ9IR9>6_%kuW7%w zBlI$U;&f9GO}7>)CvuT^#A9RAr1w?Lme^xR&WAKd{f^*cRLn}P4hd;&}~Np#n@ zhm(#9+HSYp={&-cPT~CmrdY!w3P0{ib&Ll|es~UjLlngb$S8{{< z9G^IuCwdcGHl5qN$X#(z@%u!#ZdVPMyG=b<`?;6a>A~n4UDpPag9o<@-M*c6Zk5ZVKZ^Dw)byph@e+@dAgT>5eDEtt+av$vH^f6<)QSUbVo+J+( z7z#3lB0Md}Q}(Y0yH0&m?$WT>&#+gp8@wXc=JyQL{=bVbJGtwUko?p7H0jJjg$gD= z*nCC-RC6V~7x^5@WoY-#NG9$=frs7Nn4JfKkqF$x*YweScX-MUH0H*W!~3hpTx9mZ z!)YUk8aMBPneBmjVDU}ioY4D4XatSP(H2HLH$EhBU}F~kjm$}1e{n!Ahnl6c!JT8( zEhywu1&pYRP+uHt5g*qAxW@+i27b^8xehWI3fGYQTL~&1GMYeLg1s~* zUuy7N?~oV#g}=HSLEWBmnKgr#fZwgVD7C6;?uk#U*fk(Ip6`fk4G$_?nKu#35Te-= zF@aCE1h+55fJHv=P&Ko4|D&2#lVh`EoA3iMNx<8IL{?q@aOV*cr0! z?221x%_`_%cXOc+Sx4q?rznIA&+#AmPk3(RsCrMjIlO+kKb2$!2SBXf7-ai7Um&E| z)0?G|behfYb5P}n**?+aDN#{}adUcaAMb$#lBt7Y|9s}aiR^W8T<5|6N6wQSwkl(Z ze`(l_j}Yv1oZh~B9Mi}P@Vu+rljoX@T7*@!=31s&-p)Sp3|nA?|p0&{!~vU@4M9V6m1HR9qUP?l){{2PkD@Y&d^KhTAQZIviBlq?dyXsU~fTWr{{anp_f}6R~J$!ItH}?nY zr~-n6J?rucmNb<9;n>;r`S-}yeoNky@sZIiiw$sfp2+xNJFa+$gj6~7W<^J#FxVS- zJ=d4A@AWHq?qAUY9Dh=Mdig=*Ne|_S=9L!vKD8QGB!e8kz&sMs!0^mQul~`yzq^m) zB{P}L;l%@i*S_yuWkdYAFYjOH9scqBsq^lm<(G;TnM@1Ca@oO=Fn(A8?+ie8xtMAy|k4%8h*g&-s??ONtSL&M#vXuSxYC_ zn0YG>l|um*L~%$To-8Bq1rMB*F&e~LhwN$W;`YmrEEso6AL>ThmqcI=&c4qR?eA$6NqBPe= z;Ea($Zy`VpIfIO+7E*x?Qw&GSVmed#{TmT$@5?#%_G1B+H%==(7%|u`pzV>dZ_l>t ztcA9Sm6U|%pDGLUhdeJ#F#^ESND#)d;ieF+M{mTV-`4G zLnv$j6&&hzGeSRE|H2Dvs(zS8`hDR^S8`D2i15clkA;|fTJ zSu6Tglmzvzge3H_jbfo%Q_NGfNVH=aO;(250LR^#qL9N7c}Lk*ZK0c?hxKkf)OT>I zrw*_&MADL0d7sh%-TschT9HyA@Y%5NN_8%eYf>XqHwqUTx!G}8x9$5?Y?DE)PBKg#4~p0Nar}ysT-LBU zd)Gbf$J5+FY=Yy&)=sQm``LDCV|duzqcQ|UHc&~+LWyJ~+nVd!u_$vE@j9}$y$=Z` zK~x+<8RyQvFoIdpM|W@!rvStJP0G_d;TEQ)A3o1ja~K5=pXZ zfQ!`rD99~?G6bgL2e^JiPpO@d=Hq&)e&l;{qt;JDxnkB6Qcj!G*G$A0F=&#z)8^ku9^5?5WO`a!gJ7A5d=~BO~fc*?f-^%UYR)g)n2$mW5 zI5Pqq-#3k&Gxz7A=uo}gK_R|3F{Ki3W@Ufw;=Li4H6-Jqim|#HZ#ZBq zhHp4nSZtHy^vVx>8lhV#fm@E7*D!*o0Pcw0HigBvHG&31(IR`qM zR(1Uh2Jz1u>t!8|f%X;&wvR06T#nH;TRixI$F%qiaMFug;JbCS4pkx^XflR^q3s&$ zEdqQ)4cM>(hV=>Q+VqjyKGWyxcV)(f$=oe*YBOrhK8_2ZPa8Z-r-Z}V+=m|P6fPXv z@Umz=;FNz>#RyJF&w|`y60;aJFM*OZJ%y97WJjv7faIt0f^mLJjXUmjmabK~D<-Y8 zs>hlhnuA6zV`DlUl*aon^s5TBc*@tm2!K%Cwyf|~l&5oQ#2BY2FZss0v9U9p1r)H!8HKUD}JSZ-C06;teQ~)w;)co~Ag z;kRo#0L3Url5$1aa|5|oau)V|S`+}W5=f<>1 za>4j%%O=oR{>sRP$=8#OO)=ozr57OP@HG2+v7P+)98c#b6}~AidPO<+e%cdDX$z#p zCrU<>PygQT>Gm4=35g z2(UFwMHULHkiM>4WaL*v|GXzDOngwr!=9`37Mdqsm(Q`WuK190MQMB>EU>1QJfYU; zzh>SrqMW;0@BTUfoQY^;Z+9WX>u%gyTT#V2hNK!$Ud zkw{{SR^UC&`-sMXuYpADU;3dq7gd4<;w1~|{VwHH#7_N-5fdQskV@Fd-Sx479onzf zOcD3Y_#-mx?7+9N`W+)juM64U&a)ZKX)uq!2c?VKI1`rPge5z2eG2jPQqo6GhN%%C zDj91Z0C9vJPAE{1RKyys@(0|$DVeE}jOgcVBW<6U?FI)jWftm+>?Jn;n)*>SD!Mz( zh@d=hKXL2$uUqGW37cNW{-a&|odl7A5oCJ#T-eU)nx=m{p6~kVve}m0#rN-yA-x{+ z%-^Ule`@|txr}A>TR=m>QDxUk{yvjNyGFm_C+;d^>~fV(@_8(ynwPqUIo&UxwtOV8 zFRmEl_UABfgLtixiF8V1S{ROb7y}n?GcOXDHhd%z+1eYoYR2SHM5r^ z`tv{68=>MM$oKeo8?!S8wXsD@`h1nYHMlAAr>3s|DtTOAvYb*VoKm=yQvNi>*U9Be z{f=#6Ko+}PgPpuflkd|UPhoI4abk%-sPu@?c=&$0?enjMs3+r$rM;D zly-Wp8#@(AsV=oF%dj?&d|oH+ z-m@GwLJ6L{te!#%2E6s?D-<>?g{6Aopc;*&kvQ5(JaNN5Ydynhx1=A%f5r~CwzE$l zYKrPZ*1hcwNGmNb%3J(yv{d*f`Yn}Q7rxzx90eaPAo%YY0XfzF;5nzIq+7O~C;fDfSgviFzyv{KT)oxF=egxshwoK;HlY7e`cR}7l5N|C zpeaphMK#yCZkWDiGtCput9{nwd9z<%VNQcFXvk~$BH7qR=mMV<-w#t66rUlY8E$tA z(3}Tk;c6ZUNfx2bIRcLhU2VLCCG?SLf^SSOb|R?J9`{shxBub{HablO)CmEtTl0@- z7F``55e!ocz_k{BS0EM=fL~-my<3mv;uVAH{#ZQ8Yw*GaGx5A1whu8oyq!{WAsHt7 zW8DljVr0Mbiqv_5$mGd70DY@6$@Xp6wecsK;}f$8fq}`^UgA;~QJZgoN%PUT?@@q| zxTJd4*8aAy>k$7HIt*Zl!>}$^xGzm^cMlG%P_zxZjyGp+Lwd_uk1D_}_Oksn-Vm#8 z`TL0`EqAjFyHYws{&k1QKWJ&V4cAXR}fQ+5xH6R;2X4(KTR%N@MgUcPSCNtrr6M=zD zC1Jp@*LkH5Q0^}?ITd7{d?|;d?MxOor2d{koGAYDrog=#= zNfK@J7#Dkm823EtP+n#@6Chrg_xX=Xgi(LIjrruz%j)n6S)Xp?CVaz;Rg2I834mq7 zUL&HQ!V?60Ym{BzWoRoRBKZ5R6yXph$6%RVhx)IaK^y?}T=QOcmDLuB+2c$_gk-76 z1f1{pTeXbXhxVQEZwbkFRTs}rXM~a`1#`T)Z64Pbk9sL=q zm4^8_w1mu&T?yLWx7_@AtU!+tLvR#?phN(+}!x7&0JNwlTm7m;|D z+h<{N0-l6kN7Fvr-1Hf`SAj1NDqn-xI37&|yJ{-Y3PPi&2kwBa#IXdNWCX z?eElo9$sj_eqJ<)jV1;O$U+=VNT`L@&ZVN+EFMB+hfWo-#M}1y$MNeAvlw{TGLPi| z8XQ!}NYs`l8$|Zvq1Z+^ycWf$ydt8{ZRlhII2&|csw$cjtCXeH0y>&7$Zx5*S8(9W zpDu2yE_A}!Der?giM?R3LN$ke#mV}IBRxMilvVN?DQ9lIQoLVrJDf!3BlXg ibi*qn-(#@@{Y;qu!}KMWkxm={zAj$)&$!wUL-;>oHH~=y diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/special-skin/hitcircleoverlay-1@2x.png b/osu.Game.Rulesets.Osu.Tests/Resources/special-skin/hitcircleoverlay-1@2x.png index 3b5e886933d2f7a8803a44304c5439058ef86fa2..e611add3ba9861baf68614ec51d63d3f94c8592a 100755 GIT binary patch literal 119975 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

wSIutbvWi6D`m2u|!^@bLCI5us_1F3$vl-qM^r3 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≪}_ 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 E0Oy=DQvd(} literal 40858 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�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 U^GtX>4gf!RCwC#opET>M-<0j)>w_GlupaE zQdA~lAy}x?Kb);qief>Tio%>y85B1MMFn+;e-wn4iCWkYhE~K;Tv@diJE>EKHPvca zHDYSh5db zjM@LdW5GVBo-aEjj#cOe{8^>_9`zyW-9figw}yN!BrqBam}foI8>u%0|NK)VUQ17MwEp_u)0SWA_zYSk0`vKNWN>hh+`oUH)YsRO?c29Ulj?)i_fk)eOCKgtn&0myLqkIW z_}bc9vSrJbXh!!!VSvLU|LoZ_a_7z+Qc+PsX3m@$3HVRcrwIkD813_csCRU9kmJXX z6SLW@7y57N1;PP`8XfgXXJ;olapDA-KYzYn@G|O2LINv>5pQpACr6GPAx5K75444P zy0E}XA9uN2q^YTi6c-okf$pcCCoHgHUayxp91e2w=(y;pc(#hyQZ9_ZIAR;C&Y<=sIbDl{);&l`C3{ zkDby0E2H=M^XIin&>U%i(fa!O$gyL`w02LDr2)qJ8y6kBckkvw?~?`?ZDeGGSglsF zeED)-YJV&Zuu_;{3Cf9by;Q(Te?D~R5D)rOsep0!1ecZh`T4v7EQtjy+zEiBq$J45 z$bgcP64qC+A8(ZE$iu{m6Co!jhX=h+x-%YAr%r{98<~O3Wc6iXfya#-2ejmb($dn1 zqAc_&p2?FZLt!EF@f0o}mq`VT1K6B7b724e{j9HSmI@ec%9JU*DC54iNh)BB^4z&| zp}4qMt$9-T;3dULJdE~SF&`#6bcqDT&UKB`_>;zdC7y* zkL3i$s*7P6QUaSyCT49SB`_`~ScAB<7q!f0^VkArEEVMio<4oL>eM7HFz$k=jc3vV zvj#3{f$?h6m;!dY-D)2XOAFlF+pG5Rh_t}n-Q8**JGnR0L|-+jSf!K^W(`;vVJU$< z9uKRjM@nF))5&VGO9_lOVaH5_aSX=0&uVip^?OFyfW2NXoI7_;t*ISPF-jLd@8I^`A_qm>)_PVY}U~28-4p z-SQCCC>k3ZSe(1O}uxL-S@US3|hq84=j z@BTwh=%PZ%D*)krm$6Vl`;B^w+Hy)rL&XTZm&l3kvhZc2&=G$6^eLP=b&A#85{xiN z5n+_LI(_;yFS>|!> zv6w*7k%I>h>PcaodPYsI^}Pb4a1iQO*45SV#DhW|pK6cln*`nqup-Nf>)2hpcIlN| z{u$oEn*-h{umXy5Q03+2#9%P!0rkW(?ZgFGkxs|ax2&v;m`o-9RCLv5(>+ z-D0tjJ$v>5_HeJ99AZ~o4Byv$vQ7rFn!Knt-MUo*7rT`o9)C-<(qUi|^hXXo0 zJAneiwQJW#<2@~C_)@BJ>OTh0Tg2Vo#hZAr{;iKk>T0I+D1+j5Dax2lg9Nj;DIMeQ z!6UhNhOsetc;sH9Z|X-1jIR)C4S{S-lztfvF#f|spJV(5Z{CR44sVX$;?GXe55fE+ ZzyR4Xd;=*Q?iv69002ovPDHLkV1gL3>M{TT literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-roll-middle.png b/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-roll-middle.png new file mode 100644 index 0000000000000000000000000000000000000000..03ebd1904875ab54fa71cbe948304fbb6266d69a GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^j6ht&!3HE(th_Z1NJ*BsMwA5Sr)zI%U~#c*aSiV>bgcqrenRo!(7sQ*l5b=5lS zHz>XqA5MduI3AJ3)o!d^br=$OWl&|sX@~VZ$$kjMf^*+5^|JIp^;7XGD@8l4m+Fq5 zbR@7C?o*Zte`1aIhsJvoa%oiq#8D}Ki%3xN-Ksnged2uiUDl?~c^n4)<4I1OL@J{s zVbM5~>zhOgK)+qf;w)+W21PgsudT$_W{dvh%J^~W25rSR8(jc< z_fL>Vf#GBu5+M8?a)ADqw~O-tr|7*i>Is87{CTFawH0p@a7Nez!b2*^x0zygxz-zJ zkY>w@5g3#`3)hxc7oS!>lk?q4A2}BKF4OE+l=$q;=o6RE{<#@Y^c6ReN2_0|6weK| z2uIAnbU>U^b5ZVub3{6?%JM{p_E&w1R}>YSKGQiTyB-Xk=tfFQe;f9 zT7frr1ow~=e}5}V$xMU*Y4I@*Evnes())7`go78n7;RKpIx`kD`E%XMaa-?OQZ-28 zi5A$#5ZvHTSuXzTXl?s@$h+&#_xArktA)i(04d2$ziJv9de^lR6uwRAw+mf3DxL5i zZ%jZ&vDSxmHFDjcMMePT4CJ&RQMrwF1c;wW1GqPo!cSZ^A(b-S3e=k6n)X>l7c;buJdiW4TJFtS@WP;S0XgZL zRZr~^B;3JzAm@^5`N8^|J9S$Eo}Uy8Bag4E`!ifO*#yn~@NB|Sx?P45|HI~V?QC?g z4jFo_Dw>(fI(BuPb+*GvzfZv!*mM-wnSs#~9FzwephKn{u!ofyos z#4hRx06epEi_y1?Qq$3HdB0QwjO&@~ShGCE8=pRb&BawoU$ZzWCoUoOIx7L1t28)d z`yS1UG#((0hLy3j40^L2$5CnL#>$kX73~K-M7th}=wN8AyWKeS(#q%ETnn=#%<90t ze7vB1Kb>x9o>VALdA9*Ak}r2xz8Rw57nC4M3H<_h<7Ki1Fz`+PZbuO%l5Br0a(oSA zg;^8KgM`6aeM%%kx-bcr>ZGgP7Qr&44d-K|2JBpyh%9M!COO<|4q{>(ULo9=0@1|` z{mdIm##t*?42H{S5)ek>iXW($sYURj-j(3}Ao(XED3+A5XEmxS;3@V8-Lioga8`Zm zKGNssuY$f>>S4+Fubmb-0Ub}(`9&iCk5&1fTkn{v_16n9O~0IyKJrn1yh6BoSU@*>AiDNP`V(J;9{Ld+x^0JNiTBTS>lAaos86NG z4tj6a1y0egJwb*di9UsPQkh zVUV*XtU<4yq=oM3s=AeRG6WkrM2iyo(WeWwm?<>=Qy7 zPz!0(bK?q3h@tu4v->WnEttwXV40o7A14u+VB^TJY0coQo|V0F9X(&cElEqk8XNmG iXXL~5fUGV&%!C*_ol6Q};|lnZLeiKIqOXgS)&B#53)X=E literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taiko-drum-outer.png b/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taiko-drum-outer.png new file mode 100644 index 0000000000000000000000000000000000000000..87ead80a08146adfa553d242f315f764a467506e GIT binary patch literal 3749 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 DZJ4!X literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taiko-roll-end.png b/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taiko-roll-end.png new file mode 100644 index 0000000000000000000000000000000000000000..778c231f20ca9253e64ccffb64a0aa39a3b97a76 GIT binary patch literal 14570 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 PK2D*pzfZY$bjE)HM$sIi literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikobigcircle@2x.png b/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikobigcircle.png similarity index 100% rename from osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikobigcircle@2x.png rename to osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikobigcircle.png diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikobigcircleoverlay.png b/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikobigcircleoverlay.png new file mode 100644 index 0000000000000000000000000000000000000000..6dca33317131cd69ef449c0a6c0122f0f39cd84c GIT binary patch literal 66280 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 e__0p9W$exLq4HUNEC{AIAxiS~PfR=%CLeS{yi$ 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 Qd;A||`ImC#G8P~IA7%MrKL7v# literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikohitcircleoverlay.png b/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikohitcircleoverlay.png new file mode 100644 index 0000000000000000000000000000000000000000..2626c394dcdccdb7d74da5460ec3f6d6570ad9a5 GIT binary patch literal 66281 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 z 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�kcUrvy?Ky7PM-eKS~7g% zMZ{nq=f2hV<$STXxd2OiWuV{{U*bik_p^Xa}f9wA6HU(wxic6&)=Fc-`bhOnAf=BwwiSpp%a4Ij0 zD`y_+;4IX&3KFZd&ms64Q{R67rur{tU0q$x)?GeK=Rs5lm#Y;Oy7%(xV8ohrU&3`vXq%7zVCBfiKfTa~N7?k5 z3WSR_#zY>2I;N!f&l14cbm-GMJ9z%cu2R|L5TSKM9JNei`Y3VNzrFE_vE}Vv;6b}7 z&?t3fPU0XHUUjUyAugXw#7rCEp%SWF7v@;>pOyc&V0-Hbmk-7gcjaUNR(1LUr9{^B z;lJ;)aoNz%i`c5Iw^CVYr?+EerN{AKW3;)k`vTbNPJ5Je_VC(;O=6QGqk-@>AX7Bi zH}X&L_~hh26j7RhWsjnfv&z)}#{%SZy}I{lKuRH7sP&rM$e|l2T=j=aXZ+ol z{+AQuA2LW6+|{4z!gAsBMwB2Rw83?a0;E)UxDr26zZ1-%yftJwb_K$bKUka@Wfo$_ zZI5cn_KK)G{MssYO5MekN3VKJU8>TDPez4Yq?*6jeI9OYmHe*_71DV(mopeQfou0T zxT>dqqZmKEUSvOTe`witVIV86ov=da^aqhx#ora5gI59l7Gj}-%B^@8e~~Oxsj(n8 zZ>p5X9;|YX_L(dJD0L{W>W3b`g*SX@eOaPXpu>Iq=VgC$y?b?kCIh(MkiO=qN$1~M zHJy%K`QzMZaCgwES~j&e4h|Ivi49t5nwqVUHVFLrZly`*(LggIP;$Gk1=aiE>%@z6 zXNo+A!$16)g*o68{c1m{7mkvUeXshyw}^B95uz1(5Nmtz#u)OtE;gV&zS(of6a>!7 z!qIid9MI3a&wN{r+$XaJe}hz{+p)bN|GbtVydLam?IN}@p(CAA3u)EF5K*;r?CL{a ztemp$By);I-ngTgz*N`Bh@j8>!h=UQWssrtL0Uy=)0dK_#@vf%1jhhbn=m(O!Js*;LpC_BUF!Dr9!_jB#(=Wfcxe-fje6Gj}=x@ zQV~m>DAXzjDVyX;DYQvg^LA=`%`~)jAe&l9L1nv|x2-N$KiLI-0Z1WwyiIXwyf(fN z(`5b?a=`Z0TZMI~(=z-=HT$vC9wzv@wq2`pU6|KSDU<^$fnSNIzAcBRsRD*80kVvF`3GDj^|X zG!|r0d`C5>b0AZa`GzDw)W@t@qflWZu_KIU-*@5b$F;aSBl8APd=%i4Ot^va<~f&BwJ+|{!wU{wm%1} zcIjL3U>LHwx|Ti%2l_(y+Anu@)v5bzrLqVPrpwa0U5a=~n@d#C>rE|d1dzw`eBi68 z6+FOZ{5Rt}$Y_m?1P<6jvcIiAOZI*Okhjf4D>K%Nv(f8h18V{j_@Z5LKV+~~@LIj~ zlZ*AE3;kM*_LY$_dh^Gekm}rqTb1Ya*7R@lha1+Ic~<2=I@BGuwW;3kn{h`?!k{If zvKn+!3oy0QZOVf}8l_>NH96Kts}(gLBo1RZ%sZ6Q1;c-nvJ0Y`3`RzLWBZ*#oP>XM z1rC01O@e+Bi@Aj-VX7E>rw9rrpOW`5+F*Ko(X`KAe(o62VV_`;(Q3f!Gd69{ADL7) z(p$=XH4arzEfAVH)y;HIi|*;PY~5k--a(*d8LSfE5i<|SjtSR2nyqW~_xuAVC*I&I zLW~La2s+XLr>R%5Q%^%C`)C9nTcGl0x>ngjJgF(^alD=5_BW1(BupL@73abt^D`JWEVs^CxXqU~z+?Z{BouiRm>IwRws zwx1_)EU@5@?*i)H#1bY@3*bAe#E=Szd<_hlBtQOt3A7W}AE*=g){S#k-n@h$)s z9NBB1)qYNX%hl4=vq`L}6539&82NE9FkE$5N(_pokTWhK9Id=3rpqQZGS=v+f;tjZ zIw|pLX5BBT6q)mz$RRTL>;wZJ(4^?6<_*)klS@Y|Xzt<2BWMR(dXaHlqa(=-u_hPP z+LzCjGo-J(e<{)^7;SSPTu89V#mZ$Axu zjn{%VLObx%(g?!oIZm9Q`Hj-AX68YtNdyvB-s7nZuMuQXeObiW|An{2DAjVls?5Oe z$3(6jUOGSh!$D1vXJZ}(rEwE8{84kJUGnaf0``5faA-s>4CB%4cr`Bx6#yPqW^}D{ z-D=JEN-nuF8)M2Kte}HjW(7totRaca$WcichJ*!n%B2gbTy0VfTIMJguWU+|U?jvc zgk?BoWX25jAg`33%78^P@R}o#*9eK0J`Gu9@XprPO(jsyJnqlkdZj1solVp6rT&_l zw=e8oDC`mdsfezvhQw%%W*J5S%IUp?Y1ZXE@z{SNUjCom2_1UPy`X=Ex4+PQN)Fxy z*N93F1Kai>GJ>N+JGA)PxOo6xVkUqI7L2w3V_SP}fcOL;Bh5YL3TvVVXf14dlt=Z-weL_r%zR#`#>DZ1^sY>1Aq)1Q zxav!%>giCM#8V4hm7iA4vB{bd-(d5OM6!r)E+1xjuLJ-Rv}r;*#1!&rL-_Gxw0PaUs!DEe4f>@-zY z-+iDaAGxWFs)T(phLTj3dQwT)oc>y z%^0N=)CoSFzv9Sm81(!MF*lBblrfu=F~7MDxty5odv&|;o50nC@5vkDJpEU6^m-!N zd+ano8lCccv^7C5NencGq`4eUgBOQGf`Ss+MA)i|LOkXO^^`C=CzMI*+8yd#3@;t$ z(OJ4706gNcj7wMLAFR4&kJH!E(vyq8rFUu48`P^wOvQzi=4?A3g=7fFC>tLp#u&+^ z5tnQgz&o7U{hx=+(mhEY$Q6>l`S#7JB``<3_h-MrRj+R>!(K17%uT55E8qjrLg-aZ z?(exp1a~&1G(mhj@fWT0-_D=`WlkRQznw%-q-cJ2(9O1(-3(&_!0BE}^7Fae;x?J# zT3TGxc%Qc6!4{n!Obz9vvvs%vs5s(g;)*|gFw^$OpY(oSkuJ(NQ3XTT5Ue zFbyT1O5U7LtN!QtincO8^g+sdxw$&6vjXGSx7PcAjjH}UT@}ALd^)T+*fGXPLfF5( z-Cq90#2RjXr*$zDs59~Ak%L3`u7FgB`>JEx%WyO~sbyWwgwgx8yNm}ckUzTY*s4SK z0(?wtX{n0fBp$wTconZ`9O>kNtxlIa(vuP*gpSFW?6xHTYfy7yl$nza{G4$fB5W+! z`|&hBa3>rUCSwBh$iO_Az2>LQJvmEQl^FJ00JQRF@?A^|~`sij` zO2oi(J-gEH2gtY;8GqU47myC0)>JL6Mw`^8CT_NLT>CKKB$DLS7LVMc3OAATck4R8 z8OH{Fu5TU_A?t2Xpg+X!fn#=gJgcSr{rdYTcjOQuITDg~j@Kgdm($4rCellb2l}

K|+9eY-b4mkWi1>ASwldbc$7t{wT4`ylEJNblgKR5) z10rJT9*D+~_qi;I4%MQFLMnLhEOd*(`}QLrIud3K0}QG9$Rx(2zsfCUBJqsdprViT zPG8vWq+s|xsB??qW1zx_HXK2K&jsT`7osMXV)5R80cHe7qJm=Ts7?IxF4}iSQ#9pt zwLj+9^Kus0;w^3434$#Il_b_=O+q=?5t|tLm95!a6)%%nxdggYgn6nCfA|1L(vb=d zi^Mm20Q``x3Hns}*gAyJNu3N$B15J~CfC{F%G{yaisqqK&p80HDLLGBQ~qy-k)QTmm*GlBL_5^q8xQovjr6$ z*?KD$Ww;1t>pmxkwv>O}{q8@@4NzfZSr#ni8HKz;9s&j7$+tpPIyvjTEAP0<*AmKX zLmDRM(F1<|L5ybdx~XySKX89y2(1ENtVsnoPZ~MaCo`ggScbb%IG~Z{ng4qL#tFnl zirG9iyWQdqO<)X9ayl>;3*tc!l&31lyB9CGn-~gjxL`zT28m#XHl?&F3U3gS+QQ6Q zqm?c^hK&RIluL~aX>u~k-mS5R^k0gA$d`c2JhWSty0SAXtmI+kM?874&Elz#u7Jz~ zd`m9UxRs6t)P|swotM7n0^+`V0h@oPzYg%JmOebzEXIYbdTH2j3Js^$>~FeovZ6#o zI@BKoCjb$$$(=&bpG)K+Yl2KVPrj4LHwB=j85$OU;ZOC4>8Cc`{WZHY4}BCdtz=0* zaLEFB)kHmDf6IZ_fE@Pun58_COpY5y&EJL33F(*p&TOt6H2EDZ>{Y#_N5*zbo-DZY zf#c0%(#pXxT~u;a-RE;UF#w=>L~0gu`j+xjNkoQ)A!JDpdfCVtoUFr)1{~*mRKg+n z2|+Sum*j19r=@*F-FhpO?~-Ok+*Wzukv`CPf^j^lP{Y{LIt?wIjpUNnqv15X;W0K6EqLrC!FRdW)|u<<{3P)aBi%owieq|`f$dol@_2y32fWf z3=7U3OGjqyOc5@I&)y^;o&)PTg!8kDdex-J7XSug2DDkw%0QWWz*HieXZ#Vq0S6>( zLJwgE8hA;`mlE#JwW$M_jgJEj3BDwug{$X=ZUT2+I*5dTHodvbu-NqUmR$)fms(!0 z1zK^mY=)c$n($&4s5>xQH%<4|mA(#+`|}Z_9VpNP4A8ewz#3zNrQmOX)waFHkX*9e z?N+_R1%G6HLFT9lkQ*6ZE@6DlqheG9Qi8wG%J*QA=odHqNF&I2DiG6{y|{Q}L?`!) za%SQBuw^``jxLCw127}2nb2XwEAfPkPQ2uRQDs5c|D<04 zZ*G|hot+ap-8RQ8E7g9szFvtw!!}lNOL#)s^7Rwi_AV9TFZczGwHQSmdVF%M@O-kx z>fD=WFRm|JJV!o!C9DwWM!h_G`+%sJR7g4`t236cndd^N z*P!;==wLkM2Q`(`6KFsueuCzNilqGClE71yoIfhvSnIYOiWbAlZ^F&+%|NdZ!U|-- z%C*$07O_16&-Gc)`KmYIbi)moM_V{3FCC8yn~}w!^r;1O4E=PNFKhn=x+K4W94$x- z#Dt^hxC5lz1oSOO6uS@s#A+R>Pyo${2U^WH=5M<>7^8ra^V8N$ARq4!_8$;qVvRAW zIkTtUJ9EzZ4r4Z2Z_@(6fbUfMgFI!q@f8r#hzh{)AY4i3gZbIn&`o5cpE`LW7XA0h zcN`FN5QBRy!T~IhHr0aITfNrnDo=1TG-wkUqcoT<%p^3KzlLezF8bAgv02PWZTfdB z<;Rxz7@k*JweI|mHfICW10?pe`?1j5svU$*h;Nb|Z*R%%yGL%L?g9usM(|^;UsN$9 zF>CIUP*Uar26v)v6p?X$a!NujUW7{lXHyFOL%kRS50)LMM!fBJATma8y z4fbw(u0w+kDnCrsbtHgP5_I4%J<+3R@koMM?YS43* zlIY=vGac$*$P2JWw6~CaN;dgx@JdUK^^jqsUT5_iqe2aCM=g%Lu(bK^KRIkkor9p>j1+%837QtV%_z@1{8S= z4QSg9s%Hz&1RS>^a2aYe0X1K!TOExe`Rx{2W;8AOYiBPclsxKPY!6XfQG>DcDs$2iDT4aC| zORbxk%NaF1&GG07?DGR`zr*a0P&gQZBH zFyr#!*Fj72rq-Vv4xk{JSvG@~rAV)^fltj|5}nJLV8K--QMwXS5~_+?|GNwWAxu*i zD5@CZ&RC+KOR*u)PAep|(~?D5Tn&Hx4w}$Hi-n&g*&=d{@eBw~uBvhn_b}wA3O*!- zBJ%~v_>f;@Bx%%#x2YiE8h>sjiYg{{gTQdz)Nz*3W!&tJD|VOwflBwcJnksmzy}R0 zsJ2e#7oI#LYwPe^K&1T&$KFb90j?zJtEMJ)V4-PFv%lZt!_+}bY(lPI5QxkA)imn; zfwl3Kiqo4bAL`2QuB^(zqH2|qBHycM%W)Hrpdu##D-0FlFW@^%_FrBF|4#UY;8REw zhob2_ZnU8L+cr)TTJIpxMjRx8Yx}Q6$yF+o2O=i44q)0D4umYoq-kXo*rbZpVQg@E z_LCuCV;TGn*2u5Z_6dbtxnF8ulAt5m07kGPzu9~w1ZG)N?dr%VV8oOqO@>4~e>_%@ zbDv2!6Rc*Qfk%98DM9 z0BW4$FMqb`?e}##1fj10Ik*D!ZT;PjSXV&N&Rq9Sc9C+hkg_^`kCmXOA-OS^#YU4O zlY)l5?!=k|prOyEg`5#Mh=TT{S}?GNHfG*T>gDm;GTg^%ChOGpGM-=S5X12rS>>bi zHxm-1B6zQVw_8Jl+e|Kxk{~Wu;ySeqgjN^4jN|n=1^7rh;*BIYB#5cR&Q|35ng{cq zl~^06wVlC1+|SZZPdq<^B4t*=R%s3&XfB?B_R=9^kuDNGD5uisW+;-XvWYVf9{JL5 zigPp&W}LhH)@DR1XHEll-RqbwU|5f{Q%oWAI-?>%AqnzjsUfj(=_my?pRiqK0R55| z^XA`sBrsaI@kpE@+UFU7JG$+{bYJ!5tJRcu!${`W+*-j2g09a)lOx(an-gd=hi5V5ry1J=KNzkmL z+q$XS&jEe<1ms(QZky)1X}g5V$-$a2(ow0e;GtpvhQ4Wwi5!!{E<(MyFM zgiga<~(2fT%8OA@l9{v{$3XtmgT9cTdf-Ua7u2{3_=#mm`-BdR3)Yf!-XUP}h zbsuNzTL1Y6u6kc9a%mZ!;Mo%!R~wm0<=j^@wf4`dHDX0nBKA58d&-_5=0W;s#LbFn z@2E>g@29&^$5>l&*CH6WQh^g}38D)8Vv zvW)F94fm>+)%fMq@Pxkubw@_~ioiJ@O%bv6H`K5CG%a4O-Fj*A=BDc}?(DCLI4X2q zaO5t;;io%g$6#wDhES%C95TuZ#qW}-Za>f+4;T{oCWrDgI|EZamDd7`Ln_S$4=q*H_sGJ+Ft9bi3{*%IQ& z@3gyv2NsvPDCKE0W<0pAyf`}$E32CtAtFeBAcn#XT0xyH=2TL$*UG;Me0ZnPuzBpG zi-7X~1!gp?nP&O!%&JKY8_v|VrfQ~Y_Twz@dl9S~sFj9kq?+lUW)A!w)N!PYC_2Fx zUiDv2DUxjQq?nI%1Ybklw^O8|ZQTK1J#(V|#t+p8LQD)^^Fd`{CCQqMvvt~W4jkLs zrBjQGBK+`<-y_VV%+Ih@G?PbbsTTannxKT0K_5-iU6Ov+ZWq6Kx^#<;@Ecz1bCCI zl$g&azC{S>Akbi7JvX+^`q9`YeV$iHJHAvKqBcoS6((Op^bM40a4x!q#+~2Tx?h2A z(JMg42#3|JSU)Q^;HuS3ZDpY@7F4`<_b%v6GV_9erqq6m4$WvzjDFot!8Jy{Drwpz z;@ro}IwFi-rLLYP1Ft%UBz6e#l!D};iTDEd&|msOy4Y#0_k3>MnDUy$Q2ynkqKK$` z3XS)84%lMeJ2IkCE_dP>6apSls>xO2n!<2RjEj_(+aA7m!%awJ0(Xf5SFyxPPB$Oh zv6??rxKfnZ(#mms!N|GSsfLC}`0FL0gzIa*)O6LNsj^9a*1L|k=^!k?7s{W+`4VUg zklPnS>*K5ViToJcru4jmoBAKf2zEz^EBVENL1 znY?875FgG8yGwI~a7zn&Y-!^?7-_TT(+E74(VhQY;sf-8`r9{ZU`B@>r(PL>MfWf% zXLcYAdAuMAN2j|p?yZduvta9qnt!jfotGjo4tV{@HJ8_pN?}AaN{@8bC3@}SaTRx^ z5k??O?W+;yz16Lf61-hjdX?JeqMz|)`^qY36M+9WBOqZPu7U#V=_5R4N>;TFKgyW9 zGCSILE_wxeKXH_CLpKkw9eb=5B)sZ zVbAj1N&Z%_1B)lI4&u7B3Z-gAk0`o~9d$ii6aby9U{ooco24aWq*addJ2ErUVgKSx~ZsD%(VE=EBJ5{ zb3UzvSv*wg;H697(Y{BKB+jE5RQXJ`f8HAyiSAp2E$!Y+1ls#8^2~0lfp>aE*=xfO zo~^2sU?g5||K<2ccyLBmea1BQpQ&#?CU!Xx0;s5_;kl~tclm>N1dheFP~&LA#htA7 z`dyg_NfxFg&3EwJXGickwfR6TEt6IwGgQ`puPW7Ur)M{{(1zqa3I5%q^Od~3JnZ$S zdUch8xa|O82+(n{dlS6j_SmL$T(6;A+}+-4gGiP;U&#Ff*z$=Qe;aw`7rtQ*!Uw~u zS_Tu}Q~^{$*7xjpoC9;)=~abG~k1fU{-ZiW1#4{afxhRcLFiEzRs_FHMH zFuv*~FEmf(#T|diNWO2@;}f_QFOV}_Ic;CQt!9T`{EF^W)?WWuQ$^U7$!hiSg8S3m zNfrQrb$vSY58M{rX_$9>bLevwi6d&9KE9Qhz!`;CJx$w%#b!p19@38kFn~hFP|2IJ z&KFE2#@2E~$K!7n*_o%7W*Kgr*r`+RbXL9i^b2grlTwTCe*2{d`YmYvF?{dRhb@)H z{-~T#&LBjy-?;f+dDALBnXTf8TPc?q<_TEYy`0aYlA*2To;*Tjuc=;KwPHJs12->B zj4BAt0X%R!r9S>%zPx-)rZi@LG7ZQC%L5koI*)hc#E3wXFsYbk`n5D`aXHrKp4FUi zN68(JIUX0MGh;)%uC>7*Y4*J6<%gUc6VyjJ9lFqDV<0>T39D|sy83M_;05Xf3y^hL zG|yibm!G9k9GqPEe_Zpv4gKv`SugT@)NR?@NKsy32B^xWOdqytXleLQTGUVKX~k@a z#dNbR6b5fhD51=yA>8@8{qf24Ep)D!HhG({dNzKcR0jw0G2w`@_(l85_8VqZYF?dZ z&pBQi7#SE#W%*BBR%=1_C8T$ce3CkicUfRvHV8$R`q?oNb~F*?z03`_%zC|TVVS(u zx56$4BGt(cwX{eY2gTX{5rP2#R8d|TL0kpgGokHt_uTr+rU`#&ZhTL(m0(s3{{Y&t z=`P8$*zEhfOc*+DI}&(YqrG}|{gGx=@d-YX>tCl$-o(K+@wEl;QxXvXi@cAXX$U*i z(Vh6wzG3d;U{|_|*DDZVJMPE^N=yyTZV%N+BVt0326}ZL-J9-QX?;COn__lBD1xM^ zzIh|hWuoh!2Xo$~^UC>EHRVFE&??SK13rO_=XGU5PaEgenn)2~_Q%`}$h9bFN+MCUKU z9L4&@Q{Tg@B*@ihYe+b)5!=emN}x(YKVc+as2?foUHF$5@;l`_(m=98(1u%Zb@j`b zzWd!SWGFNel1H9w!JxsT=TrXZt>j7WxT9(=r%EX8ISw)RCQ5*WbnzrD)qygP^D*wY z$!zkZx-^Vg9?wF<^x@r==?yOS6+u+i(U6Ml>=-XtI7H&ZTqvKPFmK^EU?zQ3oSO&l z=qzrh7%U#8dRkhdYKx48UfUrIg|$z(e-B-tc9bYY`mt{1jUa3$& zXE&1&_mBGL6)J(1$we7%c@&A0PCZQA|ak?xN(D|3=Q)pSQpMK#Vs2q@C6pws6CnG>y4mI z`de?b#%upBS_}17TNQyw)}LiA^Vu)ZYec#gi;SSxxMHgm+jcRa66~byz*#XAL>gA; zlxo>>*@1Ybp|p|x(Sy0zHD4{Q)Tj*E;7Yv#!Ip*&YoTv@`_%Jl3~l$ez}o4yI^YN2 z#y{j!itXrmbT!hhXX=)TZ9l%(HsK4sS$;c#IIkz`$+>xNs!k*)$x6K|`;$2$7qd0F z^Y!L!(1>;Dh;zh2wJWb>5++h$3c<-XeR5SZyG?#^wUB|EO6oXSX_dXPYkVgy3|&7W z3eO<5DAp<+Z`$*}nLBCqrmfX1PM#>VWU=h^sr|Ov!wRG}?T~gj;1Xtk^ZdWJlK8*B4m{QiqTt(-0m`n6dS6d+{aDQ`H zu*?MjBR*l5ODi`l*u7%06@;paQhswb(bW!ccAK2b1c0UGo;7PDQ|9vyPbd-3g3s1`b4MrWVP<4=Q-vvfL-7I z#jQKddtLbS%MX-};BpJoDhs8C^MM%QQK3#Rp>IhX@q#Ta-IlGgl2RO>VuKu-EsACh z6*PoE54O4>x=5RMv|8~tQjovYgn^Y&@8TbjbFtd@^l5cKg=brP`;B>JyXVF`6K#$Q z95JhdkYd*}3Ge+cj+92cb-AC#(s^)SbVnS% z?3=I;$={kR-St>JOIri09N}>A3$72T`1tuiAVD!NoEY)4?>eN@cxu}tM^WR@USKL~ zYkS)Yq!-Lr++hjCjLwKt-b>9Ju?AH-rkw+;Z-lT1zG-QBW-Oc57-bb=mTztkgK*zhPIG|{-$p7d1WM}=bX)ce6_pz_fYt>vGE!Nbba?Q zoLYbopGhSj-GO<-a-C<7o6WY~n6&DFBLu+Rp?+~!@|%|^)V1|^7J)CYL}W5^Z_AL3 zFoZ(`VMsw3VgXVTM_w&VM!krOqln%0*5$Dsq@avfyJ)@6*d?;-`|7Tx^;3(0MJ{74 zeXy{hL9}nBFJ6GjXaU6_gG^+VCmn5i+V8_4*Md*oXD+77`EzLvcg`~liImiwz<)cp zn_$uYAb*{DWQeC7f*f{@QM@nVe@@H5u!e|LR6=F>tUt9&wjkyr2u3P_z*Uf@-Dv}d znhhT;2eiLwb;CohA|_q2jz!foi{heAwX;PSPEe9KBxSq7q5wA}1AqmFsJM7nQI215 zbTn!AzrPlL@Fb{BDK%TkncGRR-bACDg@MO`rDuT;GA+{yr7vc0PHucsCSGl(l66(8@+6AY3ay&A>A`Qed}+uSPh@-t2Dv_&BA#c8(6sOZ6A+y8t?Iv zb%m{Ydl%JP89jyoXbas!>8WSnlM9e^am*X7{R97iKuqp{^-C<3GO=MwgQ#>@-@U-l zgX%{ER`pl{^=(2X@2di-h&q=`RL*d3h)3&X_-j$z-Cvqfk z$V#;9Yn9)vp6wyg(XR3uUd;wTr4}W$T5tLG zzOJ1OKmIsW1G?+UqR(3Im7qw~_ki|_6;ZWd0R&jmN~%rk)iTh zwCSpaqLThm@zUoY*yq!@W7mlj+y4EC?;*(-#<)9QHu2)>*|EC#5m{!_OI8FUn{~)> z-{*(;)XSjjs?F~=XHBiqRY`R9^bp+jKPS$X6z|!48{t*GV0ncjXzj0BA_^GA9c7cB zU-gya$nNw_%VVsIp6w|@jeXl(3`LykXGk%F8>WqZbB^^3yT=#4(Pt982hWwcWaU^Q zMZ7%DY45p-uTv6=iiv?BtV&)+)5*$@n_8xn(Za$tIMnFi_v&h%QT>VN z!XjBz)vIbD;s<~xmo>)4+Xb?C;<9^<-*Pm8kcERH@m(Gsj(=(7zlF6g%T6%sv=_mg4R7n@;jtY zTEmV{Rf}P84pxtx<7PPx z(140WrNz58#)?kYyC?-Er12v*o1_`xL01AXM83XOpaRaAcInlh^>u4-k7*Wvaljnr!Oxu+5&k0k5=HJDr6jJPhjf%^SOnXLdOHY#Y15&?JC31c8Qxz91-j zugSi_l@p+nSwf^9;ZrB)c87);RNM0ZREiMxii8EMwWq*x(HSq4zTZRtp+v4z*skc* z3kCq-6s)3QwSPDDCxwEE7SrBSo;$5hf&9mkY5gT-1x3DvR^g8%Z&Pq76_VdV$%Ng->qD$G1ImWy_nu7u2nT8wfpyY>5}!mFJF-#w{>W!s%m*z zI$2*bzG;#-ayzT;T-`Lx{=Ty637lNY~-Er*{_4Q&G~+b#d_7%I5g zjb3KD>%PrfzsYHLd4Iblfq~`siz~6-@_=u7ia2V~KvltOE@uzA?viNDMW@-rG))%R zUjzl=)a-oc)rIHR`ugaOlTO5&1|qJ|!lD#g2W`HT7bUeb+C^j2d}&y46wJ4w(b0pr zwd><<0kX!LmOsteo^F1l{&Uu-`drSEUS-qMvEpoH;vqynp4y9MfjW14C#SsX8YnaL z@kfdeYk5awxu%sQnmTkVW<5vpU+ssu2ODn!FDXACJiXo~E!hk6o29;*4vhbO@MiSK z10j>y#m}NQYRi{2V)G0W2bEXo5C1%8#CwuB{uBQ0naET9z;y3-S(~CtBySRDqtTSL z&~Lc-u!qT=Dlm~CEcXgSVU?kTOp)ckai!!&1F|LaY+r6#`T z*nZii*=x4Wi0@%=o+ypy-FV9%fNtbn?vw)gOFSswAN@yHo+2={uktaiB%l57W?m~h ze^rU`^&0XE%szhhUmLEu8I-94ANE4B|Q+KQ~)B2#Xr8^7HuwS9rLNxYkh1}TdG-d>@~%pGS(sXl%0*@ z*yD44_vq+DP_f-akA5?jofp@*=>tQ4j7aHlCdLy)L<4_1J4D3@;70Zvq-SXnn%b5go$TGf>@RN;yAkn`FLqs~ctAM5c(NvCXWr-moA@c87IrQp?Y-S$WA(lcb_ii!Yb%ZAq< za~r}@1VXUe1(XDj9vpninTB1;M6Waq69CaXoxrF}88ny2m^(aKDnD7JSbw9^lcoQN zlxImU;7vyBnZCRnPsrCvx;?^`83v^YosQSS@nXLlONadeaQ<{JG;v*J-MUS5^P zmm`h)JO%2-zb>(9{JVS)_@#MMqp}J#H!9V6haCF6O&A1VXn}*TW&RbveUy-=^VZ|qHD{1a;g)Mc9jz0-qgPjK?#4%~hNC(C>OpO#rn5((Qm}uYZJe7y&*kyQjH|Ko_djB&%#fygMP^&O z1yghOIWI#DC&AfhKZP7d_D{uR0B4zB?4~5$FJXqV#jIJekS|o8&lplW!X%E)7SC_o z9>$R99+QtAihQqGK&rMwKG$}pH%`4=toz_{RWwEnvfRG@+heXniTv|&rAhh$k6E)# zS0*O-Vp_b#&tI`6oH_We94Ey~OL9?Yp|&il+&=zx@uUwA041G;kJ_&)Zd}QJdRc^R zgDf_Exk*w`K*wU+540j-i%*bpqnV&sMFHF(0tL$iFBrguRk!Y{LA#{T0UMQ^4L7L`ix?NzsZ`-Axz5Fhu(5RVR zjxn6kGcsy20fP?`z!!*9CxRYA5P4d{-*HY{tXQse|Mj6Rm^h{hjo4XB>hD} zb{*_B@hGzt5|hV}f+|gY@u&ng!KeZjP%_0$^=W}#kcq^us0>TOa)<6nxM_F3W{ePv zfP;hKf!CY3x( zVg(z9U?~SdfjX?SP66cLc_Q}v-RgXG6|dDrO8HZJvvb!9}v3qMJPem|t?rO~rMQ zfx%S`MAa^2ghSbSQMTzHA+(*M7iVlP_2S8}6D>GYaN;lf&Rk>c1?7&Jl@(E*>^*RH zvuJW6m}i#j#Ndt;+h23q>leC@xz9H@Il8$UQtDxbe498HtKZM+OjMZPj7eWTZPVOz zewYD*Y-c`@TK&BUm(JR-$%GZN3ic)xaD|6Rp}-a;SBKDpWGo$Q=y$`;!6CKZ1nm;~ zZAUs`uka|jWX>%6Bid(~i5o6nm4ZM1u5>pZ_l7;&qe`4!JhxfSxp{)uqY^|`ts3Wv zAAUw?b8e+HRvz+|9dYZ$*%iq!%_%tB>fnqC)ZX^mTasD`z=1PzobQ2a2*x@-XtHL4 zW)P_=eN=&R>3qQ47m=NYIL~%<&Yg@xvB*45-w}A*?ucxWUn;pzZ?bQJkqN!*t|+ilV?17Y(+q z<)3ck4~3CqRVvfs$rj>sm^g?$gYCfx)xUy3Lm3g0KMi)~={fhuE_ulggso@T1dJf} zL(pq+$2mXzr24KG?%tL1`=1WT_0@%_*FN-N(og!(2GKZ~?tGlLMy;Nhk*=Y?mAl1} zYM*=E1MFR~I-0=q>Kxx;%G?uL5Hjw29WggQAK91Z5-4$38YEIXVzixz4jO3`e;1tD z>m`2(AqB^|#hB;t@lWY!^V<&{gNZvE9G~>h zoBt9I`)0s1$=@F-JrLA(4FPFS`6V(VB%!CQ#Q#42Je)+;BWJ!=)_POftPD(Km`Y|BTs-8z# zoj}n07`{v>czug{*`0dE-FZZ#+WFc?>e2mGOnqE*uK;d%Y z!zX<%P*bv175D$E>8yjIe7`onbP7v|3(}1)u!NMvf`l|Ih;(;Jw}2qs-6zwnsTv$zW3Tu%Trns2b9uBe>YT~sywa%Hcl86b{tQJE9p2BQoSyf z>kMOL)*UyHysi{QT0&SOx$Xs5A$iE)h~`Jic|I;4!SEc$D4CA>Kr+T_=yR7lZgb}z z#-jU3^C-cc`-odE=38o)!22?Sk$iZJBq!#Mx4Fv2zzcou(QuxjuFjvXghkHbOID<0XZ6pVi)+^F{IjOWUw;_~>^%eIQKo zBCp2xd?dqjU7^&boQ%&N@;h*uH}%+szV%8bR%fo7ZFeCsHjhd;gFz%}aLmv>zd3pu z#}mJU&)JGuhe@6tnY$n0#8r^S8T(yAwCD8H;@_hBUi*!ZkT8Rp7sB zHP_b3;5opak^-=?!HM6^oLfu#s&ANUg|Ws1|@OFW&+d-s^4lKY>RMuw!)$^932?qbSyRv;Ul1wW}_x zyc}xgoIB(($MXMw7ND)Y{aU9&`#(qTbiY+Mw)TLXt*iXkJbKLYAr=Mjkzy)&>B#Cm(=VM5Lkxs1J2`k^b(>UGnc-F&6? zBa@FhkG&1i+hXw)fotvsH%OBE2Z2Eg47V>k6>g92)`i#Wr~m5WJOBQ?gZVwYuZS$X z2u6IVMvFTuqD;!%b310C!eIee`*xVv!LIRsbiDlR`;^%D`R22XI1e@GQ$HY!h{NiX z-c@;c1Yo}BA`45j`#L)Mp#9C6=Jj$-@>-<}su%mqXvLqu{LRf6JjQH;)fkS{viF(! zkv>I6#pBzTctFSay8r_2|6b1J)~n?PbQp?IX3A}wRk0^5{mG-o!U;!uk94snVE^!^ z8ohl6v`LEbqq0{42Qdtpa$J&;q)tswrxzD{+I1h%5vo#j?$xiZTIC3^Q+~R%^ls~h zNuxagv91glVoC}zI0Zvk?V{nMM4V!I4=5)LZHkavystG^GgfirM(d+u^`*95F?U0xc*FaHHzj@)U{ z3>zYCKtKTK?`lYi$<5X)^|GnWKeGi6dg;E{A|-VApMGTz?NoY4y|(-u z-sQ$uurC4iY#7q`um$Z+O0;6LqEIrz-G3B0$7t@*?-LVwpX#1?{zupKJ+H$Ev*4*e zT%VhoT<`vol1`ucTsfFX*Px$eTYaah{K={+-EY~Ve{VbPQn7rl6TR#42h3bFNuFG8 zCjjr5_tU$q499zqB)^c>{Q6**T{h*_R=@6x(<7Q;hIpV6y|ZVrxw7&F=ZASib2wZT zL3@0#F(JQeP`VkSO=jV1wVHE;-B}fgY4U(^1ww7QP|{o^_y}1+#bp?hoKW7L-0}H=VM8_RgGX1GXpp= z*+r-v%lJ^U`<0OMTzi=)EG62&u)V!%@8x zx*?czPvJR5L9uV-TodXvOe&C!<(x`xEL??P4)R4)0|#@&G=RFlI>aT8@|UzOZY|9l zLuNm-*v@&^L*C|_IpYT){T*JqoU`_7Whe^!NAw9dL|)wmUZfcx9h1HYQ{)e)g_&l;}lss%cdE{Cit~v8<56 zQ+0ECcsQA}irNJDQQ)h_^+DU7_uHF&6a+#xygTgL;J1nDLRBC^-XOy7F8hs=tkEVV zDvy-_eLPF|JZZ@#2=84F*P3)N0zc78k6zG_n9dg?FDy_P{{66loZ8eyQB#hq0qK@j z_^a@TP^v95)4%`y$Ks3U!yeU>BHD_usF6dQkNbKQK}YOb#?!%8SzsP8)}PUs`8zq~ zFO162A2i+n5ozorEm568n;rTulUes|1Ze3PmKQ_u{)Im0xz;p+Yjz7L+1oGbw}Prj z!!K^7G{17gYI?|O*6GU*Ih?c8n!V>Y-i(XZOI(Z=m?B0E6?`&Twk!%?C7 z9iIs>J^F~LYgN#KjZIziqM~AlCCR>C!S0q2Q0al%J&}KO6mcVJ?7Mp3u*L6wn$k(G z(zWpdl^azNK_Y}BCKZnHK~>2JrDPP^OONlbVb4&Ag$Ps$e@$o_SadoLK^EDE)Y3#Y zLi91YolWVWo)AIghdPY_ET6sWYxl>jqhLm4-^YQ7ltH|^!{7T~==i5fiqnULTWl?mpPp-~VK6Gx^iK8JvLx|;Sw!hgOIIv>N#iy$}C&V9Up;`A(uk-ptf zDhwRtlfoY~lqZE7*h=(RTd<4R5Q|_sE*`as7NH)6Ty@62tTM<`hCec+!TOlru@9(V z4sU94`E;-}sZDX9l>>IXf3_*4gqO7dr#jO(?QAE=XK2Z@kALD(ER;Jq{vn}Of57`sWg-CbEgE|%U*;X8)d$RW++|VbAMI?pA!L$A2X~qWqFMeN@UL(gg_wsX1gMvswnD=R@ zeFIV%K)+uKP^dp%bp2+LU^eN;XUSHZl#FQ zWZ-er?7wY9ODEp5Y4@OhlTwpXS~1M;9iT!KI*7r7#?PqVJV$cX?prtoM`Ob)F|!|Y z76fw@UM?(UW{R;FTR^u%Y9)gSEUDg$M5d_-;A9~+iOmUIlM+!}ONeLWiWP~9_yo?J zJQi}dWC&5rOaJa3C)4Fum?k*;U2vVV8jN!_i14jN;gMcp05vBZV}OL!rX)G|IeYAL zR~T-Doxng?qVLyG3Rg8oHI)4Yf@&308@q^D<3i=)zAhayG;#}~#JCEvBsX2Do+_s1 z=#cV%%sUyiIKD0-v10~WGo%12Sd}B}y1n*v!?O*HlEz>*w39y>snIAVyOY$DT7HFArrLGWsEd$Y};KP z2Oy~4IFNPAm@_j~mqK1bxx0_?2doND#P&zJaIQa6EGWE2a&@~wX0QxNKZ$p{K;|?@ zK0$DBN#awtHL?iUiJ=0>mBf&8i2nhdBh)we5k@7kOjaZz#1}$~<3`{j?EeoCY)wp&@R8qh-s(*RNKtxg;NjqfP-#vDUqGgE!70QII(2#I- zms{6Q`%VLR+8_AKku&&cAc~VRJWq||fUuNQ6>;_q148sm``V!EWISR=jU!*RToZ<^ zNIPJ*FfPE^N);~69nbPK$|B#&x5;b_rv&wTenz^+KV(-iFh{NY%OtUK4?j>bX@}m} zW$%$fb8Sewk7~8P;|F6>B5^`KFmjN{K`?^@kl&;!gAX9lYZ`9E#Y}I)O&v=p1MnrV z(a)F(scJ(hHBfGN--(&q@O`KgOOe?jb?uhYd?ff7PzwPA?bn75gF*QRs1NHB9`XDDW!z1Pd-k^L?4AW+B&V8K=I0AA6g@^@gkW@Ie_@1UzLsUjx4soWZpS{G&9FKCvE_@4HE$AC z42WN(3K0!s!^@0UU`!XTkRT$l*27hu;zzr_L$$d5uoZgMs9)tB zJ+RbPit?R0nXO(H(VB6UOqDYQYH_n4TMaYd&i$Ov(|P<;WYp4jV{q18B53V_#Vh^; z&ptyTm5)p6<<{AxbUEvx5^8O!DuTEYsgKLo6=v{j;o~tvnqve8A%2?|s6d0rO4i4&ys} z;8>+srNdBDUF{V!V1Ax89(4O`hDj*^_Tc8`Zh~~gkD18^WFvM{m-^f$6%o&tYD&bNdz~tr(k?y`@{wGz&~dE`czjJ0{kp$ z7NpT986y;!-49Y6L?GPW4;cy8!`PxBI3fMLgE|Y4ifg3xmWn{g;C!OWcVq)QzVbO-AvpE+uC1>R&D)`Kd?hvbXP0E{mJ+4( zX+ZFkplVVXK`LrrsT5=>rw)ymI#qvs%C#TOO$y$0S{Ynrm&GX!pw2J1Yl7a}%`Nq{ z?n|98TnArQFx(ND+1QEdb@_2K7f-LfQ>f>}UlNJG5mc;p<@s-FxSy!6g~>`j7G_I! zLfQv4NT6R@7^Xk<^7`a`K`42!^>N=uGW})1kL@QuVVEjYZ_Df!a)UIedW4UtsQhkY zIc~oFlAqsS2!r2kZ-3lmn|T1T3Po~2nws{AzAY>mU-LhQkOG=NXc%}kH7#BVJm(r8 z^1!$N!~z#XUN53By%udTu8h%{G^N$kf4QZy@+j$BsDdV~>LgrQ>gHnn^+s0Cbzl4W z-C0v0k<_)#ZLEFM3>O(rhcUVU?}(2q&S^B7xKCS25m1f<6v@-e>;etRuq?3I*oqmE zFc4ZGol-+S;)6coy^dlM3763}@W_l&#zLFh*X~x=Iti=udwW4$<5z`gQpC@|{NUf6 zU2}_NCeYppooRAj{L=v{xrV4v4s`_msk@1TE9^N}k`;AgQ{K4!$)Jm`l~w(;W2Y7; zAn!(Z%Dwi4Cpt z@(%Tcq2KArnyb~#qkjqVKX<9u(ri3wN}uTP z!p+(psd|R=foKj~4SMl!1LB7*Lw1J==wCT4PQ1GZd@@asCU8Lq1#>SSAt@l6}h{26e!6 z-CrS4izi89KQJG}etLHDlX=cY&&#k{doZuG^rmst!TWLAmJ#!825J|&A-ine8#%!6 zWcBWg9>nJGW6;%05i;sd7#Byp%U9_lXqT6l zS1Mp9r62$du53Lk{n06vb5ai{3fzbYT49-4*9@TS`ayd4rC|KF&E)D8i_z4TV)EP8 zGF9%;t+eP;302z~(RgfPIQ9KH*61 z(~j4}Z#qQZtSL_X{@GwxFUz1$&WcygWvGgVSXCFt17a0ea!>s>ywqLX0%G4Sv(VDh zE$uHrBk(Swq|R&-Q4*{BHq@5s7)sI`tqo33dD0%==y!BF%$z`) z)plJgfp^8=0T&y{*xkIAczv$kEkZj|c=G@5S$KQnJ)KFYZL1Fjb0~{0!6H#_a$C-R zbZ8Nx6m7Hf_0uWD;sqLw+DtepPe)cqz;ypE*~IH-=rdlE7XHg>sq;DMwz)ALqt?Tu zz486pNb{RRlPd>DK^ky#d{v$-851!vk2T7=I@%6hTo^2rYM$N6Z-}^=0xO4xBY*Ae zbKIu1tjS~fGSkEK-@UP}kNTCx_T9GFxaOVC$0G2fU0tXP@Aab1EW;QZ2$K(r>3mJA zfWPLh!mdRe@eCxfx%sExw@+Q%+(J@-4Xc!>sLb99>}Z?{4n)@hmHJFLVXnZgj(HL14LI zMGJm|XN<}f*~LkBb$R*t97jz}{W-ba+`P0DcfLCEWg^Dph?fyiMOA;=r%pPuDM<|; z;h+$$j&W;wtMf6gw3I|g=Vfhsdx&*g9+q?kHu}UglYMOM;YvD2SLB1-tkW1u!{oB( zDXa`-WZ{`tfyV8g{|yZf6Xc6eOOgJiqo+3)ftd>BF^^8>9t6mH83qfn;0}iU5ai~E zyE{MK{o&q`f~q}k)~^tEY{({k^z%>%Ipms5oQCSj2s&Mt^b(+x)KQo+xwtU-dV9%x zW4_VsJV;%j-na>Le&O=!e(k+J5uCzAF6#ubI)p>asJ>^$*?}p{X$i@&2Ob*p)ZVw41-KgIU zOO?gN-IE~36dtY9&n_E%x9CzeBVo*NFJc>9B;5FY@|1GUFnJvqu5~u+^3r7>@KfXqRR30BXDaf#&iye1?>2SN0WPl*5ibjM5t)?4rmD#ujv)$XkS z_tcl$r4W48lvca2@al-x>hXI zwLiSj{_s<7;S;a{j+Lo})My}k9(R9s+6Z@bzK0m>rXH<&D;IU7mwFXiNBLvvDu2Ru z+?juLtU$ean;Ys(U-qg zN$*-1T3}ON7?7@}fQ#~=WY@8<_4~wQVFDXxk2{QOBnrkeCgDZ|Ye&i{2j`Q(!D}p_ z3mRU;UH?_3{>SsB-(MzEJ9i)G1c&ISE_@u2rN)>8KDIj5zvHpSAA>ui*pTO)VMX_m zxbEkFY`xZ9Q4tYm5|VH;Bz%i}tP(^1_{WnXxy7;Gm+XFJU(cxLMPF83*Xkoy$HW#_ zgbCQjRh)f|T>&}~^Xs}~SqfMpBq*B_=kyz#e0VPcoP*3*d2mqn*8_J+&LxWxve~5? zs8zO64_wQJ^XbDzzQMHb4YE_m&!uvIK^_T8(?=1XLZ=U20$HpQhMXd4ZvY zOS@#1@)Xz1QoF;^p!Ju$YS%=N^It13121Y)cA8_6OB)+sz#(*|RKQ`gdJ_Fk2SKV6 zFmIBrQobV+o2^tKPpi;4?Wmvs&02>tOw>DgeeEgPsPIXMeWmsv_t4sa-dJbw-XDHW zF(9a3&l|!TL-x8FHOB)^rTg|mYm+0?x@A^omh6`8H zFtJ{Gip!)8rk8Itk90Qs^AyShOh_-HKR_~KZ+v0gx}|^t8~+`&N4(onsLxSsVD^k` z?6s`xTUJHJdcmRm`V(k={y9o!__}Gz6RXTh0mxT$=$*Fe8Be3L-=4D;qje<2&*s++ zY1!<=7)`Y+bZi>^Boa|&w;s$vr@VJI4@QD8AmbcTr|+bcWEW&y@**n{gfV8&U*%JZ z?jp2}%bdGVGcLtsH7ItKNPJ9Is&#gWJY~2wZJ1v+yNr@zqG&x*a#`Wo;`NHP_}QN5 zx^Ji!Q{nc10>47AX6j7!sfeFNfT2rIx^TOHcGU8_^c&%Uf2N<~yBbe^eZc5a=6XTn z_OhUy?I#3+XP_u6t<9G3-A4W56ySW~p>ky4y~DyIi=nQRENV-$UrA-KrGrg(LGV06 zFN@&C!R6A|f{QIrJ-ZcR)MRaRqA-S zBYx$9?cdnJWlXXc#C^8pn#xMk;V92ije8-5lC;D$?T~<-P$LH1>1XMPI3+iyVlMx+69@U~;0)8%F27#H=3PnKALJc{N+qN~{Ry$l z?AY?xFRHii8I5n#lucXs8XQ-rP7|zO|8~tyF)wn_ho=t$rPz8#&2+{K0Drt@C6aNtWl3k1qHG;?b5gSM+Lb`+3Qs-^#)767M6&ey$-4wJxV>1S682uTVv{Sb?Nj8 z7>wcYa<+SK^9&M`qW7rfeUR?#=wI6RV_y%Cn!B0jihc+<4d&mIUHjITKgjg^La_!` zo9do~ugaSJoxI2{sm!jZdb_h|n+1K+TB>x>{dw-$nBGe+&umsj6E4vPCx1gu9|819 zv3+TFc3DN>0$$L@|6boshSUwm9V?q+Z*(bUlcVx-?n7+dSl0+j!j$0#u-KG+bkSa& z3b#S&ObJ#DDWc+*-)HtK@~NhPj9Cqa4NkYXnz^OjF2lO-UU}eE*6^*PveRWa!!ZEkQwhJr^v;b>g|#1JjD-<9hr2 zZ5jCfFF_c*_l&`vhn+BU7*6Cdmq{5D*2&(Fzz@~TF0+{VT%NxjA6+{6y{Gt!mDr&UZ+xu;>3?2lnJ6XqW0?~6Ji)Qm%Z?IMZGXpz{4s4O%*BIHzsmjqt|taq5Lu!BxHJ+3Ny4casvk4-|Z(uC!AphFbV$HhOE9?p=cP38T`` z^i))QwL`p}K2_mgM*I#0afe9!ENgt8NIZbq$HJS)n=zYF(OeaosmUd&DqM==5DbZr z*D;L6ma$*}IWmcLBq9#}^->m}%r2YWHhXQmb=M$Wz|+Wk5a(=}Gdn_4L_N9RCN_?4 zls>ymlw3xoH1!A(%RJ`$-SG$bE`TFd?%1{7nwXl-{%oaTwWZX-lu0Mz00iV^j=Qmf zbBdB}u~&`R#i%Nm!OVQtC{db(ogUMLaI*ynLUl^eX-23X?p`*PwSFbQi;pQxjKx7H z^ElpuMUk94CHXN|7Aks}7NVPORg%iewc0DDaeQy2#!V}Kow55+tAH;#wpQC#|AU>M zEzHjpwl*tRm9_3$uT;wa({qmW9fCN-7lv(yUm7svY7@VF-dd&rSsJ!XjvrbU1pYWd z*F$$JOQ}JME5$FqDKp;f3kN>Kcz!o%ax?Jtu@78zN`$!27m7`xil0QN3W+9SYKDeT zkgez1#q!1Rk;guVvecTQKN;3Ub^fWttB}(+&U^7&eECm-rb`mV?zptsL3Z)%y+m0! zn>n=wd@;8?_ed5$$v!KcO=k3My0ylmDM4;NVio~a0Sd$C%qVH-`=I^#yS^B$TN$1e e@MD#D$Iz4EP3gV-L;y^0LKNlHWUFONL;eqRa_bxb literal 0 HcmV?d00001 From 6674c702800ad0d876808e06ade20e43f2b694e8 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Sun, 3 Sep 2023 01:20:01 +0300 Subject: [PATCH 135/729] Add support for limiting skin texture/animation dimensions --- osu.Game/Skinning/IAnimationTimeReference.cs | 3 +- osu.Game/Skinning/LegacySkinExtensions.cs | 35 ++++++++++++++----- .../Drawables/DrawableStoryboardAnimation.cs | 2 +- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/osu.Game/Skinning/IAnimationTimeReference.cs b/osu.Game/Skinning/IAnimationTimeReference.cs index b6a944ddf8..91f1171a72 100644 --- a/osu.Game/Skinning/IAnimationTimeReference.cs +++ b/osu.Game/Skinning/IAnimationTimeReference.cs @@ -5,6 +5,7 @@ using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics.Textures; using osu.Framework.Timing; +using osuTK; namespace osu.Game.Skinning { @@ -13,7 +14,7 @@ namespace osu.Game.Skinning ///

KVsm2B>cb8^}lrej~MtL3IA_&{r^T6&VRN% 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

/// /// This should not be used to start an animation immediately at the current time. - /// To do so, use with startAtCurrentTime = true instead. + /// To do so, use with startAtCurrentTime = true instead. /// [Cached] public interface IAnimationTimeReference diff --git a/osu.Game/Skinning/LegacySkinExtensions.cs b/osu.Game/Skinning/LegacySkinExtensions.cs index 0d2461567f..ad3b10edd3 100644 --- a/osu.Game/Skinning/LegacySkinExtensions.cs +++ b/osu.Game/Skinning/LegacySkinExtensions.cs @@ -11,6 +11,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Animations; using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Textures; +using osuTK; using static osu.Game.Skinning.SkinConfiguration; namespace osu.Game.Skinning @@ -18,16 +19,16 @@ namespace osu.Game.Skinning public static partial class LegacySkinExtensions { public static Drawable? GetAnimation(this ISkin? source, string componentName, bool animatable, bool looping, bool applyConfigFrameRate = false, string animationSeparator = "-", - bool startAtCurrentTime = true, double? frameLength = null) - => source.GetAnimation(componentName, default, default, animatable, looping, applyConfigFrameRate, animationSeparator, startAtCurrentTime, frameLength); + bool startAtCurrentTime = true, double? frameLength = null, Vector2? maxSize = null) + => source.GetAnimation(componentName, default, default, animatable, looping, applyConfigFrameRate, animationSeparator, startAtCurrentTime, frameLength, maxSize); public static Drawable? GetAnimation(this ISkin? source, string componentName, WrapMode wrapModeS, WrapMode wrapModeT, bool animatable, bool looping, bool applyConfigFrameRate = false, - string animationSeparator = "-", bool startAtCurrentTime = true, double? frameLength = null) + string animationSeparator = "-", bool startAtCurrentTime = true, double? frameLength = null, Vector2? maxSize = null) { if (source == null) return null; - var textures = GetTextures(source, componentName, wrapModeS, wrapModeT, animatable, animationSeparator, out var retrievalSource); + var textures = GetTextures(source, componentName, wrapModeS, wrapModeT, animatable, animationSeparator, maxSize, out var retrievalSource); switch (textures.Length) { @@ -53,7 +54,7 @@ namespace osu.Game.Skinning } } - public static Texture[] GetTextures(this ISkin? source, string componentName, WrapMode wrapModeS, WrapMode wrapModeT, bool animatable, string animationSeparator, out ISkin? retrievalSource) + public static Texture[] GetTextures(this ISkin? source, string componentName, WrapMode wrapModeS, WrapMode wrapModeT, bool animatable, string animationSeparator, Vector2? maxSize, out ISkin? retrievalSource) { retrievalSource = null; @@ -78,7 +79,9 @@ namespace osu.Game.Skinning } // if an animation was not allowed or not found, fall back to a sprite retrieval. - var singleTexture = retrievalSource.GetTexture(componentName, wrapModeS, wrapModeT); + var singleTexture = maxSize != null + ? retrievalSource.GetTextureWithMaxSize(componentName, maxSize.Value, wrapModeS, wrapModeT) + : retrievalSource.GetTexture(componentName, wrapModeS, wrapModeT); return singleTexture != null ? new[] { singleTexture } @@ -88,9 +91,11 @@ namespace osu.Game.Skinning { for (int i = 0; true; i++) { - Texture? texture; + var texture = maxSize != null + ? skin.GetTextureWithMaxSize(getFrameName(i), maxSize.Value, wrapModeS, wrapModeT) + : skin.GetTexture(getFrameName(i), wrapModeS, wrapModeT); - if ((texture = skin.GetTexture(getFrameName(i), wrapModeS, wrapModeT)) == null) + if (texture == null) break; yield return texture; @@ -100,6 +105,20 @@ namespace osu.Game.Skinning string getFrameName(int frameIndex) => $"{componentName}{animationSeparator}{frameIndex}"; } + public static Texture? GetTextureWithMaxSize(this ISkin source, string componentName, Vector2 maxSize, WrapMode wrapModeS = WrapMode.None, WrapMode wrapModeT = WrapMode.None) + { + var texture = source.GetTexture(componentName, wrapModeS, wrapModeT); + if (texture == null) + return texture; + + if (texture.DisplayWidth <= maxSize.X && texture.DisplayHeight <= maxSize.Y) + return texture; + + // use scale adjust property for downscaling the texture in order to meet the specified maximum dimensions. + texture.ScaleAdjust *= Math.Max(texture.DisplayWidth / maxSize.X, texture.DisplayHeight / maxSize.Y); + return texture; + } + public static bool HasFont(this ISkin source, LegacyFont font) { return source.GetTexture($"{source.GetFontPrefix(font)}-0") != null; diff --git a/osu.Game/Storyboards/Drawables/DrawableStoryboardAnimation.cs b/osu.Game/Storyboards/Drawables/DrawableStoryboardAnimation.cs index 82c01ea6a1..309ca63896 100644 --- a/osu.Game/Storyboards/Drawables/DrawableStoryboardAnimation.cs +++ b/osu.Game/Storyboards/Drawables/DrawableStoryboardAnimation.cs @@ -137,7 +137,7 @@ namespace osu.Game.Storyboards.Drawables // When reading from a skin, we match stables weird behaviour where `FrameCount` is ignored // and resources are retrieved until the end of the animation. - foreach (var texture in skin.GetTextures(Path.GetFileNameWithoutExtension(Animation.Path)!, default, default, true, string.Empty, out _)) + foreach (var texture in skin.GetTextures(Path.GetFileNameWithoutExtension(Animation.Path)!, default, default, true, string.Empty, null, out _)) AddFrame(texture, Animation.FrameDelay); } From 351081eb278ff0f48fff992ba9f0e0de2cf98814 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Sun, 3 Sep 2023 01:20:40 +0300 Subject: [PATCH 136/729] Add limit to osu! hit circle elements --- .../Skinning/Legacy/LegacyMainCirclePiece.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyMainCirclePiece.cs b/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyMainCirclePiece.cs index cadac4d319..45a18152c2 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyMainCirclePiece.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyMainCirclePiece.cs @@ -21,6 +21,8 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy { public partial class LegacyMainCirclePiece : CompositeDrawable { + private static readonly Vector2 circle_piece_size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + public override bool RemoveCompletedTransforms => false; /// @@ -51,7 +53,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy this.priorityLookupPrefix = priorityLookupPrefix; this.hasNumber = hasNumber; - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = circle_piece_size; } [BackgroundDependencyLoader] @@ -68,7 +70,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy // expected behaviour in this scenario is not showing the overlay, rather than using hitcircleoverlay.png. InternalChildren = new[] { - CircleSprite = new LegacyKiaiFlashingDrawable(() => new Sprite { Texture = skin.GetTexture(circleName) }) + CircleSprite = new LegacyKiaiFlashingDrawable(() => new Sprite { Texture = skin.GetTextureWithMaxSize(circleName, circle_piece_size) }) { Anchor = Anchor.Centre, Origin = Anchor.Centre, @@ -77,7 +79,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Child = OverlaySprite = new LegacyKiaiFlashingDrawable(() => skin.GetAnimation(@$"{circleName}overlay", true, true, frameLength: 1000 / 2d)) + Child = OverlaySprite = new LegacyKiaiFlashingDrawable(() => skin.GetAnimation(@$"{circleName}overlay", true, true, frameLength: 1000 / 2d, maxSize: circle_piece_size)) { Anchor = Anchor.Centre, Origin = Anchor.Centre, From d286816ba8b1beefe81457dd2533ecc9c937b449 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Sun, 3 Sep 2023 01:21:02 +0300 Subject: [PATCH 137/729] Add limit to taiko hit elements --- .../Skinning/Legacy/LegacyCirclePiece.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Taiko/Skinning/Legacy/LegacyCirclePiece.cs b/osu.Game.Rulesets.Taiko/Skinning/Legacy/LegacyCirclePiece.cs index 5516e025cd..c94016d2b1 100644 --- a/osu.Game.Rulesets.Taiko/Skinning/Legacy/LegacyCirclePiece.cs +++ b/osu.Game.Rulesets.Taiko/Skinning/Legacy/LegacyCirclePiece.cs @@ -22,6 +22,8 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy { public partial class LegacyCirclePiece : CompositeDrawable, IHasAccentColour { + private static readonly Vector2 circle_piece_size = new Vector2(128); + private Drawable backgroundLayer = null!; private Drawable? foregroundLayer; @@ -52,9 +54,9 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy string prefix = ((drawableHitObject.HitObject as TaikoStrongableHitObject)?.IsStrong ?? false) ? big_hit : normal_hit; - return skin.GetAnimation($"{prefix}{lookup}", true, false) ?? + return skin.GetAnimation($"{prefix}{lookup}", true, false, maxSize: circle_piece_size) ?? // fallback to regular size if "big" version doesn't exist. - skin.GetAnimation($"{normal_hit}{lookup}", true, false); + skin.GetAnimation($"{normal_hit}{lookup}", true, false, maxSize: circle_piece_size); } // backgroundLayer is guaranteed to exist due to the pre-check in TaikoLegacySkinTransformer. @@ -96,7 +98,7 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy // Not all skins (including the default osu-stable) have similar sizes for "hitcircle" and "hitcircleoverlay". // This ensures they are scaled relative to each other but also match the expected DrawableHit size. foreach (var c in InternalChildren) - c.Scale = new Vector2(DrawHeight / 128); + c.Scale = new Vector2(DrawHeight / circle_piece_size.Y); if (foregroundLayer is IFramedAnimation animatableForegroundLayer) animateForegroundLayer(animatableForegroundLayer); From f182f571cbaa019ed3ad3272ff208dea98ac51a0 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Sun, 3 Sep 2023 02:22:41 +0300 Subject: [PATCH 138/729] Add limit to catch palpable object elements --- .../Skinning/Legacy/LegacyBananaPiece.cs | 8 ++++++-- .../Skinning/Legacy/LegacyDropletPiece.cs | 7 +++++-- .../Skinning/Legacy/LegacyFruitPiece.cs | 12 ++++++++---- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyBananaPiece.cs b/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyBananaPiece.cs index 26832b7271..9f99e3a586 100644 --- a/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyBananaPiece.cs +++ b/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyBananaPiece.cs @@ -2,17 +2,21 @@ // See the LICENCE file in the repository root for full licence text. using osu.Framework.Graphics.Textures; +using osu.Game.Skinning; +using osuTK; namespace osu.Game.Rulesets.Catch.Skinning.Legacy { public partial class LegacyBananaPiece : LegacyCatchHitObjectPiece { + private static readonly Vector2 banana_max_size = new Vector2(128); + protected override void LoadComplete() { base.LoadComplete(); - Texture? texture = Skin.GetTexture("fruit-bananas"); - Texture? overlayTexture = Skin.GetTexture("fruit-bananas-overlay"); + Texture? texture = Skin.GetTextureWithMaxSize("fruit-bananas", banana_max_size); + Texture? overlayTexture = Skin.GetTextureWithMaxSize("fruit-bananas-overlay", banana_max_size); SetTexture(texture, overlayTexture); } diff --git a/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyDropletPiece.cs b/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyDropletPiece.cs index 7ffd682698..63be1bcf91 100644 --- a/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyDropletPiece.cs +++ b/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyDropletPiece.cs @@ -2,12 +2,15 @@ // See the LICENCE file in the repository root for full licence text. using osu.Framework.Graphics.Textures; +using osu.Game.Skinning; using osuTK; namespace osu.Game.Rulesets.Catch.Skinning.Legacy { public partial class LegacyDropletPiece : LegacyCatchHitObjectPiece { + private static readonly Vector2 droplet_max_size = new Vector2(100); + public LegacyDropletPiece() { Scale = new Vector2(0.8f); @@ -17,8 +20,8 @@ namespace osu.Game.Rulesets.Catch.Skinning.Legacy { base.LoadComplete(); - Texture? texture = Skin.GetTexture("fruit-drop"); - Texture? overlayTexture = Skin.GetTexture("fruit-drop-overlay"); + Texture? texture = Skin.GetTextureWithMaxSize("fruit-drop", droplet_max_size); + Texture? overlayTexture = Skin.GetTextureWithMaxSize("fruit-drop-overlay", droplet_max_size); SetTexture(texture, overlayTexture); } diff --git a/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyFruitPiece.cs b/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyFruitPiece.cs index 85b60561dd..e4d25e036b 100644 --- a/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyFruitPiece.cs +++ b/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyFruitPiece.cs @@ -2,11 +2,15 @@ // See the LICENCE file in the repository root for full licence text. using osu.Game.Rulesets.Catch.Objects; +using osu.Game.Skinning; +using osuTK; namespace osu.Game.Rulesets.Catch.Skinning.Legacy { internal partial class LegacyFruitPiece : LegacyCatchHitObjectPiece { + private static readonly Vector2 fruit_max_size = new Vector2(128); + protected override void LoadComplete() { base.LoadComplete(); @@ -22,19 +26,19 @@ namespace osu.Game.Rulesets.Catch.Skinning.Legacy switch (visualRepresentation) { case FruitVisualRepresentation.Pear: - SetTexture(Skin.GetTexture("fruit-pear"), Skin.GetTexture("fruit-pear-overlay")); + SetTexture(Skin.GetTextureWithMaxSize("fruit-pear", fruit_max_size), Skin.GetTextureWithMaxSize("fruit-pear-overlay", fruit_max_size)); break; case FruitVisualRepresentation.Grape: - SetTexture(Skin.GetTexture("fruit-grapes"), Skin.GetTexture("fruit-grapes-overlay")); + SetTexture(Skin.GetTextureWithMaxSize("fruit-grapes", fruit_max_size), Skin.GetTextureWithMaxSize("fruit-grapes-overlay", fruit_max_size)); break; case FruitVisualRepresentation.Pineapple: - SetTexture(Skin.GetTexture("fruit-apple"), Skin.GetTexture("fruit-apple-overlay")); + SetTexture(Skin.GetTextureWithMaxSize("fruit-apple", fruit_max_size), Skin.GetTextureWithMaxSize("fruit-apple-overlay", fruit_max_size)); break; case FruitVisualRepresentation.Raspberry: - SetTexture(Skin.GetTexture("fruit-orange"), Skin.GetTexture("fruit-orange-overlay")); + SetTexture(Skin.GetTextureWithMaxSize("fruit-orange", fruit_max_size), Skin.GetTextureWithMaxSize("fruit-orange-overlay", fruit_max_size)); break; } } From d674856e29d230fb6efd6b5a9c0873f6db628050 Mon Sep 17 00:00:00 2001 From: Magnus-Cosmos Date: Sat, 2 Sep 2023 22:49:29 -0400 Subject: [PATCH 139/729] Use existing localisations in `BeatmapInfoWedge` --- osu.Game/Screens/Select/BeatmapInfoWedge.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedge.cs b/osu.Game/Screens/Select/BeatmapInfoWedge.cs index 81759f6787..8bbf569566 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedge.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedge.cs @@ -30,6 +30,7 @@ using osu.Game.Rulesets; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.UI; using osu.Game.Graphics.Containers; +using osu.Game.Resources.Localisation.Web; namespace osu.Game.Screens.Select { @@ -371,7 +372,7 @@ namespace osu.Game.Screens.Select { new InfoLabel(new BeatmapStatistic { - Name = $"Length (Drain: {playableBeatmap.CalculateDrainLength().ToFormattedDuration().ToString()})", + Name = BeatmapsetsStrings.ShowStatsTotalLength(playableBeatmap.CalculateDrainLength().ToFormattedDuration()), CreateIcon = () => new BeatmapStatisticIcon(BeatmapStatisticsIconType.Length), Content = working.BeatmapInfo.Length.ToFormattedDuration().ToString(), }), @@ -415,7 +416,7 @@ namespace osu.Game.Screens.Select bpmLabelContainer.Child = new InfoLabel(new BeatmapStatistic { - Name = "BPM", + Name = BeatmapsetsStrings.ShowStatsBpm, CreateIcon = () => new BeatmapStatisticIcon(BeatmapStatisticsIconType.Bpm), Content = labelText }); From 40dbf098d2d31730ddecf38032da48a8d2461910 Mon Sep 17 00:00:00 2001 From: Magnus-Cosmos Date: Sat, 2 Sep 2023 22:51:08 -0400 Subject: [PATCH 140/729] Use existing localisation for "view profile" --- osu.Game/Graphics/Containers/LinkFlowContainer.cs | 3 ++- osu.Game/Users/Drawables/ClickableAvatar.cs | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game/Graphics/Containers/LinkFlowContainer.cs b/osu.Game/Graphics/Containers/LinkFlowContainer.cs index 2d27ce906b..40e883f8ac 100644 --- a/osu.Game/Graphics/Containers/LinkFlowContainer.cs +++ b/osu.Game/Graphics/Containers/LinkFlowContainer.cs @@ -15,6 +15,7 @@ using osu.Framework.Localisation; using osu.Framework.Platform; using osu.Game.Online; using osu.Game.Users; +using osu.Game.Localisation; namespace osu.Game.Graphics.Containers { @@ -74,7 +75,7 @@ namespace osu.Game.Graphics.Containers } public void AddUserLink(IUser user, Action creationParameters = null) - => createLink(CreateChunkFor(user.Username, true, CreateSpriteText, creationParameters), new LinkDetails(LinkAction.OpenUserProfile, user), "view profile"); + => createLink(CreateChunkFor(user.Username, true, CreateSpriteText, creationParameters), new LinkDetails(LinkAction.OpenUserProfile, user), ContextMenuStrings.ViewProfile); private void createLink(ITextPart textPart, LinkDetails link, LocalisableString tooltipText, Action action = null) { diff --git a/osu.Game/Users/Drawables/ClickableAvatar.cs b/osu.Game/Users/Drawables/ClickableAvatar.cs index e74ffc9d54..677a8fff36 100644 --- a/osu.Game/Users/Drawables/ClickableAvatar.cs +++ b/osu.Game/Users/Drawables/ClickableAvatar.cs @@ -6,14 +6,13 @@ using osu.Framework.Allocation; using osu.Framework.Input.Events; using osu.Framework.Localisation; using osu.Game.Graphics.Containers; +using osu.Game.Localisation; using osu.Game.Online.API.Requests.Responses; namespace osu.Game.Users.Drawables { public partial class ClickableAvatar : OsuClickableContainer { - private const string default_tooltip_text = "view profile"; - public override LocalisableString TooltipText { get @@ -21,7 +20,7 @@ namespace osu.Game.Users.Drawables if (!Enabled.Value) return string.Empty; - return ShowUsernameTooltip ? (user?.Username ?? string.Empty) : default_tooltip_text; + return ShowUsernameTooltip ? (user?.Username ?? string.Empty) : ContextMenuStrings.ViewProfile; } set => throw new NotSupportedException(); } From ae9c901b94201de270a3c2fd6ccdbed59107da05 Mon Sep 17 00:00:00 2001 From: Magnus-Cosmos Date: Sun, 3 Sep 2023 01:45:22 -0400 Subject: [PATCH 141/729] Fix `BeatmapInfoWedge` tests failing due to BPM --- osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedge.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedge.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedge.cs index a470ed47d4..7cd4f06bce 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedge.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedge.cs @@ -15,6 +15,7 @@ using osu.Framework.Testing; using osu.Game.Beatmaps; using osu.Game.Beatmaps.ControlPoints; using osu.Game.Graphics.Sprites; +using osu.Game.Resources.Localisation.Web; using osu.Game.Rulesets; using osu.Game.Rulesets.Catch; using osu.Game.Rulesets.Mania; @@ -188,7 +189,7 @@ namespace osu.Game.Tests.Visual.SongSelect { AddUntilStep($"displayed bpm is {target}", () => { - var label = infoWedge.DisplayedContent.ChildrenOfType().Single(l => l.Statistic.Name == "BPM"); + var label = infoWedge.DisplayedContent.ChildrenOfType().Single(l => l.Statistic.Name == BeatmapsetsStrings.ShowStatsBpm); return label.Statistic.Content == target; }); } From 079792644886a6c57fb03eee397d9594419e5847 Mon Sep 17 00:00:00 2001 From: Givikap120 Date: Sun, 3 Sep 2023 12:19:03 +0300 Subject: [PATCH 142/729] Update VerticalAttributeDisplay.cs --- osu.Game/Overlays/Mods/VerticalAttributeDisplay.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/Overlays/Mods/VerticalAttributeDisplay.cs b/osu.Game/Overlays/Mods/VerticalAttributeDisplay.cs index 2ad420657c..95d979ebd2 100644 --- a/osu.Game/Overlays/Mods/VerticalAttributeDisplay.cs +++ b/osu.Game/Overlays/Mods/VerticalAttributeDisplay.cs @@ -12,7 +12,6 @@ using osu.Game.Graphics.Sprites; using osu.Game.Graphics.UserInterface; using osuTK; - namespace osu.Game.Overlays.Mods { public partial class VerticalAttributeDisplay : Container, IHasCurrentValue From 8281ed5173af43556f8b2e5ba937a2e66eff7f3a Mon Sep 17 00:00:00 2001 From: Givikap120 Date: Sun, 3 Sep 2023 14:51:53 +0300 Subject: [PATCH 143/729] Fixed "no animations" issue --- osu.Game/Overlays/Mods/ModMapInfoContainer.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game/Overlays/Mods/ModMapInfoContainer.cs b/osu.Game/Overlays/Mods/ModMapInfoContainer.cs index 378e6f6057..281fe8abe5 100644 --- a/osu.Game/Overlays/Mods/ModMapInfoContainer.cs +++ b/osu.Game/Overlays/Mods/ModMapInfoContainer.cs @@ -50,6 +50,7 @@ namespace osu.Game.Overlays.Mods const float corner_radius = 7; const float border_thickness = 2; + AutoSizeAxes = Axes.Both; InternalChild = content = new InputBlockingContainer { Origin = Anchor.BottomRight, From b17a55d6a84aba14c6387a03d64053f5b82d4751 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=E1=BB=93=20Nguy=C3=AAn=20Minh?= Date: Mon, 4 Sep 2023 10:43:05 +0700 Subject: [PATCH 144/729] Add length check for slider velocity --- .../Edit/Compose/Components/Timeline/DifficultyPointPiece.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game/Screens/Edit/Compose/Components/Timeline/DifficultyPointPiece.cs b/osu.Game/Screens/Edit/Compose/Components/Timeline/DifficultyPointPiece.cs index 173a665d5c..366518eb58 100644 --- a/osu.Game/Screens/Edit/Compose/Components/Timeline/DifficultyPointPiece.cs +++ b/osu.Game/Screens/Edit/Compose/Components/Timeline/DifficultyPointPiece.cs @@ -177,6 +177,7 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline AddHeader("Final velocity"); AddValue($"{beatmapVelocity * current.Value:#,0.00}x"); + if (sliderVelocities.Length == 0) return; if (sliderVelocities.First() != sliderVelocities.Last()) { AddHeader("Beatmap velocity range"); From d5a89c4c45eddff8eb2d88cb7739c08e3260fecb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=E1=BB=93=20Nguy=C3=AAn=20Minh?= Date: Mon, 4 Sep 2023 13:32:42 +0700 Subject: [PATCH 145/729] Fix formatting --- .../Compose/Components/Timeline/DifficultyPointPiece.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/Edit/Compose/Components/Timeline/DifficultyPointPiece.cs b/osu.Game/Screens/Edit/Compose/Components/Timeline/DifficultyPointPiece.cs index 366518eb58..99fb2ab874 100644 --- a/osu.Game/Screens/Edit/Compose/Components/Timeline/DifficultyPointPiece.cs +++ b/osu.Game/Screens/Edit/Compose/Components/Timeline/DifficultyPointPiece.cs @@ -177,7 +177,11 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline AddHeader("Final velocity"); AddValue($"{beatmapVelocity * current.Value:#,0.00}x"); - if (sliderVelocities.Length == 0) return; + if (sliderVelocities.Length == 0) + { + return; + } + if (sliderVelocities.First() != sliderVelocities.Last()) { AddHeader("Beatmap velocity range"); From 0a1ba2ebe08877717f4617cb4d3070ea33d3b3b9 Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Mon, 4 Sep 2023 15:56:32 +0900 Subject: [PATCH 146/729] Remove ModNoMod usage --- .../Mods/TestSceneManiaModDoubleTime.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModDoubleTime.cs b/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModDoubleTime.cs index 08e83b04b5..00b79529a9 100644 --- a/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModDoubleTime.cs +++ b/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModDoubleTime.cs @@ -7,7 +7,6 @@ using osu.Game.Beatmaps; using osu.Game.Rulesets.Mania.Mods; using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Mania.Replays; -using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Replays; using osu.Game.Tests.Visual; @@ -23,7 +22,6 @@ namespace osu.Game.Rulesets.Mania.Tests.Mods [Test] public void TestHitWindowWithoutDoubleTime() => CreateModTest(new ModTestData { - Mod = new ModNoMod(), PassCondition = () => Player.ScoreProcessor.JudgedHits > 0 && Player.ScoreProcessor.Accuracy.Value != 1, Autoplay = false, Beatmap = new Beatmap From 58844092d6984f96e5b7f1fd263d675979c8b879 Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Mon, 4 Sep 2023 16:17:21 +0900 Subject: [PATCH 147/729] post a notification instead a screen --- .../Online/TestSceneReplayMissingBeatmap.cs | 14 +- .../Database/MissingBeatmapNotification.cs | 157 ++++++++++++++ osu.Game/OsuGame.cs | 2 - osu.Game/Scoring/ScoreImporter.cs | 10 +- osu.Game/Scoring/ScoreManager.cs | 7 - .../Import/ReplayMissingBeatmapScreen.cs | 199 ------------------ 6 files changed, 169 insertions(+), 220 deletions(-) create mode 100644 osu.Game/Database/MissingBeatmapNotification.cs delete mode 100644 osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs diff --git a/osu.Game.Tests/Visual/Online/TestSceneReplayMissingBeatmap.cs b/osu.Game.Tests/Visual/Online/TestSceneReplayMissingBeatmap.cs index eb84d80051..60197e0eb7 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneReplayMissingBeatmap.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneReplayMissingBeatmap.cs @@ -1,13 +1,15 @@ // 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 System.Net; using NUnit.Framework; +using osu.Framework.Testing; +using osu.Game.Beatmaps; using osu.Game.Database; using osu.Game.Online.API; using osu.Game.Online.API.Requests; using osu.Game.Online.API.Requests.Responses; -using osu.Game.Screens.Import; using osu.Game.Tests.Resources; namespace osu.Game.Tests.Visual.Online @@ -24,6 +26,12 @@ namespace osu.Game.Tests.Visual.Online OnlineBeatmapSetID = 173612, BeatmapSet = new APIBeatmapSet { + Title = "FREEDOM Dive", + Artist = "xi", + Covers = new BeatmapSetOnlineCovers + { + Card = "https://assets.ppy.sh/beatmaps/173612/covers/card@2x.jpg" + }, OnlineID = 173612 } }; @@ -40,7 +48,7 @@ namespace osu.Game.Tests.Visual.Online } }); - AddUntilStep("Replay missing screen show", () => Game.ScreenStack.CurrentScreen.GetType() == typeof(ReplayMissingBeatmapScreen)); + AddUntilStep("Replay missing notification show", () => Game.Notifications.ChildrenOfType().Any()); } [Test] @@ -58,7 +66,7 @@ namespace osu.Game.Tests.Visual.Online } }); - AddUntilStep("Replay missing screen not show", () => Game.ScreenStack.CurrentScreen.GetType() != typeof(ReplayMissingBeatmapScreen)); + AddUntilStep("Replay missing notification not show", () => !Game.Notifications.ChildrenOfType().Any()); } private void setupBeatmapResponse(APIBeatmap b) diff --git a/osu.Game/Database/MissingBeatmapNotification.cs b/osu.Game/Database/MissingBeatmapNotification.cs new file mode 100644 index 0000000000..2587160a57 --- /dev/null +++ b/osu.Game/Database/MissingBeatmapNotification.cs @@ -0,0 +1,157 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.IO; +using osu.Framework.Allocation; +using osu.Framework.Bindables; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Game.Beatmaps; +using osu.Game.Beatmaps.Drawables; +using osu.Game.Configuration; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Graphics.UserInterface; +using osu.Game.Online; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Overlays; +using osu.Game.Overlays.Notifications; +using osu.Game.Scoring; +using osuTK.Graphics; + +namespace osu.Game.Database +{ + public partial class MissingBeatmapNotification : ProgressNotification + { + [Resolved] + private BeatmapModelDownloader beatmapDownloader { get; set; } = null!; + + [Resolved] + private ScoreManager scoreManager { get; set; } = null!; + + [Cached] + private OverlayColourProvider colourProvider = new OverlayColourProvider(OverlayColourScheme.Purple); + + [Resolved] + private BeatmapSetOverlay? beatmapSetOverlay { get; set; } + + private Container beatmapPanelContainer = null!; + + private readonly MemoryStream scoreStream; + + private readonly APIBeatmapSet beatmapSetInfo; + + private BeatmapDownloadTracker? downloadTracker; + + private Bindable autodownloadConfig = null!; + + public MissingBeatmapNotification(APIBeatmap beatmap, MemoryStream scoreStream) + { + beatmapSetInfo = beatmap.BeatmapSet!; + + this.scoreStream = scoreStream; + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours, OsuConfigManager config) + { + autodownloadConfig = config.GetBindable(OsuSetting.AutomaticallyDownloadWhenSpectating); + + Text = "You do not have the required beatmap for this replay"; + + Content.Add(beatmapPanelContainer = new ClickableContainer + { + RelativeSizeAxes = Axes.X, + Height = 70, + Anchor = Anchor.CentreLeft, + Origin = Anchor.TopLeft, + Action = () => beatmapSetOverlay?.FetchAndShowBeatmapSet(beatmapSetInfo.OnlineID) + }); + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + downloadTracker = new BeatmapDownloadTracker(beatmapSetInfo); + downloadTracker.State.BindValueChanged(downloadStatusChanged, true); + + beatmapPanelContainer.Clear(); + beatmapPanelContainer.Child = new Container + { + RelativeSizeAxes = Axes.Both, + Masking = true, + CornerRadius = 4, + Children = new Drawable[] + { + downloadTracker, + new DelayedLoadWrapper(() => new UpdateableOnlineBeatmapSetCover(BeatmapSetCoverType.Card) + { + OnlineInfo = beatmapSetInfo, + RelativeSizeAxes = Axes.Both + }) + { + RelativeSizeAxes = Axes.Both + }, + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = Color4.Black, + Alpha = 0.4f + }, + new FillFlowContainer + { + RelativeSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Padding = new MarginPadding + { + Left = 10f, + Top = 5f + }, + Children = new Drawable[] + { + new TruncatingSpriteText + { + Text = beatmapSetInfo.Title, + Font = OsuFont.GetFont(weight: FontWeight.SemiBold, size: 17, italics: true), + RelativeSizeAxes = Axes.X, + }, + new TruncatingSpriteText + { + Text = beatmapSetInfo.Artist, + Font = OsuFont.GetFont(weight: FontWeight.SemiBold, size: 12, italics: true), + RelativeSizeAxes = Axes.X, + } + } + }, + new DownloadButton + { + Anchor = Anchor.BottomCentre, + Origin = Anchor.BottomCentre, + Width = 50, + Height = 30, + Margin = new MarginPadding + { + Bottom = 1f + }, + Action = () => beatmapDownloader.Download(beatmapSetInfo), + State = { BindTarget = downloadTracker.State } + } + } + }; + + if (autodownloadConfig.Value) + beatmapDownloader.Download(beatmapSetInfo); + } + + private void downloadStatusChanged(ValueChangedEvent status) + { + if (status.NewValue != DownloadState.LocallyAvailable) + return; + + var importTask = new ImportTask(scoreStream, "score.osr"); + scoreManager.Import(this, new[] { importTask }); + } + } +} diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 5d130af6d4..c60bff9e4c 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -854,8 +854,6 @@ namespace osu.Game MultiplayerClient.PostNotification = n => Notifications.Post(n); - ScoreManager.Performer = this; - // make config aware of how to lookup skins for on-screen display purposes. // if this becomes a more common thing, tracked settings should be reconsidered to allow local DI. LocalConfig.LookupSkinName = id => SkinManager.Query(s => s.ID == id)?.ToString() ?? "Unknown"; diff --git a/osu.Game/Scoring/ScoreImporter.cs b/osu.Game/Scoring/ScoreImporter.cs index 5c354ac3d1..e3fce4a82a 100644 --- a/osu.Game/Scoring/ScoreImporter.cs +++ b/osu.Game/Scoring/ScoreImporter.cs @@ -10,7 +10,6 @@ using System.Threading; using Newtonsoft.Json; using osu.Framework.Logging; using osu.Framework.Platform; -using osu.Framework.Screens; using osu.Game.Beatmaps; using osu.Game.Database; using osu.Game.IO.Archives; @@ -21,8 +20,6 @@ using osu.Game.Online.API.Requests; using osu.Game.Online.API.Requests.Responses; using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Scoring; -using osu.Game.Screens; -using osu.Game.Screens.Import; using Realms; namespace osu.Game.Scoring @@ -31,8 +28,6 @@ namespace osu.Game.Scoring { public override IEnumerable HandledExtensions => new[] { ".osr" }; - public IPerformFromScreenRunner? Performer { get; set; } - protected override string[] HashableFileTypes => new[] { ".osr" }; private readonly RulesetStore rulesets; @@ -69,9 +64,6 @@ namespace osu.Game.Scoring private void onMissingBeatmap(LegacyScoreDecoder.BeatmapNotFoundException e, ArchiveReader archive, string name) { - if (Performer == null) - return; - var stream = new MemoryStream(); // stream will close after exception throw, so fetch the stream again. @@ -87,7 +79,7 @@ namespace osu.Game.Scoring req.Success += res => { - Performer.PerformFromScreen(screen => screen.Push(new ReplayMissingBeatmapScreen(res, stream))); + PostNotification?.Invoke(new MissingBeatmapNotification(res, stream)); }; api.Queue(req); diff --git a/osu.Game/Scoring/ScoreManager.cs b/osu.Game/Scoring/ScoreManager.cs index 9331168ab0..31b5bd8365 100644 --- a/osu.Game/Scoring/ScoreManager.cs +++ b/osu.Game/Scoring/ScoreManager.cs @@ -21,7 +21,6 @@ using osu.Game.Rulesets; using osu.Game.Rulesets.Scoring; using osu.Game.Online.API; using osu.Game.Scoring.Legacy; -using osu.Game.Screens; namespace osu.Game.Scoring { @@ -31,12 +30,6 @@ namespace osu.Game.Scoring private readonly ScoreImporter scoreImporter; private readonly LegacyScoreExporter scoreExporter; - [CanBeNull] - public IPerformFromScreenRunner Performer - { - set => scoreImporter.Performer = value; - } - public override bool PauseImports { get => base.PauseImports; diff --git a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs b/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs deleted file mode 100644 index 614d652f47..0000000000 --- a/osu.Game/Screens/Import/ReplayMissingBeatmapScreen.cs +++ /dev/null @@ -1,199 +0,0 @@ -// 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.Collections.Generic; -using System.IO; -using System.Linq; -using osu.Framework.Allocation; -using osu.Framework.Extensions; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Shapes; -using osu.Game.Audio; -using osu.Game.Beatmaps; -using osu.Game.Beatmaps.Drawables.Cards; -using osu.Game.Configuration; -using osu.Game.Database; -using osu.Game.Graphics; -using osu.Game.Graphics.Sprites; -using osu.Game.Online.API.Requests.Responses; -using osu.Game.Overlays; -using osu.Game.Overlays.Settings; -using osu.Game.Scoring; -using osu.Game.Screens.Ranking; -using osuTK; -using Realms; - -namespace osu.Game.Screens.Import -{ - [Cached(typeof(IPreviewTrackOwner))] - public partial class ReplayMissingBeatmapScreen : OsuScreen, IPreviewTrackOwner - { - [Resolved] - private BeatmapModelDownloader beatmapDownloader { get; set; } = null!; - - [Resolved] - private ScoreManager scoreManager { get; set; } = null!; - - [Resolved] - private RealmAccess realm { get; set; } = null!; - - private IDisposable? realmSubscription; - - [Cached] - private OverlayColourProvider colourProvider = new OverlayColourProvider(OverlayColourScheme.Purple); - - [Resolved] - private INotificationOverlay? notificationOverlay { get; set; } - - private Container beatmapPanelContainer = null!; - private ReplayDownloadButton replayDownloadButton = null!; - private SettingsCheckbox automaticDownload = null!; - - private readonly MemoryStream scoreStream; - - private readonly APIBeatmapSet beatmapSetInfo; - - public ReplayMissingBeatmapScreen(APIBeatmap beatmap, MemoryStream scoreStream) - { - beatmapSetInfo = beatmap.BeatmapSet!; - - this.scoreStream = scoreStream; - } - - [BackgroundDependencyLoader] - private void load(OsuColour colours, OsuConfigManager config) - { - InternalChildren = new Drawable[] - { - new Container - { - Masking = true, - CornerRadius = 20, - AutoSizeAxes = Axes.Both, - AutoSizeDuration = 500, - AutoSizeEasing = Easing.OutQuint, - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Children = new Drawable[] - { - new Box - { - Colour = colours.Gray5, - RelativeSizeAxes = Axes.Both, - }, - new FillFlowContainer - { - Margin = new MarginPadding(20), - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Vertical, - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Spacing = new Vector2(15), - Children = new Drawable[] - { - new OsuSpriteText - { - Text = "Beatmap info", - Font = OsuFont.Default.With(size: 30), - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - }, - new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Horizontal, - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Spacing = new Vector2(15), - Children = new Drawable[] - { - beatmapPanelContainer = new Container - { - AutoSizeAxes = Axes.Both, - Anchor = Anchor.CentreLeft, - Origin = Anchor.CentreLeft, - }, - } - }, - automaticDownload = new SettingsCheckbox - { - LabelText = "Automatically download beatmaps", - Current = config.GetBindable(OsuSetting.AutomaticallyDownloadWhenSpectating), - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - }, - replayDownloadButton = new ReplayDownloadButton(new ScoreInfo()) - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - }, - } - } - } - }, - }; - } - - protected override void LoadComplete() - { - base.LoadComplete(); - - updateStatus(); - realmSubscription = realm.RegisterForNotifications( - realm => realm.All().Where(s => !s.DeletePending), beatmapsChanged); - } - - private void updateStatus() - { - beatmapPanelContainer.Clear(); - beatmapPanelContainer.Child = new BeatmapCardNormal(beatmapSetInfo, allowExpansion: false); - checkForAutomaticDownload(beatmapSetInfo); - } - - private void checkForAutomaticDownload(APIBeatmapSet beatmap) - { - if (!automaticDownload.Current.Value) - return; - - beatmapDownloader.Download(beatmap); - } - - private void beatmapsChanged(IRealmCollection sender, ChangeSet? changes) - { - if (changes?.InsertedIndices == null) return; - - if (!scoreStream.CanRead) return; - - if (sender.Any(b => b.OnlineID == beatmapSetInfo.OnlineID)) - { - var progressNotification = new ImportProgressNotification(); - var importTask = new ImportTask(scoreStream, "score.osr"); - scoreManager.Import(progressNotification, new[] { importTask }) - .ContinueWith(s => - { - s.GetResultSafely>>().FirstOrDefault()?.PerformRead(score => - { - Guid scoreid = score.ID; - Scheduler.Add(() => - { - replayDownloadButton.Score.Value = realm.Realm.Find(scoreid) ?? new ScoreInfo(); - }); - }); - }); - - notificationOverlay?.Post(progressNotification); - - realmSubscription?.Dispose(); - } - } - - protected override void Dispose(bool isDisposing) - { - base.Dispose(isDisposing); - - realmSubscription?.Dispose(); - } - } -} From 5abf271b56e24adeecffbcb60ca3edd8c62e667c Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Sun, 3 Sep 2023 21:49:29 -0700 Subject: [PATCH 148/729] Implement beatmap options popover --- .../SongSelect/TestSceneSongSelectFooterV2.cs | 7 +- .../Select/FooterV2/BeatmapOptionsPopover.cs | 148 ++++++++++++++++++ .../Select/FooterV2/FooterButtonOptionsV2.cs | 37 ++++- osu.Game/Screens/Select/FooterV2/FooterV2.cs | 10 +- osu.Game/Screens/Select/SongSelect.cs | 18 +-- 5 files changed, 205 insertions(+), 15 deletions(-) create mode 100644 osu.Game/Screens/Select/FooterV2/BeatmapOptionsPopover.cs diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneSongSelectFooterV2.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneSongSelectFooterV2.cs index 72adbfc104..ed2ae67ae5 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneSongSelectFooterV2.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneSongSelectFooterV2.cs @@ -6,6 +6,7 @@ using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Cursor; using osu.Framework.Testing; using osu.Game.Overlays; using osu.Game.Overlays.Mods; @@ -37,10 +38,10 @@ namespace osu.Game.Tests.Visual.SongSelect Children = new Drawable[] { - footer = new FooterV2 + new PopoverContainer { - Anchor = Anchor.Centre, - Origin = Anchor.Centre + RelativeSizeAxes = Axes.Both, + Child = footer = new FooterV2(), }, overlay = new DummyOverlay() }; diff --git a/osu.Game/Screens/Select/FooterV2/BeatmapOptionsPopover.cs b/osu.Game/Screens/Select/FooterV2/BeatmapOptionsPopover.cs new file mode 100644 index 0000000000..ec35c6ff38 --- /dev/null +++ b/osu.Game/Screens/Select/FooterV2/BeatmapOptionsPopover.cs @@ -0,0 +1,148 @@ +// 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.Bindables; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Sprites; +using osu.Framework.Input.Events; +using osu.Framework.Localisation; +using osu.Game.Collections; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Graphics.UserInterface; +using osu.Game.Graphics.UserInterfaceV2; +using osu.Game.Overlays; +using osuTK; +using osuTK.Graphics; +using osuTK.Input; + +namespace osu.Game.Screens.Select.FooterV2 +{ + public partial class BeatmapOptionsPopover : OsuPopover + { + private FillFlowContainer buttonFlow = null!; + private readonly FooterButtonOptionsV2 footerButton; + + public BeatmapOptionsPopover(FooterButtonOptionsV2 footerButton) + { + this.footerButton = footerButton; + } + + [BackgroundDependencyLoader] + private void load(ManageCollectionsDialog? manageCollectionsDialog, SongSelect? songSelect, OsuColour colours) + { + Content.Padding = new MarginPadding(5); + + Child = buttonFlow = new FillFlowContainer + { + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Spacing = new Vector2(3), + }; + + addButton(@"Manage collections", FontAwesome.Solid.Book, () => manageCollectionsDialog?.Show()); + addButton(@"Delete all difficulties", FontAwesome.Solid.Trash, () => songSelect?.DeleteBeatmap(), colours.Red); + addButton(@"Remove from unplayed", FontAwesome.Regular.TimesCircle, null); + addButton(@"Clear local scores", FontAwesome.Solid.Eraser, () => songSelect?.ClearScores()); + + if (songSelect != null && songSelect.AllowEditing) + addButton(@"Edit beatmap", FontAwesome.Solid.PencilAlt, () => songSelect.Edit()); + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + ScheduleAfterChildren(() => GetContainingInputManager().ChangeFocus(this)); + } + + private void addButton(LocalisableString text, IconUsage icon, Action? action, Color4? colour = null) + { + var button = new OptionButton + { + Text = text, + Icon = icon, + TextColour = colour, + Action = () => + { + Hide(); + action?.Invoke(); + }, + }; + + buttonFlow.Add(button); + } + + private partial class OptionButton : OsuButton + { + public IconUsage Icon { get; init; } + public Color4? TextColour { get; init; } + + public OptionButton() + { + Size = new Vector2(265, 50); + } + + [BackgroundDependencyLoader] + private void load(OverlayColourProvider colourProvider) + { + BackgroundColour = colourProvider.Background3; + + SpriteText.Colour = TextColour ?? Color4.White; + Content.CornerRadius = 10; + + Add(new SpriteIcon + { + Blending = BlendingParameters.Additive, + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft, + Size = new Vector2(17), + X = 15, + Icon = Icon, + Colour = TextColour ?? Color4.White, + }); + } + + protected override SpriteText CreateText() => new OsuSpriteText + { + Depth = -1, + Origin = Anchor.CentreLeft, + Anchor = Anchor.CentreLeft, + X = 40 + }; + } + + protected override bool OnKeyDown(KeyDownEvent e) + { + // don't absorb control as ToolbarRulesetSelector uses control + number to navigate + if (e.ControlPressed) return false; + + if (!e.Repeat && e.Key >= Key.Number1 && e.Key <= Key.Number9) + { + int requested = e.Key - Key.Number1; + + OptionButton? found = buttonFlow.Children.ElementAtOrDefault(requested); + + if (found != null) + { + found.TriggerClick(); + return true; + } + } + + return base.OnKeyDown(e); + } + + protected override void UpdateState(ValueChangedEvent state) + { + base.UpdateState(state); + + if (state.NewValue == Visibility.Hidden) + footerButton.IsActive.Value = false; + } + } +} diff --git a/osu.Game/Screens/Select/FooterV2/FooterButtonOptionsV2.cs b/osu.Game/Screens/Select/FooterV2/FooterButtonOptionsV2.cs index 87cca0042a..a1559d32dc 100644 --- a/osu.Game/Screens/Select/FooterV2/FooterButtonOptionsV2.cs +++ b/osu.Game/Screens/Select/FooterV2/FooterButtonOptionsV2.cs @@ -2,14 +2,21 @@ // See the LICENCE file in the repository root for full licence text. using osu.Framework.Allocation; +using osu.Framework.Bindables; +using osu.Framework.Extensions; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Cursor; using osu.Framework.Graphics.Sprites; +using osu.Framework.Graphics.UserInterface; using osu.Game.Graphics; using osu.Game.Input.Bindings; namespace osu.Game.Screens.Select.FooterV2 { - public partial class FooterButtonOptionsV2 : FooterButtonV2 + public partial class FooterButtonOptionsV2 : FooterButtonV2, IHasPopover { + public readonly BindableBool IsActive = new BindableBool(); + [BackgroundDependencyLoader] private void load(OsuColour colour) { @@ -17,6 +24,34 @@ namespace osu.Game.Screens.Select.FooterV2 Icon = FontAwesome.Solid.Cog; AccentColour = colour.Purple1; Hotkey = GlobalAction.ToggleBeatmapOptions; + + Action = () => IsActive.Toggle(); } + + protected override void LoadComplete() + { + base.LoadComplete(); + + IsActive.BindValueChanged(active => + { + OverlayState.Value = active.NewValue ? Visibility.Visible : Visibility.Hidden; + }); + + OverlayState.BindValueChanged(state => + { + switch (state.NewValue) + { + case Visibility.Hidden: + this.HidePopover(); + break; + + case Visibility.Visible: + this.ShowPopover(); + break; + } + }); + } + + public Popover GetPopover() => new BeatmapOptionsPopover(this); } } diff --git a/osu.Game/Screens/Select/FooterV2/FooterV2.cs b/osu.Game/Screens/Select/FooterV2/FooterV2.cs index cd95f3eb6c..0529f0d082 100644 --- a/osu.Game/Screens/Select/FooterV2/FooterV2.cs +++ b/osu.Game/Screens/Select/FooterV2/FooterV2.cs @@ -48,11 +48,17 @@ namespace osu.Game.Screens.Select.FooterV2 private FillFlowContainer buttons = null!; - [BackgroundDependencyLoader] - private void load(OverlayColourProvider colourProvider) + public FooterV2() { RelativeSizeAxes = Axes.X; Height = height; + Anchor = Anchor.BottomLeft; + Origin = Anchor.BottomLeft; + } + + [BackgroundDependencyLoader] + private void load(OverlayColourProvider colourProvider) + { InternalChildren = new Drawable[] { new Box diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 58755878d0..4ce7a6167e 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -311,9 +311,9 @@ namespace osu.Game.Screens.Select Footer.AddButton(button, overlay); BeatmapOptions.AddButton(@"Manage", @"collections", FontAwesome.Solid.Book, colours.Green, () => manageCollectionsDialog?.Show()); - BeatmapOptions.AddButton(@"Delete", @"all difficulties", FontAwesome.Solid.Trash, colours.Pink, () => delete(Beatmap.Value.BeatmapSetInfo)); + BeatmapOptions.AddButton(@"Delete", @"all difficulties", FontAwesome.Solid.Trash, colours.Pink, DeleteBeatmap); BeatmapOptions.AddButton(@"Remove", @"from unplayed", FontAwesome.Regular.TimesCircle, colours.Purple, null); - BeatmapOptions.AddButton(@"Clear", @"local scores", FontAwesome.Solid.Eraser, colours.Purple, () => clearScores(Beatmap.Value.BeatmapInfo)); + BeatmapOptions.AddButton(@"Clear", @"local scores", FontAwesome.Solid.Eraser, colours.Purple, ClearScores); } sampleChangeDifficulty = audio.Samples.Get(@"SongSelect/select-difficulty"); @@ -916,18 +916,18 @@ namespace osu.Game.Screens.Select return true; } - private void delete(BeatmapSetInfo? beatmap) + public void DeleteBeatmap() { - if (beatmap == null) return; + if (Beatmap.Value.BeatmapSetInfo == null) return; - dialogOverlay?.Push(new BeatmapDeleteDialog(beatmap)); + dialogOverlay?.Push(new BeatmapDeleteDialog(Beatmap.Value.BeatmapSetInfo)); } - private void clearScores(BeatmapInfo? beatmapInfo) + public void ClearScores() { - if (beatmapInfo == null) return; + if (Beatmap.Value.BeatmapInfo == null) return; - dialogOverlay?.Push(new BeatmapClearScoresDialog(beatmapInfo, () => + dialogOverlay?.Push(new BeatmapClearScoresDialog(Beatmap.Value.BeatmapInfo, () => // schedule done here rather than inside the dialog as the dialog may fade out and never callback. Schedule(() => BeatmapDetails.Refresh()))); } @@ -963,7 +963,7 @@ namespace osu.Game.Screens.Select if (e.ShiftPressed) { if (!Beatmap.IsDefault) - delete(Beatmap.Value.BeatmapSetInfo); + DeleteBeatmap(); return true; } From 6c0bd13308589a8efcc2ba83738bc6ed0c2c6ca9 Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 4 Sep 2023 00:21:48 -0700 Subject: [PATCH 149/729] Add xmldoc to newly exposed methods --- osu.Game/Screens/Select/SongSelect.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 4ce7a6167e..f6fc55b2a5 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -916,6 +916,9 @@ namespace osu.Game.Screens.Select return true; } + /// + /// Request to delete the current beatmap. + /// public void DeleteBeatmap() { if (Beatmap.Value.BeatmapSetInfo == null) return; @@ -923,6 +926,9 @@ namespace osu.Game.Screens.Select dialogOverlay?.Push(new BeatmapDeleteDialog(Beatmap.Value.BeatmapSetInfo)); } + /// + /// Request to clear the scores of the current beatmap. + /// public void ClearScores() { if (Beatmap.Value.BeatmapInfo == null) return; From 3decadaf519c26a6c4b941d065d41ce441589821 Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Mon, 4 Sep 2023 16:18:14 +0900 Subject: [PATCH 150/729] use realm query --- osu.Game/Beatmaps/BeatmapManager.cs | 3 ++- osu.Game/Beatmaps/WorkingBeatmapCache.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index d71d7b7f67..1f551f1218 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -26,6 +26,7 @@ using osu.Game.Overlays.Notifications; using osu.Game.Rulesets; using osu.Game.Skinning; using osu.Game.Utils; +using Realms; namespace osu.Game.Beatmaps { @@ -284,7 +285,7 @@ namespace osu.Game.Beatmaps /// /// The query. /// The first result for the provided query, or null if no results were found. - public BeatmapInfo? QueryBeatmap(Expression> query) => Realm.Run(r => r.All().FirstOrDefault(query)?.Detach()); + public BeatmapInfo? QueryBeatmap(Expression> query) => Realm.Run(r => r.All().Filter($"{nameof(BeatmapInfo.BeatmapSet)}.{nameof(BeatmapSetInfo.DeletePending)} == false").FirstOrDefault(query)?.Detach()); /// /// A default representation of a WorkingBeatmap to use when no beatmap is available. diff --git a/osu.Game/Beatmaps/WorkingBeatmapCache.cs b/osu.Game/Beatmaps/WorkingBeatmapCache.cs index c06f4da4ae..78eed626f2 100644 --- a/osu.Game/Beatmaps/WorkingBeatmapCache.cs +++ b/osu.Game/Beatmaps/WorkingBeatmapCache.cs @@ -88,7 +88,7 @@ namespace osu.Game.Beatmaps public virtual WorkingBeatmap GetWorkingBeatmap(BeatmapInfo beatmapInfo) { - if (beatmapInfo?.BeatmapSet == null || beatmapInfo.BeatmapSet?.DeletePending == true) + if (beatmapInfo?.BeatmapSet == null) return DefaultBeatmap; lock (workingCache) From 164f61f59034f2d713cdb4676f7327a4f41b512f Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Mon, 4 Sep 2023 17:14:04 +0900 Subject: [PATCH 151/729] clean up --- .../Database/MissingBeatmapNotification.cs | 53 +++++++------------ 1 file changed, 19 insertions(+), 34 deletions(-) diff --git a/osu.Game/Database/MissingBeatmapNotification.cs b/osu.Game/Database/MissingBeatmapNotification.cs index 2587160a57..7a39c6307b 100644 --- a/osu.Game/Database/MissingBeatmapNotification.cs +++ b/osu.Game/Database/MissingBeatmapNotification.cs @@ -7,6 +7,7 @@ using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; +using osu.Framework.Graphics.UserInterface; using osu.Game.Beatmaps; using osu.Game.Beatmaps.Drawables; using osu.Game.Configuration; @@ -30,21 +31,12 @@ namespace osu.Game.Database [Resolved] private ScoreManager scoreManager { get; set; } = null!; - [Cached] - private OverlayColourProvider colourProvider = new OverlayColourProvider(OverlayColourScheme.Purple); - - [Resolved] - private BeatmapSetOverlay? beatmapSetOverlay { get; set; } - - private Container beatmapPanelContainer = null!; - private readonly MemoryStream scoreStream; private readonly APIBeatmapSet beatmapSetInfo; - private BeatmapDownloadTracker? downloadTracker; - private Bindable autodownloadConfig = null!; + private Bindable noVideoSetting = null!; public MissingBeatmapNotification(APIBeatmap beatmap, MemoryStream scoreStream) { @@ -54,35 +46,25 @@ namespace osu.Game.Database } [BackgroundDependencyLoader] - private void load(OsuColour colours, OsuConfigManager config) + private void load(OsuConfigManager config, BeatmapSetOverlay? beatmapSetOverlay) { + BeatmapDownloadTracker downloadTracker = new BeatmapDownloadTracker(beatmapSetInfo); + downloadTracker.State.BindValueChanged(downloadStatusChanged); + autodownloadConfig = config.GetBindable(OsuSetting.AutomaticallyDownloadWhenSpectating); + noVideoSetting = config.GetBindable(OsuSetting.PreferNoVideo); Text = "You do not have the required beatmap for this replay"; - Content.Add(beatmapPanelContainer = new ClickableContainer + Content.Add(new ClickableContainer { RelativeSizeAxes = Axes.X, Height = 70, Anchor = Anchor.CentreLeft, Origin = Anchor.TopLeft, - Action = () => beatmapSetOverlay?.FetchAndShowBeatmapSet(beatmapSetInfo.OnlineID) - }); - } - - protected override void LoadComplete() - { - base.LoadComplete(); - - downloadTracker = new BeatmapDownloadTracker(beatmapSetInfo); - downloadTracker.State.BindValueChanged(downloadStatusChanged, true); - - beatmapPanelContainer.Clear(); - beatmapPanelContainer.Child = new Container - { - RelativeSizeAxes = Axes.Both, - Masking = true, CornerRadius = 4, + Masking = true, + Action = () => beatmapSetOverlay?.FetchAndShowBeatmapSet(beatmapSetInfo.OnlineID), Children = new Drawable[] { downloadTracker, @@ -125,7 +107,7 @@ namespace osu.Game.Database } } }, - new DownloadButton + new BeatmapDownloadButton(beatmapSetInfo) { Anchor = Anchor.BottomCentre, Origin = Anchor.BottomCentre, @@ -134,15 +116,18 @@ namespace osu.Game.Database Margin = new MarginPadding { Bottom = 1f - }, - Action = () => beatmapDownloader.Download(beatmapSetInfo), - State = { BindTarget = downloadTracker.State } + } } } - }; + }); + } + + protected override void LoadComplete() + { + base.LoadComplete(); if (autodownloadConfig.Value) - beatmapDownloader.Download(beatmapSetInfo); + beatmapDownloader.Download(beatmapSetInfo, noVideoSetting.Value); } private void downloadStatusChanged(ValueChangedEvent status) From f68a12003a6df0dc32d9eefc391ec5228d1e9ddf Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Mon, 4 Sep 2023 17:37:31 +0900 Subject: [PATCH 152/729] check beatmap hash before try to import --- .../Database/MissingBeatmapNotification.cs | 33 ++++++++++++++----- osu.Game/Scoring/ScoreImporter.cs | 2 +- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/osu.Game/Database/MissingBeatmapNotification.cs b/osu.Game/Database/MissingBeatmapNotification.cs index 7a39c6307b..92b33e20be 100644 --- a/osu.Game/Database/MissingBeatmapNotification.cs +++ b/osu.Game/Database/MissingBeatmapNotification.cs @@ -2,18 +2,17 @@ // See the LICENCE file in the repository root for full licence text. using System.IO; +using System.Linq; using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; -using osu.Framework.Graphics.UserInterface; using osu.Game.Beatmaps; using osu.Game.Beatmaps.Drawables; using osu.Game.Configuration; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; -using osu.Game.Graphics.UserInterface; using osu.Game.Online; using osu.Game.Online.API.Requests.Responses; using osu.Game.Overlays; @@ -31,31 +30,43 @@ namespace osu.Game.Database [Resolved] private ScoreManager scoreManager { get; set; } = null!; - private readonly MemoryStream scoreStream; + [Resolved] + private RealmAccess realm { get; set; } = null!; + private readonly MemoryStream scoreStream; private readonly APIBeatmapSet beatmapSetInfo; + private readonly string beatmapHash; private Bindable autodownloadConfig = null!; private Bindable noVideoSetting = null!; - public MissingBeatmapNotification(APIBeatmap beatmap, MemoryStream scoreStream) + public MissingBeatmapNotification(APIBeatmap beatmap, MemoryStream scoreStream, string beatmapHash) { beatmapSetInfo = beatmap.BeatmapSet!; + this.beatmapHash = beatmapHash; this.scoreStream = scoreStream; } [BackgroundDependencyLoader] private void load(OsuConfigManager config, BeatmapSetOverlay? beatmapSetOverlay) { + Text = "You do not have the required beatmap for this replay"; + + realm.Run(r => + { + if (r.All().Any(s => s.OnlineID == beatmapSetInfo.OnlineID)) + { + Text = "You have the corresponding beatmapset but no beatmap, you may need to update the beatmap."; + } + }); + BeatmapDownloadTracker downloadTracker = new BeatmapDownloadTracker(beatmapSetInfo); downloadTracker.State.BindValueChanged(downloadStatusChanged); autodownloadConfig = config.GetBindable(OsuSetting.AutomaticallyDownloadWhenSpectating); noVideoSetting = config.GetBindable(OsuSetting.PreferNoVideo); - Text = "You do not have the required beatmap for this replay"; - Content.Add(new ClickableContainer { RelativeSizeAxes = Axes.X, @@ -135,8 +146,14 @@ namespace osu.Game.Database if (status.NewValue != DownloadState.LocallyAvailable) return; - var importTask = new ImportTask(scoreStream, "score.osr"); - scoreManager.Import(this, new[] { importTask }); + realm.Run(r => + { + if (r.All().Any(s => s.MD5Hash == beatmapHash)) + { + var importTask = new ImportTask(scoreStream, "score.osr"); + scoreManager.Import(this, new[] { importTask }); + } + }); } } } diff --git a/osu.Game/Scoring/ScoreImporter.cs b/osu.Game/Scoring/ScoreImporter.cs index e3fce4a82a..650e25a512 100644 --- a/osu.Game/Scoring/ScoreImporter.cs +++ b/osu.Game/Scoring/ScoreImporter.cs @@ -79,7 +79,7 @@ namespace osu.Game.Scoring req.Success += res => { - PostNotification?.Invoke(new MissingBeatmapNotification(res, stream)); + PostNotification?.Invoke(new MissingBeatmapNotification(res, stream, e.Hash)); }; api.Queue(req); From 87aa191c121214c18e0a4270e7f20f856da40ab2 Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Mon, 4 Sep 2023 17:53:12 +0900 Subject: [PATCH 153/729] use realm Subscription instead of Beatmap Download Tracker --- .../Database/MissingBeatmapNotification.cs | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/osu.Game/Database/MissingBeatmapNotification.cs b/osu.Game/Database/MissingBeatmapNotification.cs index 92b33e20be..86522d0864 100644 --- a/osu.Game/Database/MissingBeatmapNotification.cs +++ b/osu.Game/Database/MissingBeatmapNotification.cs @@ -1,6 +1,7 @@ // 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.IO; using System.Linq; using osu.Framework.Allocation; @@ -13,12 +14,12 @@ using osu.Game.Beatmaps.Drawables; using osu.Game.Configuration; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; -using osu.Game.Online; using osu.Game.Online.API.Requests.Responses; using osu.Game.Overlays; using osu.Game.Overlays.Notifications; using osu.Game.Scoring; using osuTK.Graphics; +using Realms; namespace osu.Game.Database { @@ -40,6 +41,8 @@ namespace osu.Game.Database private Bindable autodownloadConfig = null!; private Bindable noVideoSetting = null!; + private IDisposable? realmSubscription; + public MissingBeatmapNotification(APIBeatmap beatmap, MemoryStream scoreStream, string beatmapHash) { beatmapSetInfo = beatmap.BeatmapSet!; @@ -53,17 +56,17 @@ namespace osu.Game.Database { Text = "You do not have the required beatmap for this replay"; + realmSubscription = realm.RegisterForNotifications( + realm => realm.All().Where(s => !s.DeletePending), beatmapsChanged); + realm.Run(r => { - if (r.All().Any(s => s.OnlineID == beatmapSetInfo.OnlineID)) + if (r.All().Any(s => !s.DeletePending && s.OnlineID == beatmapSetInfo.OnlineID)) { - Text = "You have the corresponding beatmapset but no beatmap, you may need to update the beatmap."; + Text = "You have the corresponding beatmapset but no beatmap, you may need to update the beatmapset."; } }); - BeatmapDownloadTracker downloadTracker = new BeatmapDownloadTracker(beatmapSetInfo); - downloadTracker.State.BindValueChanged(downloadStatusChanged); - autodownloadConfig = config.GetBindable(OsuSetting.AutomaticallyDownloadWhenSpectating); noVideoSetting = config.GetBindable(OsuSetting.PreferNoVideo); @@ -78,7 +81,6 @@ namespace osu.Game.Database Action = () => beatmapSetOverlay?.FetchAndShowBeatmapSet(beatmapSetInfo.OnlineID), Children = new Drawable[] { - downloadTracker, new DelayedLoadWrapper(() => new UpdateableOnlineBeatmapSetCover(BeatmapSetCoverType.Card) { OnlineInfo = beatmapSetInfo, @@ -141,19 +143,16 @@ namespace osu.Game.Database beatmapDownloader.Download(beatmapSetInfo, noVideoSetting.Value); } - private void downloadStatusChanged(ValueChangedEvent status) + private void beatmapsChanged(IRealmCollection sender, ChangeSet? changes) { - if (status.NewValue != DownloadState.LocallyAvailable) - return; + if (changes?.InsertedIndices == null) return; - realm.Run(r => + if (sender.Any(s => s.Beatmaps.Any(b => b.MD5Hash == beatmapHash))) { - if (r.All().Any(s => s.MD5Hash == beatmapHash)) - { - var importTask = new ImportTask(scoreStream, "score.osr"); - scoreManager.Import(this, new[] { importTask }); - } - }); + var importTask = new ImportTask(scoreStream, "score.osr"); + scoreManager.Import(this, new[] { importTask }); + realmSubscription?.Dispose(); + } } } } From fd1fce486a18c6b12859b3fa197c707bac583751 Mon Sep 17 00:00:00 2001 From: cdwcgt Date: Tue, 5 Sep 2023 00:21:08 +0900 Subject: [PATCH 154/729] ensure dispose realmSubscription --- osu.Game/Database/MissingBeatmapNotification.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/osu.Game/Database/MissingBeatmapNotification.cs b/osu.Game/Database/MissingBeatmapNotification.cs index 86522d0864..d6674b9434 100644 --- a/osu.Game/Database/MissingBeatmapNotification.cs +++ b/osu.Game/Database/MissingBeatmapNotification.cs @@ -154,5 +154,11 @@ namespace osu.Game.Database realmSubscription?.Dispose(); } } + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + realmSubscription?.Dispose(); + } } } From f616648730ac9fd438cc2d15aeb7eb065f875cae Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 4 Sep 2023 09:40:35 -0700 Subject: [PATCH 155/729] Remove icon blending --- osu.Game/Screens/Select/FooterV2/BeatmapOptionsPopover.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/Screens/Select/FooterV2/BeatmapOptionsPopover.cs b/osu.Game/Screens/Select/FooterV2/BeatmapOptionsPopover.cs index ec35c6ff38..4e1334fd11 100644 --- a/osu.Game/Screens/Select/FooterV2/BeatmapOptionsPopover.cs +++ b/osu.Game/Screens/Select/FooterV2/BeatmapOptionsPopover.cs @@ -97,7 +97,6 @@ namespace osu.Game.Screens.Select.FooterV2 Add(new SpriteIcon { - Blending = BlendingParameters.Additive, Anchor = Anchor.CentreLeft, Origin = Anchor.CentreLeft, Size = new Vector2(17), From bf71099e5743efb966482d5b145a551b0208729f Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 4 Sep 2023 11:34:21 -0700 Subject: [PATCH 156/729] Fix truncating sprite text usage --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index b7b60cffab..7821aa5be0 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -280,15 +280,14 @@ namespace osu.Game.Screens.Select RelativeSizeAxes = Axes.X, Children = new Drawable[] { - TitleLabel = new OsuSpriteText + TitleLabel = new TruncatingSpriteText { Shadow = true, Current = { BindTarget = titleBinding }, Font = OsuFont.TorusAlternate.With(size: 40, weight: FontWeight.SemiBold), RelativeSizeAxes = Axes.X, - Truncate = true }, - ArtistLabel = new OsuSpriteText + ArtistLabel = new TruncatingSpriteText { // TODO : figma design has a diffused shadow, instead of the solid one present here, not possible currently as far as i'm aware. Shadow = true, @@ -296,7 +295,6 @@ namespace osu.Game.Screens.Select // Not sure if this should be semi bold or medium Font = OsuFont.Torus.With(size: 20, weight: FontWeight.SemiBold), RelativeSizeAxes = Axes.X, - Truncate = true } } } From e8a793425bf28e19ba3667c8c712c4db96fc09fa Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 4 Sep 2023 12:38:40 -0700 Subject: [PATCH 157/729] Use right padding instead of negative x offset --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 7821aa5be0..284f14cd9e 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -155,18 +155,21 @@ namespace osu.Game.Screens.Select LoadComponentAsync(loadingInfo = new Container { - Masking = true, - // We offset this by the portion of the colour bar underneath we wish to show - X = -colour_bar_width, - CornerRadius = corner_radius, + Padding = new MarginPadding { Right = colour_bar_width }, RelativeSizeAxes = Axes.Both, Depth = DisplayedContent?.Depth + 1 ?? 0, - Children = new Drawable[] + Child = new Container { - // TODO: New wedge design uses a coloured horizontal gradient for its background, however this lacks implementation information in the figma draft. - // pending https://www.figma.com/file/DXKwqZhD5yyb1igc3mKo1P?node-id=2980:3361#340801912 being answered. - new BeatmapInfoWedgeBackground(beatmap) { Shear = -Shear }, - Info = new WedgeInfoText(beatmap) { Shear = -Shear } + Masking = true, + CornerRadius = corner_radius, + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] + { + // TODO: New wedge design uses a coloured horizontal gradient for its background, however this lacks implementation information in the figma draft. + // pending https://www.figma.com/file/DXKwqZhD5yyb1igc3mKo1P?node-id=2980:3361#340801912 being answered. + new BeatmapInfoWedgeBackground(beatmap) { Shear = -Shear }, + Info = new WedgeInfoText(beatmap) { Shear = -Shear } + } } }, loaded => { From 2df20027355ddbf24bd43401ef5feabf5a7e1823 Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 4 Sep 2023 12:42:01 -0700 Subject: [PATCH 158/729] Move negative corner radius margin to constructor --- .../SongSelect/TestSceneBeatmapInfoWedgeV2.cs | 16 ++++++++++------ osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 1 + 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs index 09b93119cc..ae5b739c4d 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs @@ -50,13 +50,17 @@ namespace osu.Game.Tests.Visual.SongSelect RelativeSizeAxes = Axes.X, Margin = new MarginPadding { Top = 20, Left = -10 } }, - infoWedge = new TestBeatmapInfoWedgeV2 + new Container { - State = { Value = Visibility.Visible }, - Width = 0.6f, - RelativeSizeAxes = Axes.X, - Margin = new MarginPadding { Top = 20, Left = -10 } - }, + RelativeSizeAxes = Axes.Both, + Padding = new MarginPadding { Top = 20 }, + Child = infoWedge = new TestBeatmapInfoWedgeV2 + { + State = { Value = Visibility.Visible }, + Width = 0.6f, + RelativeSizeAxes = Axes.X, + }, + } }); AddSliderStep("change star difficulty", 0, 11.9, 5.55, v => diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 284f14cd9e..742d9011b9 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -55,6 +55,7 @@ namespace osu.Game.Screens.Select Height = WEDGE_HEIGHT; Shear = wedged_container_shear; Masking = true; + Margin = new MarginPadding { Left = -corner_radius }; EdgeEffect = new EdgeEffectParameters { Colour = Colour4.Black.Opacity(0.2f), From e70510ef191ef345eee35b490a12118fbb29a755 Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 4 Sep 2023 12:56:20 -0700 Subject: [PATCH 159/729] Move drawable and binding logic to standard places --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 742d9011b9..de3e634819 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -46,9 +46,9 @@ namespace osu.Game.Screens.Select protected WedgeInfoText? Info { get; private set; } - private readonly Container difficultyColourBar; - private readonly StarCounter starCounter; - private readonly BufferedContainer bufferedContent; + private Container difficultyColourBar = null!; + private StarCounter starCounter = null!; + private BufferedContainer bufferedContent = null!; public BeatmapInfoWedgeV2() { @@ -63,7 +63,11 @@ namespace osu.Game.Screens.Select Radius = 3, }; CornerRadius = corner_radius; + } + [BackgroundDependencyLoader] + private void load() + { // We want to buffer the wedge to avoid weird transparency overlaps between the colour bar and the background. Child = bufferedContent = new BufferedContainer(pixelSnapping: true) { @@ -107,9 +111,10 @@ namespace osu.Game.Screens.Select }; } - [BackgroundDependencyLoader] - private void load() + protected override void LoadComplete() { + base.LoadComplete(); + ruleset.BindValueChanged(_ => updateDisplay()); } @@ -228,6 +233,8 @@ namespace osu.Game.Screens.Select public WedgeInfoText(WorkingBeatmap working) { this.working = working; + + RelativeSizeAxes = Axes.Both; } [BackgroundDependencyLoader] @@ -236,8 +243,6 @@ namespace osu.Game.Screens.Select var beatmapInfo = working.BeatmapInfo; var metadata = working.Metadata; - RelativeSizeAxes = Axes.Both; - titleBinding = localisation.GetLocalisedBindableString(new RomanisableString(metadata.TitleUnicode, metadata.Title)); artistBinding = localisation.GetLocalisedBindableString(new RomanisableString(metadata.ArtistUnicode, metadata.Artist)); From 82fb9dc2ef5eb03f2db25426f11a19f836e62f68 Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 4 Sep 2023 12:59:21 -0700 Subject: [PATCH 160/729] Simplify text initialization --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index de3e634819..fd655c50ca 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -212,9 +212,6 @@ namespace osu.Game.Screens.Select private StarRatingDisplay starRatingDisplay = null!; - private ILocalisedBindableString titleBinding = null!; - private ILocalisedBindableString artistBinding = null!; - private readonly WorkingBeatmap working; public IBindable DisplayedStars => starRatingDisplay.DisplayedStars; @@ -238,14 +235,11 @@ namespace osu.Game.Screens.Select } [BackgroundDependencyLoader] - private void load(LocalisationManager localisation) + private void load() { var beatmapInfo = working.BeatmapInfo; var metadata = working.Metadata; - titleBinding = localisation.GetLocalisedBindableString(new RomanisableString(metadata.TitleUnicode, metadata.Title)); - artistBinding = localisation.GetLocalisedBindableString(new RomanisableString(metadata.ArtistUnicode, metadata.Artist)); - Children = new Drawable[] { new FillFlowContainer @@ -292,7 +286,7 @@ namespace osu.Game.Screens.Select TitleLabel = new TruncatingSpriteText { Shadow = true, - Current = { BindTarget = titleBinding }, + Text = new RomanisableString(metadata.TitleUnicode, metadata.Title), Font = OsuFont.TorusAlternate.With(size: 40, weight: FontWeight.SemiBold), RelativeSizeAxes = Axes.X, }, @@ -300,7 +294,7 @@ namespace osu.Game.Screens.Select { // TODO : figma design has a diffused shadow, instead of the solid one present here, not possible currently as far as i'm aware. Shadow = true, - Current = { BindTarget = artistBinding }, + Text = new RomanisableString(metadata.ArtistUnicode, metadata.Artist), // Not sure if this should be semi bold or medium Font = OsuFont.Torus.With(size: 20, weight: FontWeight.SemiBold), RelativeSizeAxes = Axes.X, From e0a9c7e9a9680004b98a8086354fb758b65daa51 Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 4 Sep 2023 14:54:58 -0700 Subject: [PATCH 161/729] Fix wedge showing abruptly in test --- osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs index ae5b739c4d..3236841dc3 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs @@ -56,7 +56,6 @@ namespace osu.Game.Tests.Visual.SongSelect Padding = new MarginPadding { Top = 20 }, Child = infoWedge = new TestBeatmapInfoWedgeV2 { - State = { Value = Visibility.Visible }, Width = 0.6f, RelativeSizeAxes = Axes.X, }, @@ -165,6 +164,7 @@ namespace osu.Game.Tests.Visual.SongSelect { containerBefore = infoWedge.DisplayedContent; infoWedge.Beatmap = Beatmap.Value = b == null ? Beatmap.Default : CreateWorkingBeatmap(b); + infoWedge.Show(); }); AddUntilStep("wait for async load", () => infoWedge.DisplayedContent != containerBefore); From 854bb323cc09e0a296ebd2ca948e4a6074950044 Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 4 Sep 2023 15:02:00 -0700 Subject: [PATCH 162/729] Remove weird red edge effect visibility --- .../Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs index 3236841dc3..827d23c0fc 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs @@ -7,7 +7,6 @@ using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Effects; using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.UserInterface; using osu.Framework.Testing; @@ -94,17 +93,6 @@ namespace osu.Game.Tests.Visual.SongSelect [Test] public void TestWedgeVisibility() { - // Mostly just in case someone runs this test before others, - // leading to the shadow being very hard to see if it is black - AddStep("make shadow red for test visibility", () => - { - infoWedge.EdgeEffect = new EdgeEffectParameters - { - Colour = Colour4.Red, - Type = EdgeEffectType.Shadow, - Radius = 5, - }; - }); AddStep("hide", () => { infoWedge.Hide(); }); AddWaitStep("wait for hide", 3); AddAssert("check visibility", () => infoWedge.Alpha == 0); From 9accd0ded262e451792a10013762e442b5523441 Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 4 Sep 2023 15:02:38 -0700 Subject: [PATCH 163/729] Fix star rating rolling counter regression --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index fd655c50ca..5316b4620b 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -314,7 +314,7 @@ namespace osu.Game.Screens.Select starRatingDisplay.Current.Value = s.NewValue ?? default; // Don't roll the counter on initial display (but still allow it to roll on applying mods etc.) - if (starRatingDisplay.Alpha > 0) + if (!starRatingDisplay.IsPresent) starRatingDisplay.FinishTransforms(true); starRatingDisplay.FadeIn(transition_duration); From 98d027d207143532178e4588c279368abb391d8b Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 4 Sep 2023 21:34:53 -0700 Subject: [PATCH 164/729] Fix star counter animating weird and delayed --- osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs index 5316b4620b..de930ff837 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedgeV2.cs @@ -187,11 +187,16 @@ namespace osu.Game.Screens.Select Info.DisplayedStars.BindValueChanged(s => { - starCounter.Current = (float)s.NewValue; starCounter.Colour = s.NewValue >= 6.5 ? colours.Orange1 : Colour4.Black.Opacity(0.75f); difficultyColourBar.FadeColour(colours.ForStarDifficulty(s.NewValue)); }, true); + + Info.ActualStars.BindValueChanged(s => + { + // use actual stars as star counter has its own animation + starCounter.Current = (float)s.NewValue; + }); }); }); @@ -215,6 +220,7 @@ namespace osu.Game.Screens.Select private readonly WorkingBeatmap working; public IBindable DisplayedStars => starRatingDisplay.DisplayedStars; + public Bindable ActualStars = new Bindable(); [Resolved] private IBindable> mods { get; set; } = null!; @@ -312,6 +318,7 @@ namespace osu.Game.Screens.Select starDifficulty.BindValueChanged(s => { starRatingDisplay.Current.Value = s.NewValue ?? default; + ActualStars.Value = s.NewValue?.Stars ?? 0; // Don't roll the counter on initial display (but still allow it to roll on applying mods etc.) if (!starRatingDisplay.IsPresent) From 94516133912a4c32048dddc52c53fb9696bb0477 Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 4 Sep 2023 21:39:26 -0700 Subject: [PATCH 165/729] Rename null beatmap test to indicate there's a background --- osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs index 827d23c0fc..a8484caf1c 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapInfoWedgeV2.cs @@ -120,7 +120,7 @@ namespace osu.Game.Tests.Visual.SongSelect } [Test] - public void TestNullBeatmap() + public void TestNullBeatmapWithBackground() { selectBeatmap(null); AddAssert("check default title", () => infoWedge.Info!.TitleLabel.Current.Value == Beatmap.Default.BeatmapInfo.Metadata.Title); From 1215ad7ace400cb404121d9a8ead9ac81f2ad2a2 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 5 Sep 2023 15:40:00 +0900 Subject: [PATCH 166/729] Update framework --- osu.Android.props | 2 +- osu.Game/osu.Game.csproj | 2 +- osu.iOS.props | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Android.props b/osu.Android.props index 2d15bce85a..2bfdce5ab8 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -10,7 +10,7 @@ true - + OgN&7dK}sTL(*04__BcQcE9OD*(V}qc+dhi>N&n^lpyj43`ykWGYzhJwJ8L zqAI1|WMdHEghVN2v?_IkikBjrzW)9qGWL2R^6tu=X=6su)t<-HXBIc(-CObSymBpL zeemb$cB+RY_;>H~>*77%4WHn<+Wm_L$&R;((dgG%owF!}mFKsyr)LrU0O6P4<@ViCKg7X1_ ziH}HN$4*Vr)A7kK<7H>>fPrcT%{;;SP4k-qd)G(D-2CHSgQNV+gR*T`wy~sum-go? zl)Ms6m)TVngGT0SONR`yxibouA&RSRX{B%dBz^C%3PDIdtP_*+DUrZ2_n4F|5?R!` z5(pN>fS|>ZPrr--7`Ll2BOM_yH#rCsmez5PBYcQ@uBz5&!jd94Aqo>L*k|UjcsrW) z?Z+~)T`a#Q?j467!8im{#F3$PlD&BuMkQa!u&9SR1Tivj8?u8QNXx);pu5I1+otyn6AoAT;?0P7Pbzj!%P)(Z1 z@u%F=H1E=M^EChFkE!~G{-jSjdY-K-?VF&*M1jlhsk*MqAlO!n=@^>)fXT}8{I|2# zZ?%1|Z;{`&F1Uh)%5XAN>TkcR3p4LQ(#Q!90kz9AAWWAyVB_kJZddt=d2(5%$Tm` zNc!^hZq!w8G;)7IUKx!b8|!#_ zeg>1f1#ZSPU*LD;r~2jYx>B9ys5Gu;i5DbDxoX7l;@n;+zdwJg zEF13qVVrxkuie+p;JLo7|3IO`sPoEMm%gVR!O_uemq0HrxxPAhlddr4HP7`DX$w7d z&e$xI1i{WQK2XPDH3@zAXen7hD*-}kmsUQc-eyNw*q;4~`=eA0@e0&DCJV$281&Z8 z;-%iyo8Gql*;ewar^P4++-x(d2$n3TO^7=`=WcM2*A}xoxwFx?!D^t>Q{`F@jVpap zyVFrPvh#lYu^_8PQ#@+75_jyyCRd|jMRG$Z;*TFePTJN6b^gi?oL(Z*Lz}Mil~OU| zp6o==r|tu?0cjVS4PulKwz-X1WW;eHncZ1N#O1MZNUkYHkX;*F7w-?eG5^}{52E5T zA%6(s>5?mhrrlvPFYl=PP&(VLdGzTSKrf%JwF>O<6VT^$AhF`f%P^kzh(_RAoBWx2 z1L`e*CN*5Q3)ejuUL43j@^?S_Q}urRw&4Pv-ITO=w~-91UBHk6-zLT00pGnFfwol| zrnTNgJh;e!+|PW1!wSJi!p0+*f2``3oiVVM>+)LtT$I!Wi1z<{NrZ4;nko{Mw4xDa z&+LGs<7~^@-!qpqy#kod zPyWpBiOzEGVW=Cs_fY94DJo*1nx;^axSEkxNIeilmky3#mfJyPR^gQn+HZ>w2SaAa z^GOf@7~-G`?bqOayF3f9Kx3Rhm+0hHjot8TMtvnOcKIFMk1U3P@l4n@kzzU)!CZjH z%1w+ML>CQqK$dk>KAG1~91<(!Hd@h4A|Qr=h*4yitjB@9ZiHVy)&xXfj=kQ4;A&G* z*Fto@#X)cU&17NIU?P%R&?n}1w51OhSSp0D3z^bi;mG$Uj*(MXMAnI_ib;*tp1Rf2 zfJO!}pad2Zx=Eg0sg3~&ZYv9q8(vs>1Usr8%Dv9rQL`mR>6wM_=I~2iO)(*0jR_vY z^c_K2c4BAhIsrP~oREsXpY3knFGxEJ$&eBXylgHM4ao|Z*VL^{eZ0D<@#sq_TDqkJxaIAO1w;s?{CJpZihi&rOkIU6I7n zUROH48g$4PY?KwRrb8xTQ8eVx_nrNs`Y9%2(^UrZ?4=jBeKi%V$zn*CV%9>Y7=pZ(!UMyReA`Qbj_%R@XiAsi<2m*i#Rf!%Kx=pqf+h zI6xG=Fr*zWJML;KeBQn&EQ>}ii2RM}&1LsT4-s!olQ&mY_$C#ov*g zqdy#2@%G@Md$rN|pH)h>@rV84XNtpF7=7E2MG%E;AL%sKgmwhsDs zW+x}WD1HV{@sJG z3qJ*VZ)vcG>V@-2`b>th`NgGh%E1UDIk#BURHj%`y_?OMvnwMJ4{TP%C7w*a9q67_Pjw4iLD*S^=I@a#4Kl zMVW%IrI1PQ=A^@OjW{m1d5n&s%TGnu(+w(!z(RbvL0|di;tOXBZ=KKKXrN-0NB|49 zn%}9(xfVt#m@u;1lk853rx}UB{X~g}KQRZ*H`1NJ8BxG|1@J_7Wq%qT6M7t6V?}Dz z4NGy})DYj!pPHS1QLGc|DEz`J@5g+ZTh?iS`a;N>3J9~DgI^$qUOlAr;n33gxX%aAm=CKHz>*B$NDf}X@uIrBE>{|Cb>6EhO?{Dq7N$9q@(~O z7&VpJoJ@ChuuP3+V@5ur;E4kHyqlKlFh6TfX$n*8$*VnBWA~&D1~KQe?+y_e;Z(Hc zJpgF5VpHhbE^_KH6@=N#Foq@UaBhg;yY_;Riq(B(-sG=0u%C`j`rPwZ-FiCC#h8*@Zpt*2iwo%jv;$uLDJ?v)MU@##VyKN<8dHn5k^;_TVe1sXcY6mL;pqS1cs zyX8ZxgUysqWV#TuC|*JgwNZx$`NT<@-D01Hh4d4TBPTaiuGHKAr!X zgAAA^ml+t*o=-_t4pe)p5RZcmTNmq+nX=UOl&lLMrkt1VM_NHi-}75Ukp7c*U=6qM z?Br|@99Yst3esjeY=v6GC}gHv6x{Pnj;AEC;<{-vV$Q;bko-0~&rF!=NvlxhU#^=< zlYSu1rX|8ap|ja9C{9QY8Cq(LO9l74M@h+k*0U=z0}JI`bWf#~_$y3zKh`9@(jVpb zlt>#5UEMB61YT;r0|HfrS}K&lrv95MC2CSh({N!gAd4-od{hf~LbBXEv>k|v!@_}# z)rl!Vx>Kf7Jh5v#{Am_VFP;X4 z+vNmzzhMeX8Heg3-!Duf_HlC@oX^9n#%PvcVrs&Dljc>c1%vSsnS#m%bRsW%ZLyp@ zg=9p|zBpiPS;%^SH#XDGl_3l!YLub%qHb))hV-saqdjMB!`cw-E)J)@Df6oKcp}U% zhFfx}fJ?3aQS}{$9(`*mj$Zxf2tK|)VZbn6p~}vi!fmGwuc~Tm+q^QVqVUR(DGT=J zBRG=(#y*^Y%*-Gc!X`d%svjK|ZoPUZW;zH?NU%f@0e}K`@XEZ)9S56n^2a$%_Id~L zjBTZc0pbr{l8y<^0vL=VB&n***#Mp?B0l9 zQ;Rkrd6tO*kh^M^72eedEOwi!5%hj!S~^YYMgbg$c6ty}Hjqa8>t&hl zmEW*k#Y)y!w0IfEDfl|oi3lT}zDmgakqaRY2q*mSk}~<8vEUZOKLAFM*+Yrn(QCfg zEkX0+A=GRRCGM4aNvr0rkgoKr?DngUp;7^zFNK_IzYG0}SYAfn)i7p;v)e$?^sQ_+ zuO(3ZWdK!gq5}c)4Iop1(~2?TerHZh-s<1&lbDk$6P2s7d$v zWEuhsvrwn$F@mBqyP@G%kg^bE{h(=zx@@)2`!N~j_hVpA@$+7R@0&;B5q2h-lqI=;;<56&#tdZ zP8uDdoeZ-2mB}H8#r0liZP)|U-%LPikK~xVYrX6)NyhiIpo!Bw)TVj{fM)24&y&@T z`T~kEM8?sS%IfB?DLoNX*>u3v(G6^r4s2Gy$82bK_A(G@cc#{toJDV!a=6P8o`4~k zcLy;+%8;ReFxEeJ9l|s?sIMxN!f60Sl%Vvt(smD?DuB0BU?u*zwq}X#Ol_JehN(9 zkQXrUNyp^j#+0ETT=0zspx!KZX+T7a=kAJ+zmz`QfY#jEa**;OIcYp+Dfe;VvDpdHdw2cd&v51Q)`jCgu4Y+vpv#| z_qy1a%v+|(mBuu+Fz7Oy?qZ{c7JbYjzr=1D%07Y!h&=>qkQB**`zeP!Z0Xz)O zXV2`7(A!Aq^J-c~Rt~G&msuGo!S5>+QXB~S@6;(X-W=~2bLkF0sDs9lQm4E|0+2$* z9d2A}B(~6O(%BNY6ww*WWuM9S={`%vv_%bv?j`0ghvHO{jHAb}h6vhs!8@6SMsr-48IfM56ViT+JEHXoIhAM} z)*?dZp0jqxXR8xJeV=CpLU6`uQMNX!$tZMRGhW)>uhJh0BRF-29sBzw?WaX_sH32B zLnf*8A>(8P=P?(O7hXF_6eO2>iB=5sekuwO#h3qLe?J#L?p9jNrcfz|gqz?`>%L%X zXCRIbqi{BE7KXs9tF^L#LD9ze1baA#Bf(W;-6bJ5mJ=>(2-07q#!9STmQ^hJDQwr` z=b5oFn;sciRLdC~-E=KY6im;>$%^vMk~;kQhJw0_iy4>qBhkK^3VUp)2U`~yEgYau z#F$0ym3-?|xm5!y<7p=&gN>xsRFOV47gt(RTXN8-esWN%(?w0)-=oP>Ux~)GiGzh_ zFy@2kqCkLS>wCo3W*ND+s5Q#jGU0Bx1j23_4QCTg!J3^?nMZ;^dSa7X9n^9u~YdUfm$_Q|yuulFkRL-CL8aSqfQ&PM{jaMm$JmD9552kZjL zkIP0#wtmT76I~3yY;H?w3eNLUUkn}9Z*&Pa5*X%Hkwv)mS)y`a@&sYQ9LU*mBfI0i#;2YsZFAo71#iU0?#!vD@jFP36)1;QO(+$&)An zr~D8p&W2rHSkx~$@&IKu*qRQYmnoZ(mzSK0|KO717kt62TLJOe*mX@vbq3YjFj zJT)T_T6%_90}_pvD;1g1P~REEHo17rIJRnSA?q+F_AV><=jU@&sRF%L<&&?XCkHya zs(3jotr7@-l($yTK%hsAOO6)Vb9zCSLle*McDMS?y3ql)9 zZLikm)ExSXK>L~#yuY~Zx4S_=v!~mblxzod2WKLPXhFGQptIB#c!lk1)yg9v`zEjs z`*IwIsO*I1tF+z_V6}eJRv#H{2yai$l=fJ|`B-ZB{CkjiJ3W zbj~`=79|LRKL>nI%9&V`#ow2C2~<`cJEzsqy0keJo9uGmkyYClhj47j{I2{B_f`3{ zIOdI4>*WHHg&p!|!n71sOYDgEUpztYa0F=i9L z=t*0^l}m9Zb9N3SCd3JIYY~Kx2ppM`sLh7H z(o|mbuFvN$Woi)YUQ`=PtzBvUAzVeEKX(p7&Ip@;=c3(P5BzkNhL#e(e8kJT7F+JVDHPQJ_iC=cf{k1 z_Tm=*V5%cKqWrFsz?S@^#)3@lf~l21S-8iw`Q$-a>2L-LP~UI)LiY0_syG9h(u7KR z#w-B=FCW9D*ESi=a_u(3 zKb?E>`=X?SU02x-(ul3~61Q*u$rs|0unjCJ+H^k&b2m{Y#-ktc3XL^i10f62l&fvD zEv}%8FTY<#K(*Dep*Bei*mxs?;X)|ET96Kx6Z?f3o z13EZ@V$)4`*oOo!vSmpP3(LX}&{-M;%Ye>6cPzWf0EM{XgI|YpD(z^a@vFGSiJOe+ zn$l{uYLh;CbHaR%7$zl3>F&1zc{Wu{^2ku=uY?+7Eit!;Bdn8`wmA-6% zb}ZkjRn#LiCcM%<#$1oVZ{)t#KDPPPx9_ttIbAX!-0~?Ky%cw zZ>^$iZ^Biv@a(jH(TxSg?7Zu4o;^FP&K?>Ils_SyJ~j8nF#4uvUKF7R0p3uFYvi6Y$RN?*Rx z0-jZ(JP1(9^7rV-S}w zdQaS=Et650Op(iOyT-zctqk8mImZlZuT0DFA}AHvJ9um&z=BFTa&Vn7`SY-=YBb1# zIsC`a7SW{4<0MI_*7{>1G=43A*_qlUz;K6h$gR5$4(xv9RY6n8l~;~qVlq|<$q7Qi z^6K_R=H9js+QV*YTlFR*J^k*gFmRc*LoxXm9|g@Tkurz3MjONOD2fmr2r}Xhb`P!TBBQ91G#JpjER84pw+1Z)LYtCej0l2JZqLc8 zIK5_kC1!hX<8=mB6!i9-5GhQ=hPV8X8UC`KRA|#ruZ%NX_lo^?qiGxN<@8m35)F@Q zxuac)%@8RHjy4-`(a~Bht;`jALR!Bo#-X)-X@?O%ZBNW((|$W!a>jp-X>PIy{lopk$Gi6QyS&>aOdNSANmJqkVEj=K(Z3GsLL8~C6v(%Jqf#$`XJ zb*D*`vtJTZL~@3`wjhMb52gr0ayeJfNanShSYwT}61XDwTGuDLDpq_U9a#-ev!PkX zILb}$1(t0j`}hgbb8wbh0wVDVe8E1;cJJR?SD3b(=y%~6)UrQMt%nVf z$j2tK%K`fR4s(b7vTMkRO>tbK4$n$5@@~fvZG(C6G1W3?|HH zH6c{vvq<8fxmud7uYnL%N`-6--v@aT85OpEx9wE4ZS0)iELsJvB<{BWxa;IFF9 zG6vI~)Jmye%?KZBoz%*f5Bh$&b|{yBk465bB;H#QM|}8jKfQ>R(5h7DS>8Dg=`bAI zLR9iFf1?ww$M?iXa3YG|O;XV8ifhcF^CCoW@+c=YM8!{FEvj`M+QtK@IB_9l!_%Pg z2{|iKR>4G&R)t*Sd6usA!f#%Q3E+~G{Eniku(fPb7M(a?_Y|SuXI5@@VT-Mt@CjFI zFdAWa{_9X`gROn+xEe42vB;`B|EzL;swB?V(8pgX%lEL?dmYk@7d21ryt8*{{DeA@ z6LwEJ=h3qTMtwA4pDo98pL)IzA!B@o6{oqB)Ci$d;b+-yuY-KN#)3=XN^<=Ys9d|# z*&g5SGga3Xb{u`k#hCadr`C1sstrGy(Su9er@F^V82Q_PN(VbxsZz36Qa}n0ro=TT zgFw>;G%E`M7vY-cDb}pbO4Bwz2DkB_#qCGJP*zCspWs^Y$HYbR}oK6ZxZWaXXfonJ1~-92H?Y6+yNe|q)f zspn!i5VGNoxQDv2LR*`rzEb<~u=RHzX;PwZ05L*=+)15wKw`v2$L_M%<@E9et$b5q z@MDO|wKx7H>Fj)pft#h0ds4P-MvxE_yCb6147$+R^tcz5oquBX$~}a)O;6_ak4IWG(!29Dmu1X( z!gJ!LWF>T*@6@>N1;#}~JK8GsqReYf@@xEYuBFcvvE!nY4VZ9%MozoZVg!m6wjg#m z$!vaSYQCiuLca4#{2Tp)BxN8ePBk~DR`e3l%B=F3;kb4S?E2I>SrqDEA{87d)%b!r z+~hqWTKuIO(sj7x>Vm4^`GK&kN8FwSnNnCGtm&KeX^d*@3cQIT1ns~=G( z(4j4FN!!`bWSjZIJ;;9q9;|zF^77{-jQYDRuQhZhITWgCRFA49x{2|>{JE<03h!kH z&4FQzYs^F}r(C(pE2$Nn08!>vKHCQxp7qT7fAWVbIWZH|Q9FA(;5ROr#4Z8LRS2Bw z%Jlb^B(bjIDx`S94k^vZsuSzEP?XHnEPlA4^Y>AwDJxf=-kT^&*-<)A+W;Rw{S&$+ zpk%j&haJwjNchW}WZb1dv^h*#LqsN0N+2{!DTr!0n3dy4#y}KV#fDP2|)# z$zpy{&kPIkmlwAcuh~}Qz~U)ZS7weX4wY@U9p9|F7c7fEWJ}4E>!A2lJ~8xq{kSov z*JImy;;RbjX)k7(G!~8k>A|ekr`;=Y-Y*qjt)-l{60eDf8+9hZ2#5F zLQeX(h=;upxvr8bsf4qeB`GH}Co?OPl#i_!JGn4Csi2#M6~DTq^gkg!_CB8XczC$* zv#@x3doz1;Fgv?hv#{~;@v*S7v#_%>eMm65`#O05eVClwDgJ`^2Zp4jySbaKi-)bV z6X{==Kr?4g4x?|FFvT zZzg5rlvMv)<1Y%VZ5>_y*7_j(-y}V3t^S9sfAj6Hp1;HSS4Te7{~Pz;r2i}SzlA@f zl$7`-oy|S}a!*cDi2N`6{1(pUwif(M;S&dJ>a=wxpB7t{whv+V~C7rTWyy9K8OlbM+%HxsA11s@Zixw$11 zJ1>u=B^R3|(8AK{Um#T6Y(KIR=#u4aGL{px!FI^{)VzJ=a+VNa|C`2r>!H<+LFb^$@=e(zX<0SQ0g?E=QpX~KSo8? z*8M}m_pg-yXVPm}y8dJDAIE@$?cZIbq<`lvKhXRiM%;m3mKJ{-`q2AFm$?nl$=dSc z0RLx3{a3r~|7EnyI63*u%z>;-Kn}K#0k<;aWa8ud_~9`#=Q8K!V`F8rx_=kZv{#U~P$*%v<^}k}^eqS^*T7Jbd3j{F2$~PG}TeAjf#gZ^W*Ik_*9&30E)MZh-d=) z_!Mo0TnOUTE;9IXX|kFzG~NnKM|d2};WnvnWhp+77QKPfp>&hq1Ui+v*^YbP0G|xy zT+xwos@yXp7&IeMYOa6nFOy4SgMHl;QSmj~5fzxA4V#ir+5tW;d&8j^Fx>jA=7V8K z9IE6pDeP46hvUiA60w+UUeTz)T*tPUWKsq!sKv$&Hidh}Uzx9HMenU}4BUikjpjr2 zHN3a`Ls2j&PJ$gSd;OtG&$a_$a2Qq*ndnx9@o*mthxQL%*ZnV_yuL=GQ7Fg8kEh`H zx*d+ElF58-@)ASuJ4{k)u2xU8?}CC6=7&Wu4)=O(*&m3>$JTE!ReR$yAB~6OppIA| z1&V`1T0)YdrqgK@E5@Kp#bVMXmy3pi^DR4alwJgB{Psco?07%a|!E@DD9z-dZS~{*-5;~0R7zyZZTFt$gAAy5DJ%JPp z=y2H|jv=}rFgE+lXuDV{hek2YuE5wdt%06SK!Q{nY2ia9-FPq(olcOKd^VCQj zn-FY7pF%T9AII1<3=cG;j7}@lUB8mXfUOMW>Vx9RM|6(``q_>}5#TV_AXRII3DT)k z#x%~*y9-(+BBiPqsilb8iO%o|I=B>v72~8z9J*>R;W4IM;{;*zbkiU;ni=IprC#``SeP^?m~t2*>!@wy>2Mql z%0s4=XbvUYKBZg=rBn_gpW7j=YO!qSqA~gyNDt^1m&)k2I~+lP<75eitZ%$XY9WV8 zGYfq$Xcj3osJ_7p_F~(Mf#Mjuox~CR9FbIC=jQA_wo?!VI zg)9THAxr5amD}*TSsbf@0|qdPm#*m$%L)e*f|MY%$qZ1H)}#54BlFUBIKcVtFwa*KjNQxi8|aS* z5{)XwJQkH$ggnstpYy&mrcq2FtLPnqwP#yu$oE)M?_vm-(6{e|#f20<La^BO;l9Gr7;$lMZ&QFhQM!Djen=FBVIdC|-_btv7A(p|A+kY*XYH{v#QNR6X=dluNImKB58dC%9nqu+0qaTdFARsi{4-Cc(*+zvdJ}38Fe~0cE`F*qi{ec#Uch zU&UvdkwLOl(fp$r6@5_5lqGyUyns7^_cL${Qi{8Cj;Yr=1IcVtZWN$yNbje#~|hw+vy7zb01WhByKocuTX9OjK+h0~F#I!BS zDp-LBaP|%j1E^%+Evr)C0{JZqasU{|=~yi<$%l$pu(N1Rl4%dN2`XlGanv~u2lE(4 z`>hjZlm|``gOnoa`g;4xb#yPm7WBdbwOKahIgTp)FmSlR={q3}#ryRAg#eu?G>1q^ zMxQgYbnlK~+yU!=dPcUk^<6mc&N1^gT6ysJwN`O5c6Dio#(s1HhsF^(e%rBf zjzDy6@Tc2@f$%h#nmAr5GGv3(GKzUv24m%W3T8HOp5CuQf=wKpLqu1sbJzmID-E*7 z$0pBoGZOC;eapY0xVu{x22fA<=GHj!cLdp1vn^v;d?jCR?jfRXt}qmJdb{yx#3DO~ zqv98gznw9pnq?{-XCEU!u9Mb(dp)KO1tm8uPVk;&n?|G7&YilBH_afvo5u1Dmac4z z$H0Bbg#$~6Hz7$27={dN0am~GvSD}5c?()-O`Pj6U26m_4adKy?<|vt8j77BA!g!P z15CarOf?R{F9i%ZY9qJ1`Sf4E8U*P)4{E>ubWim5DH!+)^_iTmP1h`PGhmLqa?~-O zf4-(D4vd+70vDp?h2dJk| z-ftaZqv(;zSAF%pQ+eITWqVV3EpA(1i6{`BbqQraT;YNW!^{;tgyzY%x^IXzf_X{| zK0f)xaz;5$dwq|5a^d$!3f-Y`*r?7uX=T(lnOB_hW`0Vq&MgtcW4Dq45_sj3=A1>Q zsBgJm@a$Vc9#Z@V`?qhBcjq{%qi4?>(Q(HNmzB??a%)Mm(hHl_EB9q9vKxU>{5^9T z;Pl19W$MYV%E+45G9FAHkkf}Zab&JG{=m0z*y7jfwRbJ z&W>@Jdod-IWU5lJg)FLdG;)4r3;JLp5rb4sO$?-EXM$_2LP8|qW1<`!g%vp#8a=Bu z-<&+uJ>=hUO_FMxpzS2z7RM-b>lYJ%$U9=cW>+24V@@?o@HafT7Nn;6gyL3@3;@eG z)oI;{PXY_-k5WWm{Phd&PErq;Q{OR@idp?e?u_wb&mJjWT4sr6o=GW%o>%x$uxl|O zgMh3*Zfd1AOgll_AQ@aj8nVcHwu>loAS8WOv-CZUYBKO`7V{n?r}g9QBw%_|rr_SS zRb-cZ95wTa?ZA^icG6;f7i{MShd7n5BJ$fe=@0@#wbmVR0tv&tD8=PxaH&+mBQ~CA zn55`$qc6@BFGtQsM<~NmkwmGorF>F2SNPjmE{h377;@9oaYV7~@LRi+xzYej^{6ol2w8IvqBPu4U! zV+b&MC=}qA1Yq5r#OzWP!pq$c*11Q+6MlsiEaC7!D{mpF>SB^HY2wLL=7T5uR%(9d`xhlsVF%JY{lnFIkd5QCV@#|>M(e^Q+ZCc4ND zdqX^X$p@Krcx7boO%ZDIzy#A}(^4kEjTxAJ#)99#6=?0hX-E2GK3>=bXD|`pAbo2+ zQ~WS*p`iwVORc{8Q_x*v3V<=-Vu*0er zK^-KXKd&K=S^f1(Z=AV`_f$ODpS-GYY#aKB|9s`AA6Fm{7ansctC^@Ar!_5-Oea?$ zj|{7>Uu3y~2WM5%DlkD2IfjtFXy_Z(=smXYH4g=mGe<2iy987$DpHURFiPDG`xbyH zO{~QhsNJnSDOj?v|6CvqQLVvJ=Fi@x$2ncj{)u_9wXe`?*~ooh-SF-^*%}2dWh*m| zq4XpDtd5U|P6iU)ckplx^$gxRksdzzbeEpQB}3V0qkNeE{g9#8IwpNr3+K`61X@%y zRti!IJ)l1s8tMm#SAh`2r17Al6Ct%90Y}UEq{gWGn z6dg4-Ef}$)$I6dZI2s{Ca+P#KwUl5ispjt2K~eD*wgG=b3)uGK6n27uk<5TOc3X)T z6adsBqxq;}Bnew#4D1$Sig_mc(qg0!)Q8em7-WbZFWxSUAy786ZW`4pr~WyE>O%(> zN?u)@5sbP!3vRz+&xApOa-xx8u~hQRQsYO4&U_F}VBUez?8+H%{g~f`-E!>>;t?u? zbxAz&@pQ?-mf(c$CcV_b%|v-mk>z2HW_)Qm1@wtDt$PShJZHXMG%L#RfEqzPzPMC~ z#(bWkI0RCPZj_v-b5x>jIeo)e7Wa@-CySD{M)vNsSp^vzOjx6JCoB^vydNmezkTJB zWUt6ZGxjI)frJ&F(kCndfIW-8JT4dgh~|JnL5(#`Jchgmhq-&inVDrFi}8#j*VM1% zbW@u8i(@UgA8jBp>jYZcP?zfuI5V_dlWb}fxf`r<;h;K)Q9ysx&olZrIqa-`1t&DF zmUmP&(n+TNIISfXQeasU3fk~m+0XqKXWtl<_N4*ZOx*I;QE$}4wO#)@j-g1yTaK3Z zT{QruWFnFkENwfb7D+3|!Xz);adacq9F7kfSwr`5R6E;%03ybGfADA8q$iqhuq00& z!r?!E;~wLqU;1$6HK3VhF<4}$u9|4V6<|QUYX5pu8kA$n?2v4?qPEJWee9gzR47H- z41S^&&7u0zIT2XQb>Kwx!^1sA;U_E&H6Q-d-gdV6aq`ALTq8=hPe-j#HqWyQ~7zwp@n16SNg`r>>ctx zV9aswlW=g!<_W9ZB|f@1eKeEPK~a+S%!C;Vg=EJR_9nT`-k}0Th(_ysZQc<%#Mi_f zNOwi|`qalcJVJi($x7N}iEKMQSqhWBZ6> zZ}rs^8-HL@*aLsGg1RE(9g$N27cMD~Vwke4Caz*Dnx)5$xIawr=%nV$jREBZ`nRV< zM~eGL>Qt~;_uiTIH9XP^Iiz;C45O5!fu1qE@2G_vzg!FaATS$tQH* zKCKV0SWu5snf;LMda;CJdJ&D6<2?n2x$4^+vkbj6T{Tj`QCz=As)>RA+Q6h^na)3N9en@`3o-34dv;?K>Wb&1uy? z0;kL-Y18+j!1%(8ODv6Bt^&anMs&4;%=)^vJ4#TPRC$hPxW^r|aidN56^|q^zFF*i z{RCR^Lpq3=HOA!rM35k03Nz(TK0r5^dXBf9XBuEgwP(Caxcg7K{K?Kh@%^)+*MV0j)Kk|JVCUNobDR}IG5 zH|DAm$%1kYIWIr#nxw^`dF8y7IG&rKOi|Q7)TD7{b7Kj?R-CwTz6eE$Y*d-K$a;eN82}0VmMz7oox&*08&d_WQ z1W#E_ zm;ckkd55$4y?;E37(uPrGezv$BSwi)1TjjL))tDYhSH)+klK6HR#ls}R$Ejn_TE(Z z(8k_1+K-kZzkI&e@89#BbDitD&-0vf?)Urk+?&EUHu94RqnDlt$X-C|Q{P&yBHkIS zjZ48N4ISjhCZtHGk^?8eLAA)JsAu_zCm{X7kHLAJ?n|{QAsBI4`#13|gce?i=dPZi zX8V`A1pTbmc1-bY^<}nkQzv6;{P4qLTK74=xXTi$hlTwk^;UTuZ!M))lWH%3#b=USAFil)G+eu@tF*bAkad}p&h+R&?*7<3HmE);{^X->y|rL8B44FI0y zt7aflgN*~p3yr#0(plq<(~NplLW;C$AUp5MEx{yr4ywJtDI@W3`5se!$n{kbO0q{$5a>GAYj615wXl0rV4W`R?J@BmUdhS0t zzM3{7f_c8eaTzl5Mg~vldrSI6byMgb{c^31Kflh{l*9~OH}NLgxQlCnx67@q5ytZU zGM{b^)|1gIv{^(C+c{Z3aRWJl;F^n1K0xdQiWyj#&qM$>jntfw8QgRDaxd=;(vB$B z#)C&%yed=Q`cSKN%FS}AZj~+4W#ysG(x3ahl$Ls}AO zuU|r2)||tI83;nNT&+AVNO$tjz533!u~+g{4U$IqAXVZdV^)CD0Km^aPbZVQWQUOe zxX7oOP~Me+rYj!9_XwP;aP!T*{MSktU)p3k?fs$8ot5XqE#oMxhHxAzffhhc?Ly;5ECL6P%y*F_%lnw z8+|&CegbD#-k*;V3{^hS=~pcVuRFnxz3j4B5X2p0oY1V>~RULJs08ffM)?y>S z7m;}eq+Y4}X(Iw)vIiL40EnLQBR^Kq!bYWPcYdV`xZf^_JJEPPUALpBD}Ft2wXTMm zj=@ilqrb!ukj3ay&`^sucv{ru{nc)k4p+pa;m?pL1rXy8hHSlkX4X`ZDHxrfs94wV zcKKB{C9%Z1WKa_ln01_zFLR6=J1hFaxo3Pq^@B7hbYhhNbGZF78kfu@aLy1QN)-0N zgnPhFYF2U63<18)P=c&0n+v?87UVhaX}S-(ENCb|8%NZ_2#*DThfso)JSxC} zSTP7(BdWIHQqZFHqaR{&Y!|$GV=!!w3xl!VDU9oJ+#swk7&&grAlr^;DDdh{v{s^Z z_(45$lF2huX!A1X8sc!urz@5DQw3`~G9LkPXYXk!0YO&ER2G%p`;7<&u@$Ti#nfq{ z<->xM5uyX>!qo*l6H%#;p}=-tphSkK`BwyF=DhjIO$k$nIpTCw4lZ7Gv@B!*Dq`OG z-;-a@^BE*q#4C=dWLmscCKK+)0w8ScNtwt|3!!R+B}`W@79e{IAj4aEwfZTsWTQeD zlEJH1PY;yQ5Q2Fd0QzOvjCaBSHvnO6qLz`Ol2pJH9*}5|>t|tr;FABLu%td9r3g@F zd_UNyFR~vGr6fWom_UWsx})fSDNQNec<3ijJBN4~drHSV0A|oT*rzL|NgK2l$jmph z2P)aD=HWAEFn5HPn2mAM1&ve*T8t7U?6I!3?jS}mBAhO5HV>d_SMNGYhn$xO_RoN` zR6r9T&O7qE;1XmfrDX)X6(Z#d%uKm}NmwbGboMh*4e=J6gP*wlWLp8WN{? z16rB_FsAvNS_IhAJg4@+?@?(v-(mE5tT;FR+fD*D8_!Ic@4+E3fn8=T5aiNVBh5+) z#o4<}?>vw_)VomwSijqbrwjm3{A@N$NqVllq4C-6F(rUJAmWbl<(lzbxCyPh;9z@=2x zIvB-J8B+;Y6gBG!>?hp8@`12>U_x@`7%a^Z`YFgFxh=^3HKUKGPp9K=_FzY#S7&lR z66YQRDAtHZo`6eAo)YyF9j>0$HiV$foB^;B>QwV;hBBf`!)twjw03**Kz8&?-cQ7y zU#x%(Eta9mJepb<(m>7hTNIz%V^`a<{*ns#IQ+y(^`pcp z-BA-ZRfm?K5FAM11KJ>dJLSp;QcqQg3FV7)0GBv+n}$RM zGr4BKEDWApFAS?pT53_O2=P7`;?@*sla359h)>Irzv?X6=t#DeTph~YDE}<&e&R=0 z%Zhs-j9E8*9pKwgu8)K1asU~9d}_o2$Jh1LIe;H_9HhVM(mqy)y2R-!Wn_ReurnNh zbt!e|@kQeuN+4r}gqTElW@bc}dlH?Wh#MpW)^=bx{1rI?L)nsT5rB?BaG?Ft=TBht z0GELQ%FBR|lxVKUyCq*WzZVf_zL+nHeF3(5JU9%p6w@z^`(X&-y8dfL`Ef)1Ad2}q zui!>J>s7;;Mn#yOREB6>BDnC^RJ8SDu@A|kzQPN(OUQcy@G&;e%rYDB4FDKpw<+me z^y}A3R2PlWq zR9(GUX#hX5`8P;64nv9o`QGX3EqX-?Uw~zySXweRd#7nfCa!QNj7aTa^~0biCrv zdGjvoq?$6d&mdkktvB3c8q7>C*YC}Y(T~-4^0MB{7xR}BNg}D3)2nD-w7ZdGc{=a@ z>}QkwU|)^Ld4Wp|qORG_&&*J-tKI*v4;t)Jn#~$>G;^*nEOy^_*7K>^Y_W)k+lYdZ z9v6fWD*s;}ZWj?ky)4N15O41m0EW%#0z~7KhGqPV^e4L^dOoS7%04kQ*s~fpToH@- z)~xyu`iJ-5+p*$OXSu|4-BVgM)xMLtZKRLbr{M#&7= z2uM0VsU&B*u=C*zHD9sJAN6i;G&s%kIdzw)vJs$`8aYVE8Fy&BNw=_#!9fFEGU5Bo zeYR>W7rMQa!@1A}XO4y-I{8!MjGz0^T8aQ5|Dqqajz4>R{~IAG)4UH+zCrc>mtm3!q-dOu(|pfJvOYcxuQ+6d{X$SSRq+b-DAgY02rHTS%VgC+*m z`)0zB9Swi4Ad6~t&bU|kixA2VOUq18;=exJsg4C0r;!wxi7-bc)S{W@rn*IJJ$E=V zdY;UwkxSCrSNY+br_85CQiwl8UmtJd7VFlquoJEGX8ox!7SiU=Gu^`{bM|Di8+=dY zM8_x>Uc7bZ@;4L!DG`O+Z33I}!*J0o-G#5dZ$W)w`?TU0Ndb+1=Q`c_StT|d<>NOG z(C}0A>%~3`q0W4ryAc081VmC+{tWzGrke6bIjpf=70`LTxbnF7(o`-9P$MMYT~i?o zTi%r6+JXv>fOO&Sd?&1?HV5X&Zk&Q=xtPKayi7T9O+zD1`{ZzK9KVj=G2Tcfv*z@3 zqHZ4o&CGOqO-Hrmh-S+@yP7E!G0Gj?;v;C>Fydak#T!<94^(pulx!FiSU6g#W)os~ z!-$O(xGDU+iuoFiz?X|0%f^U%tpr@(1(dSV%DXpxbgUoD{~o>C#qMN2^(Le-TDr{s zYMr_%X2MDnXxr90#G#=aA<4RNw<1pKpGzHPU>XaGlTN`%TtMXlE*leveMz?~{P{aA zcVOHCCFADa70p>L003qR>#A#$^Vh7Y<{h~M2C{i(tc!0&OBXe}y;*t0peu%|mvs}p0TB)8 z+fElL;a8pC$$wq|lvP5-R-EPBi@v)kCc{z8RdXN$@Gg|N0RBEyFsbz1XpVJd8)+IY zEriMwBiJ$4qfLq7V~VftlVw@l(+^r}zmli_GKMbngAup*2O0<6e{3~Iah@~!=Ru-M zsZnE)^KYbyt5XNFL}xZdkh5o;YBH~Q@Q8q5ldf&e3PoE%CX3g1s_gwyc@q<$Z0V9I zu%ftlzCfC~I`!_>{zsBWoY3*xvA=TA4UIWsSnM+31aJ-_ z`L=OFprR{whs8^8HXM)7nRalC0xr?D$Tuyn06)oX6zUiO!fS&$*65Ume~);T0-=x1 z58bs(xf0L(r)fSiMOH{NzMmL2I?vT!%0B!wBH!!YwPwIU>pTxWH$OGDdNJjeEV=mS zXeO)K{tmC%-Aj=CTGl)i{rz(>U?%L4X&S)|LmHtc zClg*;hsBYkUnI4YUR463+J|Ecr;0Adn?_|Qj>|pr-gi@af|ITMu(hD#^PHdf8jMAk zITzO;E8NItjgcLpy#JBSC9Bq922GZ3>SnaoT9YilXo`>%qON*)Yemx8tAn!dwY&D#TJa6#CpPOx5KY1Ilb@+#q;k20*Row%mT)aHNx zX18rr;Z>9L42ew2Ovv}&dtnFIY$dSD-TZs8MvElXf}2iD2jfiNzdCu(` zTzj3GvPUFmvP9Pz%rZ)HlxRRo_6X}jO{ ze63g)%425N6IIBS=B(nHm2mP3QX$>mOvfDUu<}fHyV?22S!=gSg?(t=$af$e0X!{* z%(mM+z%;ncEy;UTBnmC}#yq$8Hsa3i;wtf;oix-7=H3tp?*bQT?2kj&f#gxOI;)%4 z$h8tV>$9BIcY@MM6q_!WTin1jnMH$#U?!+^%`HVB{k9d!+I_-7;Ou(GTd$5=%?cwP zZv)b`lXt}>ST?ksA4T`CNnOs?O3X>;Z&>^>bF7P}cs8lzUQuoIGkQheBizH5&gPve z?r(%gMLO{;P={rTEjIDz_VMS4kEb1B-CCb^7RN1|5dS`cnUn5uR7oW|3c7Tq#w!JS zSrT-GY|WZoR)DVQh7GpftA;~TCaZPY+kBX;-z{D0dc4nA*@-JxzhjGNF=fZYo|jCr z^rZ1~2PbTv48yq^gixaogy?MgPaEQPWvsIBfanXAGF1{igkh%+1_z@AhmhwIJ zJnx|$%+%h-e`SE0w8_CP5ij6L*;&U}W(>f#dc=BH{jS0MxYvQTd>bWV8#xE3yX#s) z*aq`ni!|{O{V&UWp2jG65IOvk_vK}Nrp`kwb-78dTZ*D)mi+3Rqx!xl9qs!i=uuIzLrJe+Lc)7O%t>>(mh+~Jj}ki$ zuO;r)T-PzBm9N|f#OVBQ) zjeAUk820$)ft=gARxqdX?rxg!h`t{-(_6J>dW$wB=sU1> zspIFvY&oCT$>C%E&wumu-05%QKsEHTDJ^b1j{+1&nHXYTsRjI!!Rm;3# zN4oEa&4HKhaZFtnMQDN_t{r}<%h47)O+$qS#iDE$JktM~9pO|y5Z?&;eBI0Lwm3yU zco$P-tFh&pWty}r_ViY6$FS7L)2M&yY(g)X#s#ih)_D8KuZs4dWPbwPn|ImxrI_{_ z2cdpSqg1Nv14s?Od^uNmj|9{#AcN&iP>@iguTr;8o?8lfYEOM2cG8SeG#rV(J(w+l zf>5kJQTPhu^qWL_LKHJ4DVsFJF>w;vG<$Bmy<<*Zu*vy)DNepwd#buzp3Fp}-XGGp z-E;GH*U!DiF@Ec?L6H@TClhq9000aeWP&g_wIRAS9o*XeY+$CBvj6xh_B;OgnR~4@ zKtiQs@Y2Gu^Y2^ zzL2cQwYB&oc*&}{O{dlq^HR{uR0C(`Hs_EBPg9qTPh0rRj(owY<*xlaU4{5l7Pdbz5P2Woh~5dn)iw9qN^ z02~7+yA@d*OdZMwXKUtS0vv}5%CBhL-~WuiQhB%{f)uLc@yPPyA79+%|KwXgAn^7G zhxKUdXZ6~$s+yHM73o+bSM9xDex1oG8xYwPB(_*P z!*rDhie`Q1=sMM(^@G;V>wZVqn|xVB#GjmAJiHu`J6(PC&MuUS5A3O-K1?mfBNq4Y zC4(23T6jdMUnWrtt{26QYE*f`4ahY63B7y_{=O`Jo(%E3AMt>~rf~_L2PzThx*6F@ z*7J-GP0QjMdig)L^j=r3*}t?(4_q60hk-;Fx+Iw(^wF zI&pXD$%?o^>hW~E5Czsm><0d_$qY;1ec&0~rSU(=?ax{^UwZ*P&_{LpMx6D30A3LV zz`HCAf=u}~b@JBMHFa_-C}IXP;6^E0oNi%&*z@Tu+*8&(NMv_*l_rp!gnt6@KC znndSaqi+ae3;KOcs?{F!eJg`hfx{p725Ag(Z>ppIK1#ikMFAT1^OaF-1`w#&2q&xX zUK*lhF%qel+pzqKqBK$7aM3s+X1_v&KPfonG(#n#Kzz|kS;r)*F7(=FfhktS*sNUH zIPg&d#C*~y%~q?;bmHYYdNWQMR6nZ9`Zz9A*fbLKA0K=3X82GR>rlt+Uze`3^ZR{x z9tO@kSrK>ZSG!F4fD7KY!Gy$p>bV@@L0MPZ;1T6i`-g=zxrXw zhDJb^gaoMMM^qj~jgs^~U*EHgY{u zD5YhI@L4+5j!sr&ro+)hH62oJpK>yV`lbErnNuW=P5>(i*C`ImJn|hdTIPK;nd}9U zBEKgQqG^S6&$jNR0n6Wy%;28di}f?r$}|$#r12bbqSi}$KDoHttaMPpHbf_k>epl> zGnZ^3qM@VALpxY14UW#w%9wX{O{ablViFaw`ZCyOVitZl;~6l5V6Pm}$CgVE?Fe>*&||19PvpCyHRw>;$q4UjTFbHD$_t^*s0lq@<45 zY!{6EAE8I?YOiGfuHaVVMB%CvAa9YZUwddJHu zLz7d+#6_GoM69ev=u}Gf-^x000^G!;tqNHTqNZOn&a?!(m=0?74H)-&`Z+u(&AyEm zdo33A(KZhtty&m-G?hSM#TQ$!lJlYS#?2C4E}cmb3G31-`OnA{e)|B7aXL&l38CQD zgG#3m;_b&~FJw;heWM!7jT|SRnzEAes$43w0RrIv;pTvf-(Q*rarJL(xY;lTcmLU)B-7I4ekp3z2FOu(d;sc(xxrgKm#F^(ouB0A diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-apple.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-apple.png index 6a862572faca191c265bd1bdd76283c08fdab790..17f3be9c262953cac52da794d601bb853d8dc276 100755 GIT binary patch literal 4677 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 Hu0mjf9r&r4 literal 26685 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 B13Lf! diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-bananas-overlay.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-bananas-overlay.png index 9d1d6d1177b9e36bcef557251ba3914fa5acbae2..2c94ea78bfdba901614472a3215401d7b0a2dd71 100755 GIT binary patch literal 4949 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 diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-bananas.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-bananas.png index 88bc33b592a04625c97fafdea8040090e64d5cfc..2c94ea78bfdba901614472a3215401d7b0a2dd71 100755 GIT binary patch literal 4949 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 Hu0mjfi%6-N literal 26684 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 Hu0mjfQGBVH literal 26684 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 diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-grapes-overlay.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-grapes-overlay.png index 2529b5cd1928637c69a512b292d5533fee42a48c..17f3be9c262953cac52da794d601bb853d8dc276 100755 GIT binary patch literal 4677 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 Hu0mjf9r&r4 literal 26684 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 P00000NkvXXu0mjfY&D(f literal 26684 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 P00000NkvXXu0mjfY&D(f literal 26685 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 B;9~#) diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-orange.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-orange.png index 998f5fb3cb6f04dd8541efdc151bde4014aa69db..3dc60464cf31e3ba07d5585542d75d616f63da03 100755 GIT binary patch literal 4633 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 P00000NkvXXu0mjfY&D(f literal 26685 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 P00000NkvXXu0mjfY&D(f literal 26685 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 diff --git a/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-pear.png b/osu.Game.Rulesets.Catch.Tests/Resources/special-skin/fruit-pear.png index c8acaaa58349b47893c0c3ab3bbd4a2d472c8721..3dc60464cf31e3ba07d5585542d75d616f63da03 100755 GIT binary patch literal 4633 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 P00000NkvXXu0mjfY&D(f literal 26686 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 B?Uw)m diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/special-skin/hitcircle@2x.png b/osu.Game.Rulesets.Osu.Tests/Resources/special-skin/hitcircle@2x.png index 207ce15dfabab74df8b5c13932506d94ef19dcfe..919d8f405ca7f40c921e71b91e7a81655db1f94b 100755 GIT binary patch delta 42344 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 delta 95844 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�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 K?H<|qr~Dr=#f2~c diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/special-skin/hitcircleoverlay-0@2x.png b/osu.Game.Rulesets.Osu.Tests/Resources/special-skin/hitcircleoverlay-0@2x.png index ccd1494cdf1a9d19a9c860b88d240392ef1919ea..8e50cd033596fb3daacd173247d6779168cc8f99 100755 GIT binary patch literal 26595 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

KVsm2B>cb8^}lrej~MtL3IA_&{r^T6&VRN% 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

wSIutbvWi6D`m2u|!^@bLCI5us_1F3$vl-qM^r3 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≪}_ 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 E0Oy=DQvd(} diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-roll-end.png b/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-roll-end.png deleted file mode 100644 index 60e2d3328f89df794d7b894fd2f6e2dfbb44ba82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2095 zcmV+~2+;S5P)RCwC#opET>M-<0j)>w_GlupaE zQdA~lAy}x?Kb);qief>Tio%>y85B1MMFn+;e-wn4iCWkYhE~K;Tv@diJE>EKHPvca zHDYSh5db zjM@LdW5GVBo-aEjj#cOe{8^>_9`zyW-9figw}yN!BrqBam}foI8>u%0|NK)VUQ17MwEp_u)0SWA_zYSk0`vKNWN>hh+`oUH)YsRO?c29Ulj?)i_fk)eOCKgtn&0myLqkIW z_}bc9vSrJbXh!!!VSvLU|LoZ_a_7z+Qc+PsX3m@$3HVRcrwIkD813_csCRU9kmJXX z6SLW@7y57N1;PP`8XfgXXJ;olapDA-KYzYn@G|O2LINv>5pQpACr6GPAx5K75444P zy0E}XA9uN2q^YTi6c-okf$pcCCoHgHUayxp91e2w=(y;pc(#hyQZ9_ZIAR;C&Y<=sIbDl{);&l`C3{ zkDby0E2H=M^XIin&>U%i(fa!O$gyL`w02LDr2)qJ8y6kBckkvw?~?`?ZDeGGSglsF zeED)-YJV&Zuu_;{3Cf9by;Q(Te?D~R5D)rOsep0!1ecZh`T4v7EQtjy+zEiBq$J45 z$bgcP64qC+A8(ZE$iu{m6Co!jhX=h+x-%YAr%r{98<~O3Wc6iXfya#-2ejmb($dn1 zqAc_&p2?FZLt!EF@f0o}mq`VT1K6B7b724e{j9HSmI@ec%9JU*DC54iNh)BB^4z&| zp}4qMt$9-T;3dULJdE~SF&`#6bcqDT&UKB`_>;zdC7y* zkL3i$s*7P6QUaSyCT49SB`_`~ScAB<7q!f0^VkArEEVMio<4oL>eM7HFz$k=jc3vV zvj#3{f$?h6m;!dY-D)2XOAFlF+pG5Rh_t}n-Q8**JGnR0L|-+jSf!K^W(`;vVJU$< z9uKRjM@nF))5&VGO9_lOVaH5_aSX=0&uVip^?OFyfW2NXoI7_;t*ISPF-jLd@8I^`A_qm>)_PVY}U~28-4p z-SQCCC>k3ZSe(1O}uxL-S@US3|hq84=j z@BTwh=%PZ%D*)krm$6Vl`;B^w+Hy)rL&XTZm&l3kvhZc2&=G$6^eLP=b&A#85{xiN z5n+_LI(_;yFS>|!> zv6w*7k%I>h>PcaodPYsI^}Pb4a1iQO*45SV#DhW|pK6cln*`nqup-Nf>)2hpcIlN| z{u$oEn*-h{umXy5Q03+2#9%P!0rkW(?ZgFGkxs|ax2&v;m`o-9RCLv5(>+ z-D0tjJ$v>5_HeJ99AZ~o4Byv$vQ7rFn!Knt-MUo*7rT`o9)C-<(qUi|^hXXo0 zJAneiwQJW#<2@~C_)@BJ>OTh0Tg2Vo#hZAr{;iKk>T0I+D1+j5Dax2lg9Nj;DIMeQ z!6UhNhOsetc;sH9Z|X-1jIR)C4S{S-lztfvF#f|spJV(5Z{CR44sVX$;?GXe55fE+ ZzyR4Xd;=*Q?iv69002ovPDHLkV1gL3>M{TT diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-roll-middle.png b/osu.Game.Rulesets.Taiko.Tests/Resources/old-skin/taiko-roll-middle.png deleted file mode 100644 index 03ebd1904875ab54fa71cbe948304fbb6266d69a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^j6ht&!3HE(th_Z1NJ*BsMwA5Sr)zI%U~#c*aSiV>bgcqrenRo!(7sQ*l5b=5lS zHz>XqA5MduI3AJ3)o!d^br=$OWl&|sX@~VZ$$kjMf^*+5^|JIp^;7XGD@8l4m+Fq5 zbR@7C?o*Zte`1aIhsJvoa%oiq#8D}Ki%3xN-Ksnged2uiUDl?~c^n4)<4I1OL@J{s zVbM5~>zhOgK)+qf;w)+W21PgsudT$_W{dvh%J^~W25rSR8(jc< z_fL>Vf#GBu5+M8?a)ADqw~O-tr|7*i>Is87{CTFawH0p@a7Nez!b2*^x0zygxz-zJ zkY>w@5g3#`3)hxc7oS!>lk?q4A2}BKF4OE+l=$q;=o6RE{<#@Y^c6ReN2_0|6weK| z2uIAnbU>U^b5ZVub3{6?%JM{p_E&w1R}>YSKGQiTyB-Xk=tfFQe;f9 zT7frr1ow~=e}5}V$xMU*Y4I@*Evnes())7`go78n7;RKpIx`kD`E%XMaa-?OQZ-28 zi5A$#5ZvHTSuXzTXl?s@$h+&#_xArktA)i(04d2$ziJv9de^lR6uwRAw+mf3DxL5i zZ%jZ&vDSxmHFDjcMMePT4CJ&RQMrwF1c;wW1GqPo!cSZ^A(b-S3e=k6n)X>l7c;buJdiW4TJFtS@WP;S0XgZL zRZr~^B;3JzAm@^5`N8^|J9S$Eo}Uy8Bag4E`!ifO*#yn~@NB|Sx?P45|HI~V?QC?g z4jFo_Dw>(fI(BuPb+*GvzfZv!*mM-wnSs#~9FzwephKn{u!ofyos z#4hRx06epEi_y1?Qq$3HdB0QwjO&@~ShGCE8=pRb&BawoU$ZzWCoUoOIx7L1t28)d z`yS1UG#((0hLy3j40^L2$5CnL#>$kX73~K-M7th}=wN8AyWKeS(#q%ETnn=#%<90t ze7vB1Kb>x9o>VALdA9*Ak}r2xz8Rw57nC4M3H<_h<7Ki1Fz`+PZbuO%l5Br0a(oSA zg;^8KgM`6aeM%%kx-bcr>ZGgP7Qr&44d-K|2JBpyh%9M!COO<|4q{>(ULo9=0@1|` z{mdIm##t*?42H{S5)ek>iXW($sYURj-j(3}Ao(XED3+A5XEmxS;3@V8-Lioga8`Zm zKGNssuY$f>>S4+Fubmb-0Ub}(`9&iCk5&1fTkn{v_16n9O~0IyKJrn1yh6BoSU@*>AiDNP`V(J;9{Ld+x^0JNiTBTS>lAaos86NG z4tj6a1y0egJwb*di9UsPQkh zVUV*XtU<4yq=oM3s=AeRG6WkrM2iyo(WeWwm?<>=Qy7 zPz!0(bK?q3h@tu4v->WnEttwXV40o7A14u+VB^TJY0coQo|V0F9X(&cElEqk8XNmG iXXL~5fUGV&%!C*_ol6Q};|lnZLeiKIqOXgS)&B#53)X=E diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taiko-drum-outer.png b/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taiko-drum-outer.png deleted file mode 100644 index 87ead80a08146adfa553d242f315f764a467506e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3749 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 DZJ4!X diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taiko-roll-end.png b/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taiko-roll-end.png deleted file mode 100644 index 778c231f20ca9253e64ccffb64a0aa39a3b97a76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14570 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 PK2D*pzfZY$bjE)HM$sIi diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikobigcircle.png b/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikobigcircle@2x.png similarity index 100% rename from osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikobigcircle.png rename to osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikobigcircle@2x.png diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikobigcircleoverlay.png b/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikobigcircleoverlay.png deleted file mode 100644 index 6dca33317131cd69ef449c0a6c0122f0f39cd84c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66280 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 e__0p9W$exLq4HUNEC{AIAxiS~PfR=%CLeS{yi$ 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 Qd;A||`ImC#G8P~IA7%MrKL7v# diff --git a/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikohitcircleoverlay.png b/osu.Game.Rulesets.Taiko.Tests/Resources/special-skin/taikohitcircleoverlay.png deleted file mode 100644 index 2626c394dcdccdb7d74da5460ec3f6d6570ad9a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66281 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 z 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�kcUrvy?Ky7PM-eKS~7g% zMZ{nq=f2hV<$STXxd2OiWuV{{U*bik_p^Xa}f9wA6HU(wxic6&)=Fc-`bhOnAf=BwwiSpp%a4Ij0 zD`y_+;4IX&3KFZd&ms64Q{R67rur{tU0q$x)?GeK=Rs5lm#Y;Oy7%(xV8ohrU&3`vXq%7zVCBfiKfTa~N7?k5 z3WSR_#zY>2I;N!f&l14cbm-GMJ9z%cu2R|L5TSKM9JNei`Y3VNzrFE_vE}Vv;6b}7 z&?t3fPU0XHUUjUyAugXw#7rCEp%SWF7v@;>pOyc&V0-Hbmk-7gcjaUNR(1LUr9{^B z;lJ;)aoNz%i`c5Iw^CVYr?+EerN{AKW3;)k`vTbNPJ5Je_VC(;O=6QGqk-@>AX7Bi zH}X&L_~hh26j7RhWsjnfv&z)}#{%SZy}I{lKuRH7sP&rM$e|l2T=j=aXZ+ol z{+AQuA2LW6+|{4z!gAsBMwB2Rw83?a0;E)UxDr26zZ1-%yftJwb_K$bKUka@Wfo$_ zZI5cn_KK)G{MssYO5MekN3VKJU8>TDPez4Yq?*6jeI9OYmHe*_71DV(mopeQfou0T zxT>dqqZmKEUSvOTe`witVIV86ov=da^aqhx#ora5gI59l7Gj}-%B^@8e~~Oxsj(n8 zZ>p5X9;|YX_L(dJD0L{W>W3b`g*SX@eOaPXpu>Iq=VgC$y?b?kCIh(MkiO=qN$1~M zHJy%K`QzMZaCgwES~j&e4h|Ivi49t5nwqVUHVFLrZly`*(LggIP;$Gk1=aiE>%@z6 zXNo+A!$16)g*o68{c1m{7mkvUeXshyw}^B95uz1(5Nmtz#u)OtE;gV&zS(of6a>!7 z!qIid9MI3a&wN{r+$XaJe}hz{+p)bN|GbtVydLam?IN}@p(CAA3u)EF5K*;r?CL{a ztemp$By);I-ngTgz*N`Bh@j8>!h=UQWssrtL0Uy=)0dK_#@vf%1jhhbn=m(O!Js*;LpC_BUF!Dr9!_jB#(=Wfcxe-fje6Gj}=x@ zQV~m>DAXzjDVyX;DYQvg^LA=`%`~)jAe&l9L1nv|x2-N$KiLI-0Z1WwyiIXwyf(fN z(`5b?a=`Z0TZMI~(=z-=HT$vC9wzv@wq2`pU6|KSDU<^$fnSNIzAcBRsRD*80kVvF`3GDj^|X zG!|r0d`C5>b0AZa`GzDw)W@t@qflWZu_KIU-*@5b$F;aSBl8APd=%i4Ot^va<~f&BwJ+|{!wU{wm%1} zcIjL3U>LHwx|Ti%2l_(y+Anu@)v5bzrLqVPrpwa0U5a=~n@d#C>rE|d1dzw`eBi68 z6+FOZ{5Rt}$Y_m?1P<6jvcIiAOZI*Okhjf4D>K%Nv(f8h18V{j_@Z5LKV+~~@LIj~ zlZ*AE3;kM*_LY$_dh^Gekm}rqTb1Ya*7R@lha1+Ic~<2=I@BGuwW;3kn{h`?!k{If zvKn+!3oy0QZOVf}8l_>NH96Kts}(gLBo1RZ%sZ6Q1;c-nvJ0Y`3`RzLWBZ*#oP>XM z1rC01O@e+Bi@Aj-VX7E>rw9rrpOW`5+F*Ko(X`KAe(o62VV_`;(Q3f!Gd69{ADL7) z(p$=XH4arzEfAVH)y;HIi|*;PY~5k--a(*d8LSfE5i<|SjtSR2nyqW~_xuAVC*I&I zLW~La2s+XLr>R%5Q%^%C`)C9nTcGl0x>ngjJgF(^alD=5_BW1(BupL@73abt^D`JWEVs^CxXqU~z+?Z{BouiRm>IwRws zwx1_)EU@5@?*i)H#1bY@3*bAe#E=Szd<_hlBtQOt3A7W}AE*=g){S#k-n@h$)s z9NBB1)qYNX%hl4=vq`L}6539&82NE9FkE$5N(_pokTWhK9Id=3rpqQZGS=v+f;tjZ zIw|pLX5BBT6q)mz$RRTL>;wZJ(4^?6<_*)klS@Y|Xzt<2BWMR(dXaHlqa(=-u_hPP z+LzCjGo-J(e<{)^7;SSPTu89V#mZ$Axu zjn{%VLObx%(g?!oIZm9Q`Hj-AX68YtNdyvB-s7nZuMuQXeObiW|An{2DAjVls?5Oe z$3(6jUOGSh!$D1vXJZ}(rEwE8{84kJUGnaf0``5faA-s>4CB%4cr`Bx6#yPqW^}D{ z-D=JEN-nuF8)M2Kte}HjW(7totRaca$WcichJ*!n%B2gbTy0VfTIMJguWU+|U?jvc zgk?BoWX25jAg`33%78^P@R}o#*9eK0J`Gu9@XprPO(jsyJnqlkdZj1solVp6rT&_l zw=e8oDC`mdsfezvhQw%%W*J5S%IUp?Y1ZXE@z{SNUjCom2_1UPy`X=Ex4+PQN)Fxy z*N93F1Kai>GJ>N+JGA)PxOo6xVkUqI7L2w3V_SP}fcOL;Bh5YL3TvVVXf14dlt=Z-weL_r%zR#`#>DZ1^sY>1Aq)1Q zxav!%>giCM#8V4hm7iA4vB{bd-(d5OM6!r)E+1xjuLJ-Rv}r;*#1!&rL-_Gxw0PaUs!DEe4f>@-zY z-+iDaAGxWFs)T(phLTj3dQwT)oc>y z%^0N=)CoSFzv9Sm81(!MF*lBblrfu=F~7MDxty5odv&|;o50nC@5vkDJpEU6^m-!N zd+ano8lCccv^7C5NencGq`4eUgBOQGf`Ss+MA)i|LOkXO^^`C=CzMI*+8yd#3@;t$ z(OJ4706gNcj7wMLAFR4&kJH!E(vyq8rFUu48`P^wOvQzi=4?A3g=7fFC>tLp#u&+^ z5tnQgz&o7U{hx=+(mhEY$Q6>l`S#7JB``<3_h-MrRj+R>!(K17%uT55E8qjrLg-aZ z?(exp1a~&1G(mhj@fWT0-_D=`WlkRQznw%-q-cJ2(9O1(-3(&_!0BE}^7Fae;x?J# zT3TGxc%Qc6!4{n!Obz9vvvs%vs5s(g;)*|gFw^$OpY(oSkuJ(NQ3XTT5Ue zFbyT1O5U7LtN!QtincO8^g+sdxw$&6vjXGSx7PcAjjH}UT@}ALd^)T+*fGXPLfF5( z-Cq90#2RjXr*$zDs59~Ak%L3`u7FgB`>JEx%WyO~sbyWwgwgx8yNm}ckUzTY*s4SK z0(?wtX{n0fBp$wTconZ`9O>kNtxlIa(vuP*gpSFW?6xHTYfy7yl$nza{G4$fB5W+! z`|&hBa3>rUCSwBh$iO_Az2>LQJvmEQl^FJ00JQRF@?A^|~`sij` zO2oi(J-gEH2gtY;8GqU47myC0)>JL6Mw`^8CT_NLT>CKKB$DLS7LVMc3OAATck4R8 z8OH{Fu5TU_A?t2Xpg+X!fn#=gJgcSr{rdYTcjOQuITDg~j@Kgdm($4rCellb2l}

K|+9eY-b4mkWi1>ASwldbc$7t{wT4`ylEJNblgKR5) z10rJT9*D+~_qi;I4%MQFLMnLhEOd*(`}QLrIud3K0}QG9$Rx(2zsfCUBJqsdprViT zPG8vWq+s|xsB??qW1zx_HXK2K&jsT`7osMXV)5R80cHe7qJm=Ts7?IxF4}iSQ#9pt zwLj+9^Kus0;w^3434$#Il_b_=O+q=?5t|tLm95!a6)%%nxdggYgn6nCfA|1L(vb=d zi^Mm20Q``x3Hns}*gAyJNu3N$B15J~CfC{F%G{yaisqqK&p80HDLLGBQ~qy-k)QTmm*GlBL_5^q8xQovjr6$ z*?KD$Ww;1t>pmxkwv>O}{q8@@4NzfZSr#ni8HKz;9s&j7$+tpPIyvjTEAP0<*AmKX zLmDRM(F1<|L5ybdx~XySKX89y2(1ENtVsnoPZ~MaCo`ggScbb%IG~Z{ng4qL#tFnl zirG9iyWQdqO<)X9ayl>;3*tc!l&31lyB9CGn-~gjxL`zT28m#XHl?&F3U3gS+QQ6Q zqm?c^hK&RIluL~aX>u~k-mS5R^k0gA$d`c2JhWSty0SAXtmI+kM?874&Elz#u7Jz~ zd`m9UxRs6t)P|swotM7n0^+`V0h@oPzYg%JmOebzEXIYbdTH2j3Js^$>~FeovZ6#o zI@BKoCjb$$$(=&bpG)K+Yl2KVPrj4LHwB=j85$OU;ZOC4>8Cc`{WZHY4}BCdtz=0* zaLEFB)kHmDf6IZ_fE@Pun58_COpY5y&EJL33F(*p&TOt6H2EDZ>{Y#_N5*zbo-DZY zf#c0%(#pXxT~u;a-RE;UF#w=>L~0gu`j+xjNkoQ)A!JDpdfCVtoUFr)1{~*mRKg+n z2|+Sum*j19r=@*F-FhpO?~-Ok+*Wzukv`CPf^j^lP{Y{LIt?wIjpUNnqv15X;W0K6EqLrC!FRdW)|u<<{3P)aBi%owieq|`f$dol@_2y32fWf z3=7U3OGjqyOc5@I&)y^;o&)PTg!8kDdex-J7XSug2DDkw%0QWWz*HieXZ#Vq0S6>( zLJwgE8hA;`mlE#JwW$M_jgJEj3BDwug{$X=ZUT2+I*5dTHodvbu-NqUmR$)fms(!0 z1zK^mY=)c$n($&4s5>xQH%<4|mA(#+`|}Z_9VpNP4A8ewz#3zNrQmOX)waFHkX*9e z?N+_R1%G6HLFT9lkQ*6ZE@6DlqheG9Qi8wG%J*QA=odHqNF&I2DiG6{y|{Q}L?`!) za%SQBuw^``jxLCw127}2nb2XwEAfPkPQ2uRQDs5c|D<04 zZ*G|hot+ap-8RQ8E7g9szFvtw!!}lNOL#)s^7Rwi_AV9TFZczGwHQSmdVF%M@O-kx z>fD=WFRm|JJV!o!C9DwWM!h_G`+%sJR7g4`t236cndd^N z*P!;==wLkM2Q`(`6KFsueuCzNilqGClE71yoIfhvSnIYOiWbAlZ^F&+%|NdZ!U|-- z%C*$07O_16&-Gc)`KmYIbi)moM_V{3FCC8yn~}w!^r;1O4E=PNFKhn=x+K4W94$x- z#Dt^hxC5lz1oSOO6uS@s#A+R>Pyo${2U^WH=5M<>7^8ra^V8N$ARq4!_8$;qVvRAW zIkTtUJ9EzZ4r4Z2Z_@(6fbUfMgFI!q@f8r#hzh{)AY4i3gZbIn&`o5cpE`LW7XA0h zcN`FN5QBRy!T~IhHr0aITfNrnDo=1TG-wkUqcoT<%p^3KzlLezF8bAgv02PWZTfdB z<;Rxz7@k*JweI|mHfICW10?pe`?1j5svU$*h;Nb|Z*R%%yGL%L?g9usM(|^;UsN$9 zF>CIUP*Uar26v)v6p?X$a!NujUW7{lXHyFOL%kRS50)LMM!fBJATma8y z4fbw(u0w+kDnCrsbtHgP5_I4%J<+3R@koMM?YS43* zlIY=vGac$*$P2JWw6~CaN;dgx@JdUK^^jqsUT5_iqe2aCM=g%Lu(bK^KRIkkor9p>j1+%837QtV%_z@1{8S= z4QSg9s%Hz&1RS>^a2aYe0X1K!TOExe`Rx{2W;8AOYiBPclsxKPY!6XfQG>DcDs$2iDT4aC| zORbxk%NaF1&GG07?DGR`zr*a0P&gQZBH zFyr#!*Fj72rq-Vv4xk{JSvG@~rAV)^fltj|5}nJLV8K--QMwXS5~_+?|GNwWAxu*i zD5@CZ&RC+KOR*u)PAep|(~?D5Tn&Hx4w}$Hi-n&g*&=d{@eBw~uBvhn_b}wA3O*!- zBJ%~v_>f;@Bx%%#x2YiE8h>sjiYg{{gTQdz)Nz*3W!&tJD|VOwflBwcJnksmzy}R0 zsJ2e#7oI#LYwPe^K&1T&$KFb90j?zJtEMJ)V4-PFv%lZt!_+}bY(lPI5QxkA)imn; zfwl3Kiqo4bAL`2QuB^(zqH2|qBHycM%W)Hrpdu##D-0FlFW@^%_FrBF|4#UY;8REw zhob2_ZnU8L+cr)TTJIpxMjRx8Yx}Q6$yF+o2O=i44q)0D4umYoq-kXo*rbZpVQg@E z_LCuCV;TGn*2u5Z_6dbtxnF8ulAt5m07kGPzu9~w1ZG)N?dr%VV8oOqO@>4~e>_%@ zbDv2!6Rc*Qfk%98DM9 z0BW4$FMqb`?e}##1fj10Ik*D!ZT;PjSXV&N&Rq9Sc9C+hkg_^`kCmXOA-OS^#YU4O zlY)l5?!=k|prOyEg`5#Mh=TT{S}?GNHfG*T>gDm;GTg^%ChOGpGM-=S5X12rS>>bi zHxm-1B6zQVw_8Jl+e|Kxk{~Wu;ySeqgjN^4jN|n=1^7rh;*BIYB#5cR&Q|35ng{cq zl~^06wVlC1+|SZZPdq<^B4t*=R%s3&XfB?B_R=9^kuDNGD5uisW+;-XvWYVf9{JL5 zigPp&W}LhH)@DR1XHEll-RqbwU|5f{Q%oWAI-?>%AqnzjsUfj(=_my?pRiqK0R55| z^XA`sBrsaI@kpE@+UFU7JG$+{bYJ!5tJRcu!${`W+*-j2g09a)lOx(an-gd=hi5V5ry1J=KNzkmL z+q$XS&jEe<1ms(QZky)1X}g5V$-$a2(ow0e;GtpvhQ4Wwi5!!{E<(MyFM zgiga<~(2fT%8OA@l9{v{$3XtmgT9cTdf-Ua7u2{3_=#mm`-BdR3)Yf!-XUP}h zbsuNzTL1Y6u6kc9a%mZ!;Mo%!R~wm0<=j^@wf4`dHDX0nBKA58d&-_5=0W;s#LbFn z@2E>g@29&^$5>l&*CH6WQh^g}38D)8Vv zvW)F94fm>+)%fMq@Pxkubw@_~ioiJ@O%bv6H`K5CG%a4O-Fj*A=BDc}?(DCLI4X2q zaO5t;;io%g$6#wDhES%C95TuZ#qW}-Za>f+4;T{oCWrDgI|EZamDd7`Ln_S$4=q*H_sGJ+Ft9bi3{*%IQ& z@3gyv2NsvPDCKE0W<0pAyf`}$E32CtAtFeBAcn#XT0xyH=2TL$*UG;Me0ZnPuzBpG zi-7X~1!gp?nP&O!%&JKY8_v|VrfQ~Y_Twz@dl9S~sFj9kq?+lUW)A!w)N!PYC_2Fx zUiDv2DUxjQq?nI%1Ybklw^O8|ZQTK1J#(V|#t+p8LQD)^^Fd`{CCQqMvvt~W4jkLs zrBjQGBK+`<-y_VV%+Ih@G?PbbsTTannxKT0K_5-iU6Ov+ZWq6Kx^#<;@Ecz1bCCI zl$g&azC{S>Akbi7JvX+^`q9`YeV$iHJHAvKqBcoS6((Op^bM40a4x!q#+~2Tx?h2A z(JMg42#3|JSU)Q^;HuS3ZDpY@7F4`<_b%v6GV_9erqq6m4$WvzjDFot!8Jy{Drwpz z;@ro}IwFi-rLLYP1Ft%UBz6e#l!D};iTDEd&|msOy4Y#0_k3>MnDUy$Q2ynkqKK$` z3XS)84%lMeJ2IkCE_dP>6apSls>xO2n!<2RjEj_(+aA7m!%awJ0(Xf5SFyxPPB$Oh zv6??rxKfnZ(#mms!N|GSsfLC}`0FL0gzIa*)O6LNsj^9a*1L|k=^!k?7s{W+`4VUg zklPnS>*K5ViToJcru4jmoBAKf2zEz^EBVENL1 znY?875FgG8yGwI~a7zn&Y-!^?7-_TT(+E74(VhQY;sf-8`r9{ZU`B@>r(PL>MfWf% zXLcYAdAuMAN2j|p?yZduvta9qnt!jfotGjo4tV{@HJ8_pN?}AaN{@8bC3@}SaTRx^ z5k??O?W+;yz16Lf61-hjdX?JeqMz|)`^qY36M+9WBOqZPu7U#V=_5R4N>;TFKgyW9 zGCSILE_wxeKXH_CLpKkw9eb=5B)sZ zVbAj1N&Z%_1B)lI4&u7B3Z-gAk0`o~9d$ii6aby9U{ooco24aWq*addJ2ErUVgKSx~ZsD%(VE=EBJ5{ zb3UzvSv*wg;H697(Y{BKB+jE5RQXJ`f8HAyiSAp2E$!Y+1ls#8^2~0lfp>aE*=xfO zo~^2sU?g5||K<2ccyLBmea1BQpQ&#?CU!Xx0;s5_;kl~tclm>N1dheFP~&LA#htA7 z`dyg_NfxFg&3EwJXGickwfR6TEt6IwGgQ`puPW7Ur)M{{(1zqa3I5%q^Od~3JnZ$S zdUch8xa|O82+(n{dlS6j_SmL$T(6;A+}+-4gGiP;U&#Ff*z$=Qe;aw`7rtQ*!Uw~u zS_Tu}Q~^{$*7xjpoC9;)=~abG~k1fU{-ZiW1#4{afxhRcLFiEzRs_FHMH zFuv*~FEmf(#T|diNWO2@;}f_QFOV}_Ic;CQt!9T`{EF^W)?WWuQ$^U7$!hiSg8S3m zNfrQrb$vSY58M{rX_$9>bLevwi6d&9KE9Qhz!`;CJx$w%#b!p19@38kFn~hFP|2IJ z&KFE2#@2E~$K!7n*_o%7W*Kgr*r`+RbXL9i^b2grlTwTCe*2{d`YmYvF?{dRhb@)H z{-~T#&LBjy-?;f+dDALBnXTf8TPc?q<_TEYy`0aYlA*2To;*Tjuc=;KwPHJs12->B zj4BAt0X%R!r9S>%zPx-)rZi@LG7ZQC%L5koI*)hc#E3wXFsYbk`n5D`aXHrKp4FUi zN68(JIUX0MGh;)%uC>7*Y4*J6<%gUc6VyjJ9lFqDV<0>T39D|sy83M_;05Xf3y^hL zG|yibm!G9k9GqPEe_Zpv4gKv`SugT@)NR?@NKsy32B^xWOdqytXleLQTGUVKX~k@a z#dNbR6b5fhD51=yA>8@8{qf24Ep)D!HhG({dNzKcR0jw0G2w`@_(l85_8VqZYF?dZ z&pBQi7#SE#W%*BBR%=1_C8T$ce3CkicUfRvHV8$R`q?oNb~F*?z03`_%zC|TVVS(u zx56$4BGt(cwX{eY2gTX{5rP2#R8d|TL0kpgGokHt_uTr+rU`#&ZhTL(m0(s3{{Y&t z=`P8$*zEhfOc*+DI}&(YqrG}|{gGx=@d-YX>tCl$-o(K+@wEl;QxXvXi@cAXX$U*i z(Vh6wzG3d;U{|_|*DDZVJMPE^N=yyTZV%N+BVt0326}ZL-J9-QX?;COn__lBD1xM^ zzIh|hWuoh!2Xo$~^UC>EHRVFE&??SK13rO_=XGU5PaEgenn)2~_Q%`}$h9bFN+MCUKU z9L4&@Q{Tg@B*@ihYe+b)5!=emN}x(YKVc+as2?foUHF$5@;l`_(m=98(1u%Zb@j`b zzWd!SWGFNel1H9w!JxsT=TrXZt>j7WxT9(=r%EX8ISw)RCQ5*WbnzrD)qygP^D*wY z$!zkZx-^Vg9?wF<^x@r==?yOS6+u+i(U6Ml>=-XtI7H&ZTqvKPFmK^EU?zQ3oSO&l z=qzrh7%U#8dRkhdYKx48UfUrIg|$z(e-B-tc9bYY`mt{1jUa3$& zXE&1&_mBGL6)J(1$we7%c@&A0PCZQA|ak?xN(D|3=Q)pSQpMK#Vs2q@C6pws6CnG>y4mI z`de?b#%upBS_}17TNQyw)}LiA^Vu)ZYec#gi;SSxxMHgm+jcRa66~byz*#XAL>gA; zlxo>>*@1Ybp|p|x(Sy0zHD4{Q)Tj*E;7Yv#!Ip*&YoTv@`_%Jl3~l$ez}o4yI^YN2 z#y{j!itXrmbT!hhXX=)TZ9l%(HsK4sS$;c#IIkz`$+>xNs!k*)$x6K|`;$2$7qd0F z^Y!L!(1>;Dh;zh2wJWb>5++h$3c<-XeR5SZyG?#^wUB|EO6oXSX_dXPYkVgy3|&7W z3eO<5DAp<+Z`$*}nLBCqrmfX1PM#>VWU=h^sr|Ov!wRG}?T~gj;1Xtk^ZdWJlK8*B4m{QiqTt(-0m`n6dS6d+{aDQ`H zu*?MjBR*l5ODi`l*u7%06@;paQhswb(bW!ccAK2b1c0UGo;7PDQ|9vyPbd-3g3s1`b4MrWVP<4=Q-vvfL-7I z#jQKddtLbS%MX-};BpJoDhs8C^MM%QQK3#Rp>IhX@q#Ta-IlGgl2RO>VuKu-EsACh z6*PoE54O4>x=5RMv|8~tQjovYgn^Y&@8TbjbFtd@^l5cKg=brP`;B>JyXVF`6K#$Q z95JhdkYd*}3Ge+cj+92cb-AC#(s^)SbVnS% z?3=I;$={kR-St>JOIri09N}>A3$72T`1tuiAVD!NoEY)4?>eN@cxu}tM^WR@USKL~ zYkS)Yq!-Lr++hjCjLwKt-b>9Ju?AH-rkw+;Z-lT1zG-QBW-Oc57-bb=mTztkgK*zhPIG|{-$p7d1WM}=bX)ce6_pz_fYt>vGE!Nbba?Q zoLYbopGhSj-GO<-a-C<7o6WY~n6&DFBLu+Rp?+~!@|%|^)V1|^7J)CYL}W5^Z_AL3 zFoZ(`VMsw3VgXVTM_w&VM!krOqln%0*5$Dsq@avfyJ)@6*d?;-`|7Tx^;3(0MJ{74 zeXy{hL9}nBFJ6GjXaU6_gG^+VCmn5i+V8_4*Md*oXD+77`EzLvcg`~liImiwz<)cp zn_$uYAb*{DWQeC7f*f{@QM@nVe@@H5u!e|LR6=F>tUt9&wjkyr2u3P_z*Uf@-Dv}d znhhT;2eiLwb;CohA|_q2jz!foi{heAwX;PSPEe9KBxSq7q5wA}1AqmFsJM7nQI215 zbTn!AzrPlL@Fb{BDK%TkncGRR-bACDg@MO`rDuT;GA+{yr7vc0PHucsCSGl(l66(8@+6AY3ay&A>A`Qed}+uSPh@-t2Dv_&BA#c8(6sOZ6A+y8t?Iv zb%m{Ydl%JP89jyoXbas!>8WSnlM9e^am*X7{R97iKuqp{^-C<3GO=MwgQ#>@-@U-l zgX%{ER`pl{^=(2X@2di-h&q=`RL*d3h)3&X_-j$z-Cvqfk z$V#;9Yn9)vp6wyg(XR3uUd;wTr4}W$T5tLG zzOJ1OKmIsW1G?+UqR(3Im7qw~_ki|_6;ZWd0R&jmN~%rk)iTh zwCSpaqLThm@zUoY*yq!@W7mlj+y4EC?;*(-#<)9QHu2)>*|EC#5m{!_OI8FUn{~)> z-{*(;)XSjjs?F~=XHBiqRY`R9^bp+jKPS$X6z|!48{t*GV0ncjXzj0BA_^GA9c7cB zU-gya$nNw_%VVsIp6w|@jeXl(3`LykXGk%F8>WqZbB^^3yT=#4(Pt982hWwcWaU^Q zMZ7%DY45p-uTv6=iiv?BtV&)+)5*$@n_8xn(Za$tIMnFi_v&h%QT>VN z!XjBz)vIbD;s<~xmo>)4+Xb?C;<9^<-*Pm8kcERH@m(Gsj(=(7zlF6g%T6%sv=_mg4R7n@;jtY zTEmV{Rf}P84pxtx<7PPx z(140WrNz58#)?kYyC?-Er12v*o1_`xL01AXM83XOpaRaAcInlh^>u4-k7*Wvaljnr!Oxu+5&k0k5=HJDr6jJPhjf%^SOnXLdOHY#Y15&?JC31c8Qxz91-j zugSi_l@p+nSwf^9;ZrB)c87);RNM0ZREiMxii8EMwWq*x(HSq4zTZRtp+v4z*skc* z3kCq-6s)3QwSPDDCxwEE7SrBSo;$5hf&9mkY5gT-1x3DvR^g8%Z&Pq76_VdV$%Ng->qD$G1ImWy_nu7u2nT8wfpyY>5}!mFJF-#w{>W!s%m*z zI$2*bzG;#-ayzT;T-`Lx{=Ty637lNY~-Er*{_4Q&G~+b#d_7%I5g zjb3KD>%PrfzsYHLd4Iblfq~`siz~6-@_=u7ia2V~KvltOE@uzA?viNDMW@-rG))%R zUjzl=)a-oc)rIHR`ugaOlTO5&1|qJ|!lD#g2W`HT7bUeb+C^j2d}&y46wJ4w(b0pr zwd><<0kX!LmOsteo^F1l{&Uu-`drSEUS-qMvEpoH;vqynp4y9MfjW14C#SsX8YnaL z@kfdeYk5awxu%sQnmTkVW<5vpU+ssu2ODn!FDXACJiXo~E!hk6o29;*4vhbO@MiSK z10j>y#m}NQYRi{2V)G0W2bEXo5C1%8#CwuB{uBQ0naET9z;y3-S(~CtBySRDqtTSL z&~Lc-u!qT=Dlm~CEcXgSVU?kTOp)ckai!!&1F|LaY+r6#`T z*nZii*=x4Wi0@%=o+ypy-FV9%fNtbn?vw)gOFSswAN@yHo+2={uktaiB%l57W?m~h ze^rU`^&0XE%szhhUmLEu8I-94ANE4B|Q+KQ~)B2#Xr8^7HuwS9rLNxYkh1}TdG-d>@~%pGS(sXl%0*@ z*yD44_vq+DP_f-akA5?jofp@*=>tQ4j7aHlCdLy)L<4_1J4D3@;70Zvq-SXnn%b5go$TGf>@RN;yAkn`FLqs~ctAM5c(NvCXWr-moA@c87IrQp?Y-S$WA(lcb_ii!Yb%ZAq< za~r}@1VXUe1(XDj9vpninTB1;M6Waq69CaXoxrF}88ny2m^(aKDnD7JSbw9^lcoQN zlxImU;7vyBnZCRnPsrCvx;?^`83v^YosQSS@nXLlONadeaQ<{JG;v*J-MUS5^P zmm`h)JO%2-zb>(9{JVS)_@#MMqp}J#H!9V6haCF6O&A1VXn}*TW&RbveUy-=^VZ|qHD{1a;g)Mc9jz0-qgPjK?#4%~hNC(C>OpO#rn5((Qm}uYZJe7y&*kyQjH|Ko_djB&%#fygMP^&O z1yghOIWI#DC&AfhKZP7d_D{uR0B4zB?4~5$FJXqV#jIJekS|o8&lplW!X%E)7SC_o z9>$R99+QtAihQqGK&rMwKG$}pH%`4=toz_{RWwEnvfRG@+heXniTv|&rAhh$k6E)# zS0*O-Vp_b#&tI`6oH_We94Ey~OL9?Yp|&il+&=zx@uUwA041G;kJ_&)Zd}QJdRc^R zgDf_Exk*w`K*wU+540j-i%*bpqnV&sMFHF(0tL$iFBrguRk!Y{LA#{T0UMQ^4L7L`ix?NzsZ`-Axz5Fhu(5RVR zjxn6kGcsy20fP?`z!!*9CxRYA5P4d{-*HY{tXQse|Mj6Rm^h{hjo4XB>hD} zb{*_B@hGzt5|hV}f+|gY@u&ng!KeZjP%_0$^=W}#kcq^us0>TOa)<6nxM_F3W{ePv zfP;hKf!CY3x( zVg(z9U?~SdfjX?SP66cLc_Q}v-RgXG6|dDrO8HZJvvb!9}v3qMJPem|t?rO~rMQ zfx%S`MAa^2ghSbSQMTzHA+(*M7iVlP_2S8}6D>GYaN;lf&Rk>c1?7&Jl@(E*>^*RH zvuJW6m}i#j#Ndt;+h23q>leC@xz9H@Il8$UQtDxbe498HtKZM+OjMZPj7eWTZPVOz zewYD*Y-c`@TK&BUm(JR-$%GZN3ic)xaD|6Rp}-a;SBKDpWGo$Q=y$`;!6CKZ1nm;~ zZAUs`uka|jWX>%6Bid(~i5o6nm4ZM1u5>pZ_l7;&qe`4!JhxfSxp{)uqY^|`ts3Wv zAAUw?b8e+HRvz+|9dYZ$*%iq!%_%tB>fnqC)ZX^mTasD`z=1PzobQ2a2*x@-XtHL4 zW)P_=eN=&R>3qQ47m=NYIL~%<&Yg@xvB*45-w}A*?ucxWUn;pzZ?bQJkqN!*t|+ilV?17Y(+q z<)3ck4~3CqRVvfs$rj>sm^g?$gYCfx)xUy3Lm3g0KMi)~={fhuE_ulggso@T1dJf} zL(pq+$2mXzr24KG?%tL1`=1WT_0@%_*FN-N(og!(2GKZ~?tGlLMy;Nhk*=Y?mAl1} zYM*=E1MFR~I-0=q>Kxx;%G?uL5Hjw29WggQAK91Z5-4$38YEIXVzixz4jO3`e;1tD z>m`2(AqB^|#hB;t@lWY!^V<&{gNZvE9G~>h zoBt9I`)0s1$=@F-JrLA(4FPFS`6V(VB%!CQ#Q#42Je)+;BWJ!=)_POftPD(Km`Y|BTs-8z# zoj}n07`{v>czug{*`0dE-FZZ#+WFc?>e2mGOnqE*uK;d%Y z!zX<%P*bv175D$E>8yjIe7`onbP7v|3(}1)u!NMvf`l|Ih;(;Jw}2qs-6zwnsTv$zW3Tu%Trns2b9uBe>YT~sywa%Hcl86b{tQJE9p2BQoSyf z>kMOL)*UyHysi{QT0&SOx$Xs5A$iE)h~`Jic|I;4!SEc$D4CA>Kr+T_=yR7lZgb}z z#-jU3^C-cc`-odE=38o)!22?Sk$iZJBq!#Mx4Fv2zzcou(QuxjuFjvXghkHbOID<0XZ6pVi)+^F{IjOWUw;_~>^%eIQKo zBCp2xd?dqjU7^&boQ%&N@;h*uH}%+szV%8bR%fo7ZFeCsHjhd;gFz%}aLmv>zd3pu z#}mJU&)JGuhe@6tnY$n0#8r^S8T(yAwCD8H;@_hBUi*!ZkT8Rp7sB zHP_b3;5opak^-=?!HM6^oLfu#s&ANUg|Ws1|@OFW&+d-s^4lKY>RMuw!)$^932?qbSyRv;Ul1wW}_x zyc}xgoIB(($MXMw7ND)Y{aU9&`#(qTbiY+Mw)TLXt*iXkJbKLYAr=Mjkzy)&>B#Cm(=VM5Lkxs1J2`k^b(>UGnc-F&6? zBa@FhkG&1i+hXw)fotvsH%OBE2Z2Eg47V>k6>g92)`i#Wr~m5WJOBQ?gZVwYuZS$X z2u6IVMvFTuqD;!%b310C!eIee`*xVv!LIRsbiDlR`;^%D`R22XI1e@GQ$HY!h{NiX z-c@;c1Yo}BA`45j`#L)Mp#9C6=Jj$-@>-<}su%mqXvLqu{LRf6JjQH;)fkS{viF(! zkv>I6#pBzTctFSay8r_2|6b1J)~n?PbQp?IX3A}wRk0^5{mG-o!U;!uk94snVE^!^ z8ohl6v`LEbqq0{42Qdtpa$J&;q)tswrxzD{+I1h%5vo#j?$xiZTIC3^Q+~R%^ls~h zNuxagv91glVoC}zI0Zvk?V{nMM4V!I4=5)LZHkavystG^GgfirM(d+u^`*95F?U0xc*FaHHzj@)U{ z3>zYCKtKTK?`lYi$<5X)^|GnWKeGi6dg;E{A|-VApMGTz?NoY4y|(-u z-sQ$uurC4iY#7q`um$Z+O0;6LqEIrz-G3B0$7t@*?-LVwpX#1?{zupKJ+H$Ev*4*e zT%VhoT<`vol1`ucTsfFX*Px$eTYaah{K={+-EY~Ve{VbPQn7rl6TR#42h3bFNuFG8 zCjjr5_tU$q499zqB)^c>{Q6**T{h*_R=@6x(<7Q;hIpV6y|ZVrxw7&F=ZASib2wZT zL3@0#F(JQeP`VkSO=jV1wVHE;-B}fgY4U(^1ww7QP|{o^_y}1+#bp?hoKW7L-0}H=VM8_RgGX1GXpp= z*+r-v%lJ^U`<0OMTzi=)EG62&u)V!%@8x zx*?czPvJR5L9uV-TodXvOe&C!<(x`xEL??P4)R4)0|#@&G=RFlI>aT8@|UzOZY|9l zLuNm-*v@&^L*C|_IpYT){T*JqoU`_7Whe^!NAw9dL|)wmUZfcx9h1HYQ{)e)g_&l;}lss%cdE{Cit~v8<56 zQ+0ECcsQA}irNJDQQ)h_^+DU7_uHF&6a+#xygTgL;J1nDLRBC^-XOy7F8hs=tkEVV zDvy-_eLPF|JZZ@#2=84F*P3)N0zc78k6zG_n9dg?FDy_P{{66loZ8eyQB#hq0qK@j z_^a@TP^v95)4%`y$Ks3U!yeU>BHD_usF6dQkNbKQK}YOb#?!%8SzsP8)}PUs`8zq~ zFO162A2i+n5ozorEm568n;rTulUes|1Ze3PmKQ_u{)Im0xz;p+Yjz7L+1oGbw}Prj z!!K^7G{17gYI?|O*6GU*Ih?c8n!V>Y-i(XZOI(Z=m?B0E6?`&Twk!%?C7 z9iIs>J^F~LYgN#KjZIziqM~AlCCR>C!S0q2Q0al%J&}KO6mcVJ?7Mp3u*L6wn$k(G z(zWpdl^azNK_Y}BCKZnHK~>2JrDPP^OONlbVb4&Ag$Ps$e@$o_SadoLK^EDE)Y3#Y zLi91YolWVWo)AIghdPY_ET6sWYxl>jqhLm4-^YQ7ltH|^!{7T~==i5fiqnULTWl?mpPp-~VK6Gx^iK8JvLx|;Sw!hgOIIv>N#iy$}C&V9Up;`A(uk-ptf zDhwRtlfoY~lqZE7*h=(RTd<4R5Q|_sE*`as7NH)6Ty@62tTM<`hCec+!TOlru@9(V z4sU94`E;-}sZDX9l>>IXf3_*4gqO7dr#jO(?QAE=XK2Z@kALD(ER;Jq{vn}Of57`sWg-CbEgE|%U*;X8)d$RW++|VbAMI?pA!L$A2X~qWqFMeN@UL(gg_wsX1gMvswnD=R@ zeFIV%K)+uKP^dp%bp2+LU^eN;XUSHZl#FQ zWZ-er?7wY9ODEp5Y4@OhlTwpXS~1M;9iT!KI*7r7#?PqVJV$cX?prtoM`Ob)F|!|Y z76fw@UM?(UW{R;FTR^u%Y9)gSEUDg$M5d_-;A9~+iOmUIlM+!}ONeLWiWP~9_yo?J zJQi}dWC&5rOaJa3C)4Fum?k*;U2vVV8jN!_i14jN;gMcp05vBZV}OL!rX)G|IeYAL zR~T-Doxng?qVLyG3Rg8oHI)4Yf@&308@q^D<3i=)zAhayG;#}~#JCEvBsX2Do+_s1 z=#cV%%sUyiIKD0-v10~WGo%12Sd}B}y1n*v!?O*HlEz>*w39y>snIAVyOY$DT7HFArrLGWsEd$Y};KP z2Oy~4IFNPAm@_j~mqK1bxx0_?2doND#P&zJaIQa6EGWE2a&@~wX0QxNKZ$p{K;|?@ zK0$DBN#awtHL?iUiJ=0>mBf&8i2nhdBh)we5k@7kOjaZz#1}$~<3`{j?EeoCY)wp&@R8qh-s(*RNKtxg;NjqfP-#vDUqGgE!70QII(2#I- zms{6Q`%VLR+8_AKku&&cAc~VRJWq||fUuNQ6>;_q148sm``V!EWISR=jU!*RToZ<^ zNIPJ*FfPE^N);~69nbPK$|B#&x5;b_rv&wTenz^+KV(-iFh{NY%OtUK4?j>bX@}m} zW$%$fb8Sewk7~8P;|F6>B5^`KFmjN{K`?^@kl&;!gAX9lYZ`9E#Y}I)O&v=p1MnrV z(a)F(scJ(hHBfGN--(&q@O`KgOOe?jb?uhYd?ff7PzwPA?bn75gF*QRs1NHB9`XDDW!z1Pd-k^L?4AW+B&V8K=I0AA6g@^@gkW@Ie_@1UzLsUjx4soWZpS{G&9FKCvE_@4HE$AC z42WN(3K0!s!^@0UU`!XTkRT$l*27hu;zzr_L$$d5uoZgMs9)tB zJ+RbPit?R0nXO(H(VB6UOqDYQYH_n4TMaYd&i$Ov(|P<;WYp4jV{q18B53V_#Vh^; z&ptyTm5)p6<<{AxbUEvx5^8O!DuTEYsgKLo6=v{j;o~tvnqve8A%2?|s6d0rO4i4&ys} z;8>+srNdBDUF{V!V1Ax89(4O`hDj*^_Tc8`Zh~~gkD18^WFvM{m-^f$6%o&tYD&bNdz~tr(k?y`@{wGz&~dE`czjJ0{kp$ z7NpT986y;!-49Y6L?GPW4;cy8!`PxBI3fMLgE|Y4ifg3xmWn{g;C!OWcVq)QzVbO-AvpE+uC1>R&D)`Kd?hvbXP0E{mJ+4( zX+ZFkplVVXK`LrrsT5=>rw)ymI#qvs%C#TOO$y$0S{Ynrm&GX!pw2J1Yl7a}%`Nq{ z?n|98TnArQFx(ND+1QEdb@_2K7f-LfQ>f>}UlNJG5mc;p<@s-FxSy!6g~>`j7G_I! zLfQv4NT6R@7^Xk<^7`a`K`42!^>N=uGW})1kL@QuVVEjYZ_Df!a)UIedW4UtsQhkY zIc~oFlAqsS2!r2kZ-3lmn|T1T3Po~2nws{AzAY>mU-LhQkOG=NXc%}kH7#BVJm(r8 z^1!$N!~z#XUN53By%udTu8h%{G^N$kf4QZy@+j$BsDdV~>LgrQ>gHnn^+s0Cbzl4W z-C0v0k<_)#ZLEFM3>O(rhcUVU?}(2q&S^B7xKCS25m1f<6v@-e>;etRuq?3I*oqmE zFc4ZGol-+S;)6coy^dlM3763}@W_l&#zLFh*X~x=Iti=udwW4$<5z`gQpC@|{NUf6 zU2}_NCeYppooRAj{L=v{xrV4v4s`_msk@1TE9^N}k`;AgQ{K4!$)Jm`l~w(;W2Y7; zAn!(Z%Dwi4Cpt z@(%Tcq2KArnyb~#qkjqVKX<9u(ri3wN}uTP z!p+(psd|R=foKj~4SMl!1LB7*Lw1J==wCT4PQ1GZd@@asCU8Lq1#>SSAt@l6}h{26e!6 z-CrS4izi89KQJG}etLHDlX=cY&&#k{doZuG^rmst!TWLAmJ#!825J|&A-ine8#%!6 zWcBWg9>nJGW6;%05i;sd7#Byp%U9_lXqT6l zS1Mp9r62$du53Lk{n06vb5ai{3fzbYT49-4*9@TS`ayd4rC|KF&E)D8i_z4TV)EP8 zGF9%;t+eP;302z~(RgfPIQ9KH*61 z(~j4}Z#qQZtSL_X{@GwxFUz1$&WcygWvGgVSXCFt17a0ea!>s>ywqLX0%G4Sv(VDh zE$uHrBk(Swq|R&-Q4*{BHq@5s7)sI`tqo33dD0%==y!BF%$z`) z)plJgfp^8=0T&y{*xkIAczv$kEkZj|c=G@5S$KQnJ)KFYZL1Fjb0~{0!6H#_a$C-R zbZ8Nx6m7Hf_0uWD;sqLw+DtepPe)cqz;ypE*~IH-=rdlE7XHg>sq;DMwz)ALqt?Tu zz486pNb{RRlPd>DK^ky#d{v$-851!vk2T7=I@%6hTo^2rYM$N6Z-}^=0xO4xBY*Ae zbKIu1tjS~fGSkEK-@UP}kNTCx_T9GFxaOVC$0G2fU0tXP@Aab1EW;QZ2$K(r>3mJA zfWPLh!mdRe@eCxfx%sExw@+Q%+(J@-4Xc!>sLb99>}Z?{4n)@hmHJFLVXnZgj(HL14LI zMGJm|XN<}f*~LkBb$R*t97jz}{W-ba+`P0DcfLCEWg^Dph?fyiMOA;=r%pPuDM<|; z;h+$$j&W;wtMf6gw3I|g=Vfhsdx&*g9+q?kHu}UglYMOM;YvD2SLB1-tkW1u!{oB( zDXa`-WZ{`tfyV8g{|yZf6Xc6eOOgJiqo+3)ftd>BF^^8>9t6mH83qfn;0}iU5ai~E zyE{MK{o&q`f~q}k)~^tEY{({k^z%>%Ipms5oQCSj2s&Mt^b(+x)KQo+xwtU-dV9%x zW4_VsJV;%j-na>Le&O=!e(k+J5uCzAF6#ubI)p>asJ>^$*?}p{X$i@&2Ob*p)ZVw41-KgIU zOO?gN-IE~36dtY9&n_E%x9CzeBVo*NFJc>9B;5FY@|1GUFnJvqu5~u+^3r7>@KfXqRR30BXDaf#&iye1?>2SN0WPl*5ibjM5t)?4rmD#ujv)$XkS z_tcl$r4W48lvca2@al-x>hXI zwLiSj{_s<7;S;a{j+Lo})My}k9(R9s+6Z@bzK0m>rXH<&D;IU7mwFXiNBLvvDu2Ru z+?juLtU$ean;Ys(U-qg zN$*-1T3}ON7?7@}fQ#~=WY@8<_4~wQVFDXxk2{QOBnrkeCgDZ|Ye&i{2j`Q(!D}p_ z3mRU;UH?_3{>SsB-(MzEJ9i)G1c&ISE_@u2rN)>8KDIj5zvHpSAA>ui*pTO)VMX_m zxbEkFY`xZ9Q4tYm5|VH;Bz%i}tP(^1_{WnXxy7;Gm+XFJU(cxLMPF83*Xkoy$HW#_ zgbCQjRh)f|T>&}~^Xs}~SqfMpBq*B_=kyz#e0VPcoP*3*d2mqn*8_J+&LxWxve~5? zs8zO64_wQJ^XbDzzQMHb4YE_m&!uvIK^_T8(?=1XLZ=U20$HpQhMXd4ZvY zOS@#1@)Xz1QoF;^p!Ju$YS%=N^It13121Y)cA8_6OB)+sz#(*|RKQ`gdJ_Fk2SKV6 zFmIBrQobV+o2^tKPpi;4?Wmvs&02>tOw>DgeeEgPsPIXMeWmsv_t4sa-dJbw-XDHW zF(9a3&l|!TL-x8FHOB)^rTg|mYm+0?x@A^omh6`8H zFtJ{Gip!)8rk8Itk90Qs^AyShOh_-HKR_~KZ+v0gx}|^t8~+`&N4(onsLxSsVD^k` z?6s`xTUJHJdcmRm`V(k={y9o!__}Gz6RXTh0mxT$=$*Fe8Be3L-=4D;qje<2&*s++ zY1!<=7)`Y+bZi>^Boa|&w;s$vr@VJI4@QD8AmbcTr|+bcWEW&y@**n{gfV8&U*%JZ z?jp2}%bdGVGcLtsH7ItKNPJ9Is&#gWJY~2wZJ1v+yNr@zqG&x*a#`Wo;`NHP_}QN5 zx^Ji!Q{nc10>47AX6j7!sfeFNfT2rIx^TOHcGU8_^c&%Uf2N<~yBbe^eZc5a=6XTn z_OhUy?I#3+XP_u6t<9G3-A4W56ySW~p>ky4y~DyIi=nQRENV-$UrA-KrGrg(LGV06 zFN@&C!R6A|f{QIrJ-ZcR)MRaRqA-S zBYx$9?cdnJWlXXc#C^8pn#xMk;V92ije8-5lC;D$?T~<-P$LH1>1XMPI3+iyVlMx+69@U~;0)8%F27#H=3PnKALJc{N+qN~{Ry$l z?AY?xFRHii8I5n#lucXs8XQ-rP7|zO|8~tyF)wn_ho=t$rPz8#&2+{K0Drt@C6aNtWl3k1qHG;?b5gSM+Lb`+3Qs-^#)767M6&ey$-4wJxV>1S682uTVv{Sb?Nj8 z7>wcYa<+SK^9&M`qW7rfeUR?#=wI6RV_y%Cn!B0jihc+<4d&mIUHjITKgjg^La_!` zo9do~ugaSJoxI2{sm!jZdb_h|n+1K+TB>x>{dw-$nBGe+&umsj6E4vPCx1gu9|819 zv3+TFc3DN>0$$L@|6boshSUwm9V?q+Z*(bUlcVx-?n7+dSl0+j!j$0#u-KG+bkSa& z3b#S&ObJ#DDWc+*-)HtK@~NhPj9Cqa4NkYXnz^OjF2lO-UU}eE*6^*PveRWa!!ZEkQwhJr^v;b>g|#1JjD-<9hr2 zZ5jCfFF_c*_l&`vhn+BU7*6Cdmq{5D*2&(Fzz@~TF0+{VT%NxjA6+{6y{Gt!mDr&UZ+xu;>3?2lnJ6XqW0?~6Ji)Qm%Z?IMZGXpz{4s4O%*BIHzsmjqt|taq5Lu!BxHJ+3Ny4casvk4-|Z(uC!AphFbV$HhOE9?p=cP38T`` z^i))QwL`p}K2_mgM*I#0afe9!ENgt8NIZbq$HJS)n=zYF(OeaosmUd&DqM==5DbZr z*D;L6ma$*}IWmcLBq9#}^->m}%r2YWHhXQmb=M$Wz|+Wk5a(=}Gdn_4L_N9RCN_?4 zls>ymlw3xoH1!A(%RJ`$-SG$bE`TFd?%1{7nwXl-{%oaTwWZX-lu0Mz00iV^j=Qmf zbBdB}u~&`R#i%Nm!OVQtC{db(ogUMLaI*ynLUl^eX-23X?p`*PwSFbQi;pQxjKx7H z^ElpuMUk94CHXN|7Aks}7NVPORg%iewc0DDaeQy2#!V}Kow55+tAH;#wpQC#|AU>M zEzHjpwl*tRm9_3$uT;wa({qmW9fCN-7lv(yUm7svY7@VF-dd&rSsJ!XjvrbU1pYWd z*F$$JOQ}JME5$FqDKp;f3kN>Kcz!o%ax?Jtu@78zN`$!27m7`xil0QN3W+9SYKDeT zkgez1#q!1Rk;guVvecTQKN;3Ub^fWttB}(+&U^7&eECm-rb`mV?zptsL3Z)%y+m0! zn>n=wd@;8?_ed5$$v!KcO=k3My0ylmDM4;NVio~a0Sd$C%qVH-`=I^#yS^B$TN$1e e@MD#D$Iz4EP3gV-L;y^0LKNlHWUFONL;eqRa_bxb From a9b45c6fdcba03437cca43f9613f85c60f98c0c2 Mon Sep 17 00:00:00 2001 From: Magnus-Cosmos Date: Tue, 19 Sep 2023 01:31:26 -0400 Subject: [PATCH 354/729] Fix slider path calculations for edge cases --- osu.Game/Rulesets/Objects/SliderPath.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/osu.Game/Rulesets/Objects/SliderPath.cs b/osu.Game/Rulesets/Objects/SliderPath.cs index 05960ec416..cf6d0d212b 100644 --- a/osu.Game/Rulesets/Objects/SliderPath.cs +++ b/osu.Game/Rulesets/Objects/SliderPath.cs @@ -261,10 +261,14 @@ namespace osu.Game.Rulesets.Objects // The current vertex ends the segment var segmentVertices = vertices.AsSpan().Slice(start, i - start + 1); var segmentType = ControlPoints[start].Type ?? PathType.Linear; - - foreach (Vector2 t in calculateSubPath(segmentVertices, segmentType)) + // No need to calculate path when there is only 1 vertex + if (segmentVertices.Length == 1) + calculatedPath.Add(segmentVertices[0]); + else if (segmentVertices.Length > 1) { - if (calculatedPath.Count == 0 || calculatedPath.Last() != t) + // Skip the first vertex if it is the same as the last vertex from the previous segment + int skipFirst = calculatedPath.Last() == segmentVertices[0] ? 1 : 0; + foreach (Vector2 t in calculateSubPath(segmentVertices, segmentType).Skip(skipFirst)) calculatedPath.Add(t); } From 0360646e9b8858ef52ab4ad5599a32dbdc3ddbb4 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 19 Sep 2023 14:38:53 +0900 Subject: [PATCH 355/729] Avoid fast fade out if slider head was not hit --- osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 09d98654c3..1a6a0a9ecc 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -317,7 +317,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables switch (state) { case ArmedState.Hit: - if (SliderBody?.SnakingOut.Value == true) + if (HeadCircle.IsHit && SliderBody?.SnakingOut.Value == true) Body.FadeOut(40); // short fade to allow for any body colour to smoothly disappear. break; } From 4504c9fc43f6783d07041275a40d3fdff29d8f02 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 19 Sep 2023 14:42:07 +0900 Subject: [PATCH 356/729] Update tests in line with new slider snaking behaviour --- .../TestSceneSliderSnaking.cs | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneSliderSnaking.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneSliderSnaking.cs index 630049f408..aef7dcaa59 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneSliderSnaking.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneSliderSnaking.cs @@ -135,9 +135,9 @@ namespace osu.Game.Rulesets.Osu.Tests } [Test] - public void TestRepeatArrowDoesNotMoveWhenHit() + public void TestRepeatArrowDoesNotMove([Values] bool useAutoplay) { - AddStep("enable autoplay", () => autoplay = true); + AddStep($"set autoplay to {useAutoplay}", () => autoplay = useAutoplay); setSnaking(true); CreateTest(); // repeat might have a chance to update its position depending on where in the frame its hit, @@ -145,15 +145,6 @@ namespace osu.Game.Rulesets.Osu.Tests addCheckPositionChangeSteps(() => 16600, getSliderRepeat, positionAlmostSame); } - [Test] - public void TestRepeatArrowMovesWhenNotHit() - { - AddStep("disable autoplay", () => autoplay = false); - setSnaking(true); - CreateTest(); - addCheckPositionChangeSteps(() => 16600, getSliderRepeat, positionDecreased); - } - private void retrieveSlider(int index) { AddStep("retrieve slider at index", () => slider = (Slider)beatmap.HitObjects[index]); From 046e96afcd9ce4c32fcf2a7c1bcaafe9ba811782 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 19 Sep 2023 14:51:03 +0900 Subject: [PATCH 357/729] Apply NRT to slider snaking tests --- .../TestSceneSliderSnaking.cs | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneSliderSnaking.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneSliderSnaking.cs index aef7dcaa59..13166c2b6b 100644 --- a/osu.Game.Rulesets.Osu.Tests/TestSceneSliderSnaking.cs +++ b/osu.Game.Rulesets.Osu.Tests/TestSceneSliderSnaking.cs @@ -1,8 +1,6 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -33,7 +31,7 @@ namespace osu.Game.Rulesets.Osu.Tests public partial class TestSceneSliderSnaking : TestSceneOsuPlayer { [Resolved] - private AudioManager audioManager { get; set; } + private AudioManager audioManager { get; set; } = null!; protected override bool Autoplay => autoplay; private bool autoplay; @@ -41,12 +39,12 @@ namespace osu.Game.Rulesets.Osu.Tests private readonly BindableBool snakingIn = new BindableBool(); private readonly BindableBool snakingOut = new BindableBool(); - private IBeatmap beatmap; + private IBeatmap beatmap = null!; private const double duration_of_span = 3605; private const double fade_in_modifier = -1200; - protected override WorkingBeatmap CreateWorkingBeatmap(IBeatmap beatmap, Storyboard storyboard = null) + protected override WorkingBeatmap CreateWorkingBeatmap(IBeatmap beatmap, Storyboard? storyboard = null) => new ClockBackedTestWorkingBeatmap(this.beatmap = beatmap, storyboard, new FramedClock(new ManualClock { Rate = 1 }), audioManager); [BackgroundDependencyLoader] @@ -57,15 +55,8 @@ namespace osu.Game.Rulesets.Osu.Tests config.BindWith(OsuRulesetSetting.SnakingOutSliders, snakingOut); } - private Slider slider; - private DrawableSlider drawableSlider; - - [SetUp] - public void Setup() => Schedule(() => - { - slider = null; - drawableSlider = null; - }); + private Slider slider = null!; + private DrawableSlider? drawableSlider; protected override bool HasCustomSteps => true; @@ -150,7 +141,7 @@ namespace osu.Game.Rulesets.Osu.Tests AddStep("retrieve slider at index", () => slider = (Slider)beatmap.HitObjects[index]); addSeekStep(() => slider.StartTime); AddUntilStep("retrieve drawable slider", () => - (drawableSlider = (DrawableSlider)Player.DrawableRuleset.Playfield.AllHitObjects.SingleOrDefault(d => d.HitObject == slider)) != null); + (drawableSlider = (DrawableSlider?)Player.DrawableRuleset.Playfield.AllHitObjects.SingleOrDefault(d => d.HitObject == slider)) != null); } private void addEnsureSnakingInSteps(Func startTime) => addCheckPositionChangeSteps(startTime, getSliderEnd, positionIncreased); @@ -170,7 +161,7 @@ namespace osu.Game.Rulesets.Osu.Tests private Func timeAtRepeat(Func startTime, int repeatIndex) => () => startTime() + 100 + duration_of_span * repeatIndex; private Func positionAtRepeat(int repeatIndex) => repeatIndex % 2 == 0 ? getSliderStart : getSliderEnd; - private List getSliderCurve() => ((PlaySliderBody)drawableSlider.Body.Drawable).CurrentCurve; + private List getSliderCurve() => ((PlaySliderBody)drawableSlider!.Body.Drawable).CurrentCurve; private Vector2 getSliderStart() => getSliderCurve().First(); private Vector2 getSliderEnd() => getSliderCurve().Last(); From c0f603eb0e4007cf8a35e8af4e25d9e01441b1ec Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 19 Sep 2023 15:27:55 +0900 Subject: [PATCH 358/729] Fix typo in comment --- osu.Game.Tournament/Screens/MapPool/MapPoolScreen.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Tournament/Screens/MapPool/MapPoolScreen.cs b/osu.Game.Tournament/Screens/MapPool/MapPoolScreen.cs index 07dc2bea54..f80f43bb77 100644 --- a/osu.Game.Tournament/Screens/MapPool/MapPoolScreen.cs +++ b/osu.Game.Tournament/Screens/MapPool/MapPoolScreen.cs @@ -126,7 +126,7 @@ namespace osu.Game.Tournament.Screens.MapPool if (CurrentMatch.Value == null || CurrentMatch.Value.PicksBans.Count(p => p.Type == ChoiceType.Ban) < 2) return; - // if bans have already been placed, beatmap changes result in a selection being made autoamtically + // if bans have already been placed, beatmap changes result in a selection being made automatically if (beatmap.NewValue?.OnlineID > 0) addForBeatmap(beatmap.NewValue.OnlineID); } From 73db68a49a8226b57c2c41be024fbab946094fd6 Mon Sep 17 00:00:00 2001 From: Magnus-Cosmos Date: Tue, 19 Sep 2023 02:28:28 -0400 Subject: [PATCH 359/729] Check if path lists are empty --- osu.Game/Rulesets/Objects/SliderPath.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/Objects/SliderPath.cs b/osu.Game/Rulesets/Objects/SliderPath.cs index cf6d0d212b..0ac057578b 100644 --- a/osu.Game/Rulesets/Objects/SliderPath.cs +++ b/osu.Game/Rulesets/Objects/SliderPath.cs @@ -261,14 +261,17 @@ namespace osu.Game.Rulesets.Objects // The current vertex ends the segment var segmentVertices = vertices.AsSpan().Slice(start, i - start + 1); var segmentType = ControlPoints[start].Type ?? PathType.Linear; + // No need to calculate path when there is only 1 vertex if (segmentVertices.Length == 1) calculatedPath.Add(segmentVertices[0]); else if (segmentVertices.Length > 1) { + List subPath = calculateSubPath(segmentVertices, segmentType); // Skip the first vertex if it is the same as the last vertex from the previous segment - int skipFirst = calculatedPath.Last() == segmentVertices[0] ? 1 : 0; - foreach (Vector2 t in calculateSubPath(segmentVertices, segmentType).Skip(skipFirst)) + int skipFirst = calculatedPath.Count > 0 && subPath.Count > 0 && calculatedPath.Last() == subPath[0] ? 1 : 0; + + foreach (Vector2 t in subPath.Skip(skipFirst)) calculatedPath.Add(t); } From 8e199de78ac57a7d9ed959378eb17df40c7354e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Tue, 19 Sep 2023 08:30:17 +0200 Subject: [PATCH 360/729] Tweak nano beatmap card UX further to meet expectations --- .../Drawables/Cards/BeatmapCardNano.cs | 2 - .../Cards/CollapsibleButtonContainerSlim.cs | 237 +++++++++++------- 2 files changed, 142 insertions(+), 97 deletions(-) diff --git a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardNano.cs b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardNano.cs index 2f46bc51d6..29f9d7ed2c 100644 --- a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardNano.cs +++ b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardNano.cs @@ -149,8 +149,6 @@ namespace osu.Game.Beatmaps.Drawables.Cards }; c.Expanded.BindTarget = Expanded; }); - - Action = () => buttonContainer.TriggerClick(); } private LocalisableString createArtistText() diff --git a/osu.Game/Beatmaps/Drawables/Cards/CollapsibleButtonContainerSlim.cs b/osu.Game/Beatmaps/Drawables/Cards/CollapsibleButtonContainerSlim.cs index d17ff0d759..151c91f4c1 100644 --- a/osu.Game/Beatmaps/Drawables/Cards/CollapsibleButtonContainerSlim.cs +++ b/osu.Game/Beatmaps/Drawables/Cards/CollapsibleButtonContainerSlim.cs @@ -8,6 +8,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Sprites; +using osu.Framework.Input.Events; using osu.Game.Configuration; using osu.Game.Graphics; using osu.Game.Graphics.Containers; @@ -17,10 +18,11 @@ using osu.Game.Online.API.Requests.Responses; using osu.Game.Overlays; using osu.Game.Resources.Localisation.Web; using osuTK; +using osuTK.Graphics; namespace osu.Game.Beatmaps.Drawables.Cards { - public partial class CollapsibleButtonContainerSlim : OsuClickableContainer + public partial class CollapsibleButtonContainerSlim : Container { public Bindable ShowDetails = new Bindable(); public Bindable FavouriteState = new Bindable(); @@ -56,30 +58,15 @@ namespace osu.Game.Beatmaps.Drawables.Cards protected override Container Content => mainContent; - private readonly APIBeatmapSet beatmapSet; - private readonly Container background; - private readonly Container buttonArea; + private readonly OsuClickableContainer buttonArea; private readonly Container mainArea; private readonly Container mainContent; - private readonly Container icons; - private readonly SpriteIcon downloadIcon; - private readonly LoadingSpinner spinner; - private readonly SpriteIcon goToBeatmapIcon; - private const int icon_size = 12; - private Bindable preferNoVideo = null!; - - [Resolved] - private BeatmapModelDownloader beatmaps { get; set; } = null!; - - [Resolved] - private OsuGame? game { get; set; } - [Resolved] private OsuColour colours { get; set; } = null!; @@ -88,15 +75,13 @@ namespace osu.Game.Beatmaps.Drawables.Cards public CollapsibleButtonContainerSlim(APIBeatmapSet beatmapSet) { - this.beatmapSet = beatmapSet; - downloadTracker = new BeatmapDownloadTracker(beatmapSet); RelativeSizeAxes = Axes.Y; Masking = true; CornerRadius = BeatmapCard.CORNER_RADIUS; - base.Content.AddRange(new Drawable[] + InternalChildren = new Drawable[] { downloadTracker, background = new Container @@ -110,39 +95,10 @@ namespace osu.Game.Beatmaps.Drawables.Cards Colour = Colour4.White }, }, - buttonArea = new Container + buttonArea = new ButtonArea(beatmapSet) { Name = @"Right (button) area", - RelativeSizeAxes = Axes.Y, - Origin = Anchor.TopRight, - Anchor = Anchor.TopRight, - Child = icons = new Container - { - RelativeSizeAxes = Axes.Both, - Children = new Drawable[] - { - downloadIcon = new SpriteIcon - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Size = new Vector2(icon_size), - Icon = FontAwesome.Solid.Download - }, - spinner = new LoadingSpinner - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Size = new Vector2(icon_size) - }, - goToBeatmapIcon = new SpriteIcon - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Size = new Vector2(icon_size), - Icon = FontAwesome.Solid.AngleDoubleRight - }, - } - } + State = { BindTarget = downloadTracker.State } }, mainArea = new Container { @@ -168,23 +124,13 @@ namespace osu.Game.Beatmaps.Drawables.Cards } } } - }); - } - - [BackgroundDependencyLoader] - private void load(OsuConfigManager config) - { - preferNoVideo = config.GetBindable(OsuSetting.PreferNoVideo); - - downloadIcon.Colour = spinner.Colour = colourProvider.Content1; - goToBeatmapIcon.Colour = colourProvider.Foreground1; + }; } protected override void LoadComplete() { base.LoadComplete(); - preferNoVideo.BindValueChanged(_ => updateState()); downloadTracker.State.BindValueChanged(_ => updateState()); ShowDetails.BindValueChanged(_ => updateState(), true); FinishTransforms(true); @@ -195,51 +141,152 @@ namespace osu.Game.Beatmaps.Drawables.Cards float targetWidth = Width - (ShowDetails.Value ? ButtonsExpandedWidth : ButtonsCollapsedWidth); mainArea.ResizeWidthTo(targetWidth, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); + background.FadeColour(downloadTracker.State.Value == DownloadState.LocallyAvailable ? colours.Lime0 : colourProvider.Background3, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); + buttonArea.FadeTo(ShowDetails.Value ? 1 : 0, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); + } - var backgroundColour = downloadTracker.State.Value == DownloadState.LocallyAvailable ? colours.Lime0 : colourProvider.Background3; - if (ShowDetails.Value) - backgroundColour = backgroundColour.Lighten(0.2f); + private partial class ButtonArea : OsuClickableContainer + { + public Bindable State { get; } = new Bindable(); - background.FadeColour(backgroundColour, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - icons.FadeTo(ShowDetails.Value ? 1 : 0, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); + private readonly APIBeatmapSet beatmapSet; - if (beatmapSet.Availability.DownloadDisabled) + private Box hoverLayer = null!; + private SpriteIcon downloadIcon = null!; + private LoadingSpinner spinner = null!; + private SpriteIcon goToBeatmapIcon = null!; + + private Bindable preferNoVideo = null!; + + [Resolved] + private OverlayColourProvider colourProvider { get; set; } = null!; + + [Resolved] + private BeatmapModelDownloader beatmaps { get; set; } = null!; + + [Resolved] + private OsuGame? game { get; set; } + + public ButtonArea(APIBeatmapSet beatmapSet) { - Enabled.Value = false; - TooltipText = BeatmapsetsStrings.AvailabilityDisabled; - return; + this.beatmapSet = beatmapSet; } - switch (downloadTracker.State.Value) + [BackgroundDependencyLoader] + private void load(OsuConfigManager config) { - case DownloadState.NotDownloaded: - Action = () => beatmaps.Download(beatmapSet, preferNoVideo.Value); - break; + RelativeSizeAxes = Axes.Y; + Origin = Anchor.TopRight; + Anchor = Anchor.TopRight; + Child = new Container + { + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] + { + new Container + { + RelativeSizeAxes = Axes.Both, + Padding = new MarginPadding { Left = -BeatmapCard.CORNER_RADIUS }, + Child = hoverLayer = new Box + { + RelativeSizeAxes = Axes.Both, + Colour = Colour4.White.Opacity(0.1f), + Blending = BlendingParameters.Additive + } + }, + downloadIcon = new SpriteIcon + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Size = new Vector2(icon_size), + Icon = FontAwesome.Solid.Download + }, + spinner = new LoadingSpinner + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Size = new Vector2(icon_size) + }, + goToBeatmapIcon = new SpriteIcon + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Size = new Vector2(icon_size), + Icon = FontAwesome.Solid.AngleDoubleRight + }, + } + }; - case DownloadState.LocallyAvailable: - Action = () => game?.PresentBeatmap(beatmapSet); - break; - - default: - Action = null; - break; + preferNoVideo = config.GetBindable(OsuSetting.PreferNoVideo); } - downloadIcon.FadeTo(downloadTracker.State.Value == DownloadState.NotDownloaded ? 1 : 0, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - spinner.FadeTo(downloadTracker.State.Value == DownloadState.Downloading || downloadTracker.State.Value == DownloadState.Importing ? 1 : 0, - BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - goToBeatmapIcon.FadeTo(downloadTracker.State.Value == DownloadState.LocallyAvailable ? 1 : 0, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - - if (downloadTracker.State.Value == DownloadState.NotDownloaded) + protected override void LoadComplete() { - if (!beatmapSet.HasVideo) - TooltipText = BeatmapsetsStrings.PanelDownloadAll; + base.LoadComplete(); + + State.BindValueChanged(_ => updateState(), true); + FinishTransforms(true); + } + + protected override bool OnHover(HoverEvent e) + { + updateState(); + return base.OnHover(e); + } + + protected override void OnHoverLost(HoverLostEvent e) + { + updateState(); + base.OnHoverLost(e); + } + + private void updateState() + { + hoverLayer.FadeTo(IsHovered ? 1 : 0, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); + + downloadIcon.FadeTo(State.Value == DownloadState.NotDownloaded ? 1 : 0, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); + downloadIcon.FadeColour(IsHovered ? colourProvider.Content1 : colourProvider.Light1, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); + + spinner.FadeTo(State.Value == DownloadState.Downloading || State.Value == DownloadState.Importing ? 1 : 0, + BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); + spinner.FadeColour(IsHovered ? colourProvider.Content1 : colourProvider.Light1, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); + + goToBeatmapIcon.FadeTo(State.Value == DownloadState.LocallyAvailable ? 1 : 0, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); + goToBeatmapIcon.FadeColour(IsHovered ? colourProvider.Foreground1 : colourProvider.Background3, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); + + switch (State.Value) + { + case DownloadState.NotDownloaded: + Action = () => beatmaps.Download(beatmapSet, preferNoVideo.Value); + break; + + case DownloadState.LocallyAvailable: + Action = () => game?.PresentBeatmap(beatmapSet); + break; + + default: + Action = null; + break; + } + + if (beatmapSet.Availability.DownloadDisabled) + { + Enabled.Value = false; + TooltipText = BeatmapsetsStrings.AvailabilityDisabled; + return; + } + + if (State.Value == DownloadState.NotDownloaded) + { + if (!beatmapSet.HasVideo) + TooltipText = BeatmapsetsStrings.PanelDownloadAll; + else + TooltipText = preferNoVideo.Value ? BeatmapsetsStrings.PanelDownloadNoVideo : BeatmapsetsStrings.PanelDownloadVideo; + } else - TooltipText = preferNoVideo.Value ? BeatmapsetsStrings.PanelDownloadNoVideo : BeatmapsetsStrings.PanelDownloadVideo; - } - else - { - TooltipText = default; + { + TooltipText = default; + } } } } From 0555d22eb8cc5edd3eaf1ab20e63d474bc75194c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 19 Sep 2023 16:35:22 +0900 Subject: [PATCH 361/729] Add comment mentioning why hover is disabled on the notification type --- osu.Game/Database/MissingBeatmapNotification.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game/Database/MissingBeatmapNotification.cs b/osu.Game/Database/MissingBeatmapNotification.cs index d98c07ce1f..f2f7315e8b 100644 --- a/osu.Game/Database/MissingBeatmapNotification.cs +++ b/osu.Game/Database/MissingBeatmapNotification.cs @@ -83,6 +83,7 @@ namespace osu.Game.Database card.Width = Content.DrawWidth; } + // Disable hover so we don't have silly colour conflicts with the nested beatmap card. protected override bool OnHover(HoverEvent e) => false; protected override void OnHoverLost(HoverLostEvent e) { } From 7f30354e61d6d9fa8bc931b894f5040ff6d25c4c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 19 Sep 2023 17:20:58 +0900 Subject: [PATCH 362/729] Adjust sizing slightly to remove need for `CollapsibleButtonContainerSlim` --- .../Drawables/Cards/BeatmapCardNano.cs | 6 +- .../Cards/CollapsibleButtonContainerSlim.cs | 293 ------------------ .../Database/MissingBeatmapNotification.cs | 4 - 3 files changed, 3 insertions(+), 300 deletions(-) delete mode 100644 osu.Game/Beatmaps/Drawables/Cards/CollapsibleButtonContainerSlim.cs diff --git a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardNano.cs b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardNano.cs index 29f9d7ed2c..4ab2b0c973 100644 --- a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardNano.cs +++ b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardNano.cs @@ -38,7 +38,7 @@ namespace osu.Game.Beatmaps.Drawables.Cards [Cached] private readonly BeatmapCardContent content; - private CollapsibleButtonContainerSlim buttonContainer = null!; + private CollapsibleButtonContainer buttonContainer = null!; private FillFlowContainer idleBottomContent = null!; private BeatmapCardDownloadProgressBar downloadProgressBar = null!; @@ -66,12 +66,12 @@ namespace osu.Game.Beatmaps.Drawables.Cards Height = height, Children = new Drawable[] { - buttonContainer = new CollapsibleButtonContainerSlim(BeatmapSet) + buttonContainer = new CollapsibleButtonContainer(BeatmapSet) { Width = Width, FavouriteState = { BindTarget = FavouriteState }, ButtonsCollapsedWidth = 5, - ButtonsExpandedWidth = 20, + ButtonsExpandedWidth = 30, Children = new Drawable[] { new FillFlowContainer diff --git a/osu.Game/Beatmaps/Drawables/Cards/CollapsibleButtonContainerSlim.cs b/osu.Game/Beatmaps/Drawables/Cards/CollapsibleButtonContainerSlim.cs deleted file mode 100644 index 151c91f4c1..0000000000 --- a/osu.Game/Beatmaps/Drawables/Cards/CollapsibleButtonContainerSlim.cs +++ /dev/null @@ -1,293 +0,0 @@ -// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. -// See the LICENCE file in the repository root for full licence text. - -using osu.Framework.Allocation; -using osu.Framework.Bindables; -using osu.Framework.Extensions.Color4Extensions; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Shapes; -using osu.Framework.Graphics.Sprites; -using osu.Framework.Input.Events; -using osu.Game.Configuration; -using osu.Game.Graphics; -using osu.Game.Graphics.Containers; -using osu.Game.Graphics.UserInterface; -using osu.Game.Online; -using osu.Game.Online.API.Requests.Responses; -using osu.Game.Overlays; -using osu.Game.Resources.Localisation.Web; -using osuTK; -using osuTK.Graphics; - -namespace osu.Game.Beatmaps.Drawables.Cards -{ - public partial class CollapsibleButtonContainerSlim : Container - { - public Bindable ShowDetails = new Bindable(); - public Bindable FavouriteState = new Bindable(); - - private readonly BeatmapDownloadTracker downloadTracker; - - private float buttonsExpandedWidth; - - public float ButtonsExpandedWidth - { - get => buttonsExpandedWidth; - set - { - buttonsExpandedWidth = value; - buttonArea.Width = value; - if (IsLoaded) - updateState(); - } - } - - private float buttonsCollapsedWidth; - - public float ButtonsCollapsedWidth - { - get => buttonsCollapsedWidth; - set - { - buttonsCollapsedWidth = value; - if (IsLoaded) - updateState(); - } - } - - protected override Container Content => mainContent; - - private readonly Container background; - - private readonly OsuClickableContainer buttonArea; - - private readonly Container mainArea; - private readonly Container mainContent; - - private const int icon_size = 12; - - [Resolved] - private OsuColour colours { get; set; } = null!; - - [Resolved] - private OverlayColourProvider colourProvider { get; set; } = null!; - - public CollapsibleButtonContainerSlim(APIBeatmapSet beatmapSet) - { - downloadTracker = new BeatmapDownloadTracker(beatmapSet); - - RelativeSizeAxes = Axes.Y; - Masking = true; - CornerRadius = BeatmapCard.CORNER_RADIUS; - - InternalChildren = new Drawable[] - { - downloadTracker, - background = new Container - { - RelativeSizeAxes = Axes.Both, - Anchor = Anchor.CentreRight, - Origin = Anchor.CentreRight, - Child = new Box - { - RelativeSizeAxes = Axes.Both, - Colour = Colour4.White - }, - }, - buttonArea = new ButtonArea(beatmapSet) - { - Name = @"Right (button) area", - State = { BindTarget = downloadTracker.State } - }, - mainArea = new Container - { - Name = @"Main content", - RelativeSizeAxes = Axes.Y, - CornerRadius = BeatmapCard.CORNER_RADIUS, - Masking = true, - Children = new Drawable[] - { - new BeatmapCardContentBackground(beatmapSet) - { - RelativeSizeAxes = Axes.Both, - Dimmed = { BindTarget = ShowDetails } - }, - mainContent = new Container - { - RelativeSizeAxes = Axes.Both, - Padding = new MarginPadding - { - Horizontal = 10, - Vertical = 4 - }, - } - } - } - }; - } - - protected override void LoadComplete() - { - base.LoadComplete(); - - downloadTracker.State.BindValueChanged(_ => updateState()); - ShowDetails.BindValueChanged(_ => updateState(), true); - FinishTransforms(true); - } - - private void updateState() - { - float targetWidth = Width - (ShowDetails.Value ? ButtonsExpandedWidth : ButtonsCollapsedWidth); - - mainArea.ResizeWidthTo(targetWidth, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - background.FadeColour(downloadTracker.State.Value == DownloadState.LocallyAvailable ? colours.Lime0 : colourProvider.Background3, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - buttonArea.FadeTo(ShowDetails.Value ? 1 : 0, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - } - - private partial class ButtonArea : OsuClickableContainer - { - public Bindable State { get; } = new Bindable(); - - private readonly APIBeatmapSet beatmapSet; - - private Box hoverLayer = null!; - private SpriteIcon downloadIcon = null!; - private LoadingSpinner spinner = null!; - private SpriteIcon goToBeatmapIcon = null!; - - private Bindable preferNoVideo = null!; - - [Resolved] - private OverlayColourProvider colourProvider { get; set; } = null!; - - [Resolved] - private BeatmapModelDownloader beatmaps { get; set; } = null!; - - [Resolved] - private OsuGame? game { get; set; } - - public ButtonArea(APIBeatmapSet beatmapSet) - { - this.beatmapSet = beatmapSet; - } - - [BackgroundDependencyLoader] - private void load(OsuConfigManager config) - { - RelativeSizeAxes = Axes.Y; - Origin = Anchor.TopRight; - Anchor = Anchor.TopRight; - Child = new Container - { - RelativeSizeAxes = Axes.Both, - Children = new Drawable[] - { - new Container - { - RelativeSizeAxes = Axes.Both, - Padding = new MarginPadding { Left = -BeatmapCard.CORNER_RADIUS }, - Child = hoverLayer = new Box - { - RelativeSizeAxes = Axes.Both, - Colour = Colour4.White.Opacity(0.1f), - Blending = BlendingParameters.Additive - } - }, - downloadIcon = new SpriteIcon - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Size = new Vector2(icon_size), - Icon = FontAwesome.Solid.Download - }, - spinner = new LoadingSpinner - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Size = new Vector2(icon_size) - }, - goToBeatmapIcon = new SpriteIcon - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Size = new Vector2(icon_size), - Icon = FontAwesome.Solid.AngleDoubleRight - }, - } - }; - - preferNoVideo = config.GetBindable(OsuSetting.PreferNoVideo); - } - - protected override void LoadComplete() - { - base.LoadComplete(); - - State.BindValueChanged(_ => updateState(), true); - FinishTransforms(true); - } - - protected override bool OnHover(HoverEvent e) - { - updateState(); - return base.OnHover(e); - } - - protected override void OnHoverLost(HoverLostEvent e) - { - updateState(); - base.OnHoverLost(e); - } - - private void updateState() - { - hoverLayer.FadeTo(IsHovered ? 1 : 0, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - - downloadIcon.FadeTo(State.Value == DownloadState.NotDownloaded ? 1 : 0, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - downloadIcon.FadeColour(IsHovered ? colourProvider.Content1 : colourProvider.Light1, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - - spinner.FadeTo(State.Value == DownloadState.Downloading || State.Value == DownloadState.Importing ? 1 : 0, - BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - spinner.FadeColour(IsHovered ? colourProvider.Content1 : colourProvider.Light1, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - - goToBeatmapIcon.FadeTo(State.Value == DownloadState.LocallyAvailable ? 1 : 0, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - goToBeatmapIcon.FadeColour(IsHovered ? colourProvider.Foreground1 : colourProvider.Background3, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - - switch (State.Value) - { - case DownloadState.NotDownloaded: - Action = () => beatmaps.Download(beatmapSet, preferNoVideo.Value); - break; - - case DownloadState.LocallyAvailable: - Action = () => game?.PresentBeatmap(beatmapSet); - break; - - default: - Action = null; - break; - } - - if (beatmapSet.Availability.DownloadDisabled) - { - Enabled.Value = false; - TooltipText = BeatmapsetsStrings.AvailabilityDisabled; - return; - } - - if (State.Value == DownloadState.NotDownloaded) - { - if (!beatmapSet.HasVideo) - TooltipText = BeatmapsetsStrings.PanelDownloadAll; - else - TooltipText = preferNoVideo.Value ? BeatmapsetsStrings.PanelDownloadNoVideo : BeatmapsetsStrings.PanelDownloadVideo; - } - else - { - TooltipText = default; - } - } - } - } -} diff --git a/osu.Game/Database/MissingBeatmapNotification.cs b/osu.Game/Database/MissingBeatmapNotification.cs index f2f7315e8b..bc96625ead 100644 --- a/osu.Game/Database/MissingBeatmapNotification.cs +++ b/osu.Game/Database/MissingBeatmapNotification.cs @@ -83,10 +83,6 @@ namespace osu.Game.Database card.Width = Content.DrawWidth; } - // Disable hover so we don't have silly colour conflicts with the nested beatmap card. - protected override bool OnHover(HoverEvent e) => false; - protected override void OnHoverLost(HoverLostEvent e) { } - private void beatmapsChanged(IRealmCollection sender, ChangeSet? changes) { if (changes?.InsertedIndices == null) return; From 62f97a8d83a5baa59da76cdcea179b6be500360a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Tue, 19 Sep 2023 10:27:24 +0200 Subject: [PATCH 363/729] Adjust beatmap card thumbnail dim state to match web better --- .../Drawables/Cards/BeatmapCardThumbnail.cs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardThumbnail.cs b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardThumbnail.cs index ad91615031..5a26a988fb 100644 --- a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardThumbnail.cs +++ b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardThumbnail.cs @@ -3,15 +3,15 @@ using osu.Framework.Allocation; using osu.Framework.Bindables; +using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; using osu.Game.Beatmaps.Drawables.Cards.Buttons; -using osu.Game.Graphics; using osu.Game.Online.API.Requests.Responses; using osu.Game.Overlays; using osu.Framework.Graphics.UserInterface; using osuTK; -using osuTK.Graphics; namespace osu.Game.Beatmaps.Drawables.Cards { @@ -25,7 +25,7 @@ namespace osu.Game.Beatmaps.Drawables.Cards set => foreground.Padding = value; } - private readonly UpdateableOnlineBeatmapSetCover cover; + private readonly Box background; private readonly Container foreground; private readonly PlayButton playButton; private readonly CircularProgress progress; @@ -33,15 +33,22 @@ namespace osu.Game.Beatmaps.Drawables.Cards protected override Container Content => content; + [Resolved] + private OverlayColourProvider colourProvider { get; set; } = null!; + public BeatmapCardThumbnail(APIBeatmapSet beatmapSetInfo) { InternalChildren = new Drawable[] { - cover = new UpdateableOnlineBeatmapSetCover(BeatmapSetCoverType.List) + new UpdateableOnlineBeatmapSetCover(BeatmapSetCoverType.List) { RelativeSizeAxes = Axes.Both, OnlineInfo = beatmapSetInfo }, + background = new Box + { + RelativeSizeAxes = Axes.Both + }, foreground = new Container { RelativeSizeAxes = Axes.Both, @@ -68,7 +75,7 @@ namespace osu.Game.Beatmaps.Drawables.Cards } [BackgroundDependencyLoader] - private void load(OverlayColourProvider colourProvider) + private void load() { progress.Colour = colourProvider.Highlight1; } @@ -89,7 +96,7 @@ namespace osu.Game.Beatmaps.Drawables.Cards bool shouldDim = Dimmed.Value || playButton.Playing.Value; playButton.FadeTo(shouldDim ? 1 : 0, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); - cover.FadeColour(shouldDim ? OsuColour.Gray(0.2f) : Color4.White, BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); + background.FadeColour(colourProvider.Background6.Opacity(shouldDim ? 0.8f : 0f), BeatmapCard.TRANSITION_DURATION, Easing.OutQuint); } } } From 0593c76c57436757e7da3ada6556c683396fdbfa Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 19 Sep 2023 17:34:24 +0900 Subject: [PATCH 364/729] Fix log output using incorrect name --- osu.Game/Scoring/ScoreImporter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Scoring/ScoreImporter.cs b/osu.Game/Scoring/ScoreImporter.cs index 2875035e1b..26594fb815 100644 --- a/osu.Game/Scoring/ScoreImporter.cs +++ b/osu.Game/Scoring/ScoreImporter.cs @@ -56,7 +56,7 @@ namespace osu.Game.Scoring catch (LegacyScoreDecoder.BeatmapNotFoundException e) { onMissingBeatmap(e, archive, name); - Logger.Log($@"Score '{name}' failed to import: no corresponding beatmap with the hash '{e.Hash}' could be found.", LoggingTarget.Database); + Logger.Log($@"Score '{archive.Name}' failed to import: no corresponding beatmap with the hash '{e.Hash}' could be found.", LoggingTarget.Database); return null; } } From f726c38215b6ff35305969b7c7e79f89a25818f0 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 19 Sep 2023 17:41:00 +0900 Subject: [PATCH 365/729] Pass `ArchiveReader` instead of `Stream` to simplify resolution code --- .../TestSceneMissingBeatmapNotification.cs | 4 +-- .../Database/MissingBeatmapNotification.cs | 14 ++++----- osu.Game/Scoring/ScoreImporter.cs | 30 ++++--------------- 3 files changed, 14 insertions(+), 34 deletions(-) diff --git a/osu.Game.Tests/Visual/UserInterface/TestSceneMissingBeatmapNotification.cs b/osu.Game.Tests/Visual/UserInterface/TestSceneMissingBeatmapNotification.cs index 23b9c5f76a..f5506edf3b 100644 --- a/osu.Game.Tests/Visual/UserInterface/TestSceneMissingBeatmapNotification.cs +++ b/osu.Game.Tests/Visual/UserInterface/TestSceneMissingBeatmapNotification.cs @@ -1,7 +1,6 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -using System.IO; using System.Linq; using NUnit.Framework; using osu.Framework.Allocation; @@ -9,6 +8,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Database; using osu.Game.Overlays; +using osu.Game.Tests.Scores.IO; namespace osu.Game.Tests.Visual.UserInterface { @@ -27,7 +27,7 @@ namespace osu.Game.Tests.Visual.UserInterface AutoSizeAxes = Axes.Y, Anchor = Anchor.Centre, Origin = Anchor.Centre, - Child = new MissingBeatmapNotification(CreateAPIBeatmapSet(Ruleset.Value).Beatmaps.First(), new MemoryStream(), "deadbeef") + Child = new MissingBeatmapNotification(CreateAPIBeatmapSet(Ruleset.Value).Beatmaps.First(), new ImportScoreTest.TestArchiveReader(), "deadbeef") }; } } diff --git a/osu.Game/Database/MissingBeatmapNotification.cs b/osu.Game/Database/MissingBeatmapNotification.cs index bc96625ead..261de2a938 100644 --- a/osu.Game/Database/MissingBeatmapNotification.cs +++ b/osu.Game/Database/MissingBeatmapNotification.cs @@ -2,19 +2,18 @@ // See the LICENCE file in the repository root for full licence text. using System; -using System.IO; using System.Linq; using osu.Framework.Allocation; using osu.Framework.Bindables; -using osu.Framework.Input.Events; using osu.Game.Beatmaps; using osu.Game.Beatmaps.Drawables.Cards; using osu.Game.Configuration; +using osu.Game.IO.Archives; +using osu.Game.Localisation; using osu.Game.Online.API.Requests.Responses; using osu.Game.Overlays.Notifications; using osu.Game.Scoring; using Realms; -using osu.Game.Localisation; namespace osu.Game.Database { @@ -29,7 +28,7 @@ namespace osu.Game.Database [Resolved] private RealmAccess realm { get; set; } = null!; - private readonly MemoryStream scoreStream; + private readonly ArchiveReader scoreArchive; private readonly APIBeatmapSet beatmapSetInfo; private readonly string beatmapHash; @@ -39,12 +38,12 @@ namespace osu.Game.Database private IDisposable? realmSubscription; - public MissingBeatmapNotification(APIBeatmap beatmap, MemoryStream scoreStream, string beatmapHash) + public MissingBeatmapNotification(APIBeatmap beatmap, ArchiveReader scoreArchive, string beatmapHash) { beatmapSetInfo = beatmap.BeatmapSet!; this.beatmapHash = beatmapHash; - this.scoreStream = scoreStream; + this.scoreArchive = scoreArchive; } [BackgroundDependencyLoader] @@ -89,7 +88,8 @@ namespace osu.Game.Database if (sender.Any(s => s.Beatmaps.Any(b => b.MD5Hash == beatmapHash))) { - var importTask = new ImportTask(scoreStream, "score.osr"); + string name = scoreArchive.Filenames.First(f => f.EndsWith(".osr", StringComparison.OrdinalIgnoreCase)); + var importTask = new ImportTask(scoreArchive.GetStream(name), name); scoreManager.Import(new[] { importTask }); realmSubscription?.Dispose(); Close(false); diff --git a/osu.Game/Scoring/ScoreImporter.cs b/osu.Game/Scoring/ScoreImporter.cs index 26594fb815..b85b6a066e 100644 --- a/osu.Game/Scoring/ScoreImporter.cs +++ b/osu.Game/Scoring/ScoreImporter.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.IO; using System.Linq; using System.Threading; using Newtonsoft.Json; @@ -55,36 +54,17 @@ namespace osu.Game.Scoring } catch (LegacyScoreDecoder.BeatmapNotFoundException e) { - onMissingBeatmap(e, archive, name); Logger.Log($@"Score '{archive.Name}' failed to import: no corresponding beatmap with the hash '{e.Hash}' could be found.", LoggingTarget.Database); + + // In the case of a missing beatmap, let's attempt to resolve it and show a prompt to the user to download the required beatmap. + var req = new GetBeatmapRequest(new BeatmapInfo { MD5Hash = e.Hash }); + req.Success += res => PostNotification?.Invoke(new MissingBeatmapNotification(res, archive, e.Hash)); + api.Queue(req); return null; } } } - private void onMissingBeatmap(LegacyScoreDecoder.BeatmapNotFoundException e, ArchiveReader archive, string name) - { - var stream = new MemoryStream(); - - // stream will be closed after the exception was thrown, so fetch the stream again. - using (var scoreStream = archive.GetStream(name)) - { - scoreStream.CopyTo(stream); - } - - var req = new GetBeatmapRequest(new BeatmapInfo - { - MD5Hash = e.Hash - }); - - req.Success += res => - { - PostNotification?.Invoke(new MissingBeatmapNotification(res, stream, e.Hash)); - }; - - api.Queue(req); - } - public Score GetScore(ScoreInfo score) => new LegacyDatabasedScore(score, rulesets, beatmaps(), Files.Store); protected override void Populate(ScoreInfo model, ArchiveReader? archive, Realm realm, CancellationToken cancellationToken = default) From cdb5fea513f06bf18eefc62a8b0d4997d4c8a91d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 19 Sep 2023 17:53:00 +0900 Subject: [PATCH 366/729] Remove unused translations --- .../Localisation/OnlineSettingsStrings.cs | 5 ----- osu.Game/Localisation/WebSettingsStrings.cs | 19 ------------------- 2 files changed, 24 deletions(-) delete mode 100644 osu.Game/Localisation/WebSettingsStrings.cs diff --git a/osu.Game/Localisation/OnlineSettingsStrings.cs b/osu.Game/Localisation/OnlineSettingsStrings.cs index 5ea53a13bf..0660bac172 100644 --- a/osu.Game/Localisation/OnlineSettingsStrings.cs +++ b/osu.Game/Localisation/OnlineSettingsStrings.cs @@ -54,11 +54,6 @@ namespace osu.Game.Localisation ///

yftJ!Y0GsdcN%;MEM+5u>2KjHnOqx_AeVsl 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 literal 87032 zcmeFYcT^Nlw>H`{3_0hdM3E#p=PXFhNsu_?obwDBBqN9fB`86VC>eo4B#1~B5Rj+@ z$vMy5(cgQ{dC$7v{o|~4zyA(v^-$AY^;GR=KYLeIcTb|OwkjbW9UcGxgpbse^#K5k zE`k9ZEcCyVps6bWpcx7=H1*TB31sr}@pN!@gEILAdqJ6?LCy{U5Hwes=j?MwqPY}h zN7)GhsMmb>^G=BtkFKR~^f@`-R~p_blgrSotPm}%5WqW*)}C#!qMSv0WbabQy7V-MmxXa%qLcidT8xF7G(rNEY9o!Xm;if6T&=0dn0LTzYf4 z+h)lFQNa=U;XejXmfXB{_5*)PKkVOj`s&S}RET(z!g4FafFe0K2u1whW4xg{c+s`k zvb1U#aR>HcKLW}06GpU?w5Y@SbZsDIjgOV(P9N%KzZ|jHF(2;hK*dT~V%l~8ROZ?F zkoW36{~*R5XZb-14=mbeX3Szd zzo)}W+Yd%kBqA2E(*~8BZL=4~4DNB4YTiywRTO9Nlo$AZ7HL^H<}lX(T-vIi1a~*A zdb@7!QeAx}nb$Ps!(H7x9YQY?fN}1_*LgM_$`~C=R3m+HzQ5m!}B^A(+x$Gm(mZ^vHqH3Rz{^{qG0bR@pL47j4rG4BYN{Mxb*GQS&mGdO2r zj5<5EvgZkd@^oo#eYj$E{qT6(M9F|xn_6#V&{Q)r*+id&W3!^*l1l&SP=U{SM>>xx zR&I9w-7EpY7usF|O9(N!wrg%*l>edyCrZ%su={g?!EYpW?sbM(;BS*fB(v+|h2|&y zvX&JLClAjLFP&MNnY%(%&z~e`)3?k*e@ZItb@0J>YK70f+--F_H^k^Ywi*6xB{$Sa z{>6SzXm<<8T|NI;6*T&>;$B(Kj=?G;C^Um)SkS^GI z^z99GP|}}(6L(z{bbL&}dE`C6#Y<+$7dEbLI#cfDlk36#i3y{7byn(%woF8O&Ot~{O|UXa zz2jShewcYQ9?g;X`g|o@Y!*ht{rGcrC8W;49UR@t1?i1PZGBSHxVNU3H3b&V4C4=3 zpM*kPs+$Gmgrx2K9cajeG>7?};@%&RTWScM#N!cG;l0=4@HJR`9oR4G`ru$LZ|bu0 znU9OGN_WIAl#>`wYFzu*j=)>~n&6J6U++fVvs%pN@|+6qz2ROf33~5%F?9)XzD^J^ z@LVH+=Um5lIpZwHAKm+jU*V21Rz{|6I>uTOvoLDk;!x%yrvGUL@jL&w+S*iCu7XGS zsT*=fFnVx;lyDYqT+Sl)xy-Sn1sX;6Fk8(;892#)M5|(c6Qs2QlWHGL61pGF)^)rv zmRk9NlZA~HxAtyHwlMBfcm9tB0S`h0Q4$cBFDh6J0nMd!%*-9^gN0^=^q<{i5|f|L z5&N=8d?JxI2Zh^8X^%jXlV!aFLD((lrU}{>p)>i4R=|GooMU7`vmB84LyxA!DXkzz zxuYa}yVTUN`x{8mZ!taO&G^IWo4cwszO}^ifIJTpLi>6@{2@DQBLm!!+^OrCQu?~c z>Xg`e;+7vbTcnF~O6hpu(;ZPkG832g&FPfvUyz1zMir*~GtE_#`h{9reloqCgfE`B z-rK`0L|}7TQLg9JI?VmZ9=Z1uDje~{x_q1@Rqt2OkaYG3T|OcG^LPhy>Vl47MXm50 zG8Lw33lFDI0u*o0oi-SO(35j4nasiz1y}3mV#oPn{MX0{ed`=sz=%$S;`ih19F9KG zhdeKfGI*(T)1GE0voN%-&&eY323~bNVGCosW2iH}`Pl2N=k_ke*ieT^tXh_pLak8z zXJNhEri@Sb>?7V+B#ezYy?C_oE6hkA!4JU3-dsJ;k9oOTY=Lv1Uq>a9A+V3uq+jjA z0kMIXl}X}1c9l-mHtoOK?hR?mBCo>@ZV+NTgOXJAh?H`t(+rnqW zkHNB&X87ux%5TG%?Xw&(IB=!p!r9w_R!pz0HQZt!;=N3}l64%8XHO0%gh?q3`h)N# z%`^M(Lo~bIn!HeMR}NTDB4SMe@!LOe7V-AH*JN+45nm80o|F4yp+?G9+bNzt_aK9! zU|zz8(OjCOC!5LcYGMZ8&|_JdO?T!+aBY68i!`Scf1R@fh~%YbY5{@luhx5+$sWrG zf+ac*v-&jxe3dZ8!j}&MCw{7tP_qTt2WxB}5Hd9*zMfoD_^Z$-*cxt z=!U)2M_21@0v7YDFTqoogM*lB42mzc-m}|dK!4O?O3$1I>f+M328#81hh}@!dkuI4 zt!>E}#T&X7?IW0{E-K@Psie;KqqCY9MPW3*`~65+-M&3)B6@URUT9K)I~I>ziQ&2k zA5JuPKmxI{B4Oc$Pv`nkE9l0*`+2cfgiXpvQshTM1t$H zA3Py(uZ&50jFz?SctU@Mg-odW8wquig~;I3J$W8aWxX<4(xwW{ZasT4A+50VdX9R7 z&>6PP3ZWl~S2kC_^_IpSL9|zo zJgy9(t(*5P&YHjz&c}ARU!u!=doqTJSQk*%_je&u@P)3A5s|5UwaKuJGu@_jN#)+z zyCjcNhJO5>k!Tcy%lTt7kUcS)y*N|5oCL5oJYNZP!w$}~A14Y~Cwt%4a<|($vp<<$ z9W^*?rup?wFeHs+T=OaZlUD3OEG*#kL5y3E3&w|M%WX`4`^f;VJ!SxJl&B=a&zh8P zB8AgrA|6s56V-Z|LSTf8s2oR;6vqi+!{hW+uqTUbqXlYL8fMBb#ai58{&INMAj#7n z+5%h%hABqMw^bS%P($PkB~?-*S^r!9L9e%Rrd4s_bE?uSBv@qeMe@%#UFICFWgU5cB~HKdWQ^okyDnqSkiIw3wl3xSs=O{SEjr_3MZI=MLMsFn+KRwXoVfq&G)ia?fj>Xo~8dbP^D|iLFl-2SHHw z{RHbF&2u&f zEd2~vUVG8$jxatn@<0;cpN1rfNgg~5Ua|6S#5gyqGmLp4EvG(nC3*LOjLkFr*={=C zY`Xg;P{MEg>+t7&oz<+VKRm@_xloGGLtVU81#Zks@MZSl2 z6%~)8QsOkMj(n77(xvg32-C8Q+nSlGcZkv+^oaZ1CFrTr{E2mx0qE7rb5aq(o3$Jy z#t9pjpGQ}e$QwF=FPLfySf>auKZ?a?Vh!{N+z|Jrz>0oukqpK?6Peq&-;k-_klg;N z5_Z|8`SZl2a42LO^-=UD%&)r>4n$@@%{$xf^pwN z-xENT@VBALd>KJqb*#2~{sR`xWkE#rbV0(GV8Q1vxOSbE6HnzxOMk1Lr*gUcW>U|5 zM^b%o!uX0*~P zCyx(8Fjq&_I*O`THI6n25G5;X51O};wNlt)6Mn0}Sx}D3*vNV?p{%-x!6a{y4>QWCDiQ;V@o@x1cp8-tkHpVQjS5M>utgOmrcI)!XQeG;N!rS%~ z7!>4Fba#Xe$|j3GjI-voSMh*mjMZ>df4{4S#VDNbdmVbJ4&ruL4n|CK35gpy?>)V= zNIeYxZ29}nECOb6K& z+!B?jAcZ#%1>jy~p08QGTDJCID;IpulPIR**!cQdnzq5)Gef%yyI;zZ58uC!O~WN2 z_ff`!0*oKgPx~p9afxcP$3;j5NThv$)JH!Pqxy(nV_cDo!sLYtpIk?a2g-X3C@9Nr z*-bSKVyFIa_>}0_oAkynK4#M1l%JP?(9(0LeML0rStMw`!h+Y}fQ3}Lf5s`p4WmTd z{nKNmR?}&}Wol>N)p8gmxaqhq!Mur@sf~C!~o;mt9X&B9=kL_C8Oy*H) zhvp84W_>&=0$LyT4En1`9BpqYYSDPHr+Z6o;@!u#1R!(d6D$pv?1)Qi_7BGfhUO7F zsxzz+YLp=VCDKz8UPkluK*HOc7d+;JRXYz>#6{^iZW4;9ri#8Cy?srA0v1uXc|Mj7!6~_>O;YYEMo0)t&82Rp9cFARid}I=VAEIh?(VW+Poljcb80PH@XIu31ZI zlSz7W*0!n`CJ^!c2OGp9XlO`^BhA(P)76^8?PQq>3cSMa8Qj_KfNuobCj)E71k&r3 zct||B&!x=6grNBOeY-!~FmwL5+1&MRr_kzbqD^phUXr!r;;F_wZsAz?Jr zRCt;rDMzUe~-?JKT(2Nxs^l``kr)-woIE*^Ja`%{(@<9u0@gg2BLvivU$hT)(@h)T)9h zi{<1^57CswX_O)$;ErBH)G#!2?I z%C7>sUH54~R7_)Ue!RzU+GD!#8#ZI_qJNH zdhzv*hcjcq-6K#k!}*N)NJ_t?r^1$*Ii&M*mN&TtmywJ!7yhUImn#C{WUdKq7jXQs zO;%k}LlV%L`Hdry=eO8>T_a73=@QsVQ>yHFQ)|lu8%HNI+xs8x3MpZR>crTvE5o&`_Oa`A{J|*xG$2(t;$k#g49>m?ySrz?hiO-1bJz)C;+13sg-a#9IWUB9muDXtdG3t8}z?Tl@n3U!j@FE7Ivxjd3t3AoDqIQnZ z`wvxj)In}1#E)u2ewSjU6-4A4POT%5RB6o}wD-;evvuoA^sc)Ptq*!;%PRY7#y#yc z8EcFadT1Mszvj|vSbrQ?3H>Id`+U$WtTIVs_VH4~hI`WIZ!Mk2P5y8l)VnIOhWCh$ z(e}zAGOD1B63!4hBH|R9w+D1VCK>wXPxs|^!8C%E6-znglkvu5aeRi8r^>RlilyZBOU#vV_RYfG03nznskO4R9Km+l(!W8#$h6 zl&ui8!YV4*hByGPhM32|!~^T4~d17AO;ZRko<|K_2~>T82%G(!fH0)(4>(xp;80=hCq()}XoDogE(5Y>`Pi`A;` z2CC$=O!Z~AM0z?LJRdmHC)gZ#w^dfQg0Ye)89$#qwN;)!VE-N^ijNz%DZHrWes7;NU@uIxd`!VAY2GS5s86!7KXF$|7M zMNsMM+6dfwxN6C#x2ZmzuBCmCn`nXrQi5t9w&*^ub}q&dfEmfF(Z_h-EXuz+oxV0h z@V+lmA1F0e?7kP;u0*XN|R!$xAm1iN7x86KJM zM03}D)$;4Eo z82zra`B^T1S2_?Q1yNdy$XeZUT44SV(Q*8Q^Wn9qOm~GyDk$Zk~G*HdklyA{@rYK3)aG#a$3h_>Pv(7F)jeB4yl7gG3wdv*Z z#bUkkgDUCZh5_pVW!K}!-*JLp7=k%;U!8#;1{GYzw1-E_ct(<1orsm*e76bJEYkY< zWUs9}%$>#c_Cj))Y)q#f_!dH7I0%c*w*>;e*1HVrK+aE6rAw9MqY{niPQs}wYaZCAHDc%tSJ3ZpfH za+3^&jwT3BnT{i8;>)KE&eE&0_<=Wq6g+L+k2oOU7KE@1wP~6*|Fg=@4pUK{G5h#^ zl{-({SD>viNerrttX+A_)Kb)~;>PqWJ*_DQrKtHedGm6E*aOTLDXBF2!$(m2KxcCG zb#gjf9<|cI-9GHy%;i~mPnkRL-;|NVL05*iSwwH-GjMz0t(E5641T-?cg-%6ibl8T zNqEN2?E7aKK2Hn1fp z@0OKmUNDS6I05#KIXM(SAMFP4o#oMY>oY8p4vu?+w1cu>`{PojSrhr4dpOs)36_u( zNct`28`-;)A^7yALIShAkFy?a z*5^Tc%@=9>cBv4IXp}w{)^j-=foD&!;xHu%2yP5WZC&CB2*6ha1lQ{Tfauq`#algb zLO&w9)yAW49340bfSv=_=Ni={v)X#<~$lcAuS29S31Hf{$O2Pf(BtU4zFr*u&2zh{wa1^$)~97|KvzJ0E8+ zKW9%5razcAwx0feGAu0U>rDSKK6fuIt^b7g@ckDHXg>IYY`pjcc=`F<-TD5#g|DAV z02<_91NuL<@HIp~QRCBx`g;2N*g;hSpdNm#{|;eq_n+;({C(X1nqzOr2X%wGqpSL& zdlmR^U8+9P(*4gCe<*NtcK7<*3QhKZtLf+L@Ly#8x3T@X^4FYy9|*enf8zeP+W%qu z-^%D(T3V9Io_79!hWAKWhUHKHlJ=f<&i0aji(+>6VzvT;0z6^@0wO%ZwzgtCwonlv z9(x;M2RmC^0TFv~p?`yV1fvm@Lir{~|^DZ-swL1n74EoI@uVbiU&I&xG|a(*E%HfAQ~M&iKFB z0~-2&JNX~+`@eMkFJ1p52L4Bt|5siAOV|I1f&WqE|5exjZ*<}P*OmwBfnEj$qBk_i zHz6iTMbp^zk5mGQmF%mF5!BqnfU?$(WgHLD4Uyz z9(@wq?~#@Y_69D9>JC#&(*5rMzyv%}Rxk{j+v(hhT5D|(egULt=I%*2rgkoMeU?Sa zehDn^NG6cMWje`(VH)3=xScv?XU8^6-=EI9#g< zm$KM8G(j0X**a`#znx3#IJ>>dxj^|?jNpCo-tV=FfP6WOP4h*d7UoR{=Ec31L=;dH z*PggYxBD0Mudd4%_K?H%Yv<$V9X+YF7}ycz;c3yi=X~gnzLRhIJQy&szRGFX8LcD> ziv=%Jox>^~oO%BrwfT|64p$q%UNs)v_i5Ua5eShu8tEuKGj_ef1qn34qEfMzpu$8SWiSb+ zrQh`}9EQA{sUEn<8GRt`g=qfZV0j&~xbW_)!&9CigwF#!^r49w+Bv0yqcSiNwUC<@ z`;L|{lyO?8A+6~L@IPauC~^d&+T0x33F=KbR}jAm^NZDGxtt8E5|ZR#%yn%B zprFWux7uZJUb7@yTRO%Q%BBYmqo(d3@(w-dV&Jse&=qIC``@q_Ef@?n2X zjG*n8yKlGD0MLYV?7O}Ux#o#Pnaj(aH>H|{EJ!@KxHIjsv>)2V*bkKBk22KJc&p;Od$XBi6`bwP8@dlll3en%_YP4^zOeeuH;IQjd!W|0>$s_IuEg6I_$M5A!Gto*mYm@P~tmncMGQ*spDci>x0lr@`z;0!pXD&+;`zS*D@Pxhf({4%k7gGNi21D zlE8I$-an1<{c*DqwJFkbWj^CO760~p9G|hRdfRUOCi&{cF3lPvxU~i!fd6i_Je3Y0 z3OcuZPn*^OL0r#DXd6;o0m14%tAaBBfH4kTY|t&#m;n~%6bp10*YY8o0a(B*P)NvD zdy13_h%rc8^e~Vgt4@hprN(IVdLnpfQPfa+S*@5qyM8UZwwy{ihl1L-yXEaZ-@jZ{ z@b#kntbQM}at3lOabHpNKoq*W5ZtjZI%*NNF&92h&wiq!ht-9CS5Pp@K7N%VtAfV6!?0fjxf2OpG>EIzAk*KbG4^Hns*#0}{ifW;Q zm$I#<;JP0Vb0ut~%{|uj67cG`tJxxLjb*9(`L8gtq(!j-(k+BuZ}G-3uPl!~%=G>Y z2XF|};~{8(h*5U~e85xLrqvh($4G{~1B#Zd{3#%oIhhto48P;GC~6LL5-2#xSrc=-8N>KA<8ZS9K5Jr}36!x%tU(s8O(ii8vO&nE;QS|w zK3m{$PsnC@5JvxSbh!M)44CHkWfiFr0(xA6vAJ97#VgU)`CE^KYr|a9%CXSai+8)9 zUYcmRT{c#>h*4d|f+F&d=9U@{^53uQ7Ge=vxjbPBQA&pCf&ZlB2-1GJ(_Po|Nt-Azf;Wi1XzATd-yRQ>!C6pQttm1Zq`N-8GrQqu1fJQ4 z%j`sOt?jpWYJjZCDdSzyzN-0~<6;k&3J!HJH+?+|S+{+$cPu3eqi&vCTmdi@*=guy zxPHXa4YE!1_Wg&5QM0=X8$z3|Y^Lcol20RxOPKt5a}8)(-7zXjhMlP`N+6n#G|-;; zn>xkuX-0lH!`zo0y&{mh~vHHvAU6X&Ngv}lx---sC=xzX0b0@VG){yTX{uESD- zk)c9JjmXY@?{F+xysJh&9R(x^VEEe9=~nz>vRqT{-p*qD3dt*h$sb4U`6KtQ@uGO6 zi@ZsE0e}3xH*zr$VdATLRnrvXIE)Zu zBZs{+1vX!~?}NjKj>NEL3ke42U575>-`o~6Aa$9W?l4x-5O6|j;^EDB54Ovf8FMw< zYRH}F36e5wi?}_DbiUH)OI}fc;LZm4zS;2N0(c+&UqkW*!e8`^lydvg!9j6&bwL<^Oz=S5)Nbt+HcYMSFBiVY^xO>3+3gr_FUGhczH5z|>OJF` zEQc=*9OcXm)|QhIyv3mU;M@-wVYcH%;mj?9Tv+^)B5Mp);9H%jw@*O@Z*eT_=vUlS ztp5p!nlJGFrvUuRs(&r!iCvHMA~4zV07VMCB3zb}LU@K=xr*;@8Px4_$30)02~9C= z9x9gluG{n05w1->rnszDV<#>`);7m2qHg2p)4vku41LpjQ>>g^0z- z#fBh?lUZOV3cQ?$kZTsrX$Y69+NZl@z#W_Xf_`_49{VI*+<%wv0ZgK-0>dL8-i$*A zzERzB!0Ug3Di{C_>#)XTDB5xCY&~GJ)`R?EXM}rdWcN~s2jIoLD4xG= zIJ0DB#6<4jbt@dY4%dXak&gI0_zj5vmLGdfFeVyVg}3uk5g|fyw#!9h0N#_hJJxsA z@d8Cs#J33lll5?iQ4?)Q&ieX|H@h!cSJEhfy$c4+aLIB{5Q@G{ntZw3ZRrZ!{{nf` z(sgH}0z+vCzI$$9#KeM$h_rB1uzn1QH6ZXyA=fqnkLck6Bl8yGs?0Rdn}7Mzf!f9G zqn#(`;V5R<%-8+1GiR%%h8xeHd0<%1r+pqxn1shk9=$%+G}Z^kq8}_pv51}uFm?%% zZZ~|Jax;%XSLg-mPU*6RQPI9*(?9aywMY7{pO;4=Ey`efyOx;pGYegq5qMWr2Ph`Q ze(HYP`z!oOtJKjFf>v6LJ@H~5Am9yCQJ;K{^B51-x**EeW8dyvspV7v1yx4}&GWU7 zQEu9e`)&Ftnu<|SSkB=jX_stnA-H?@@bPlt$Fm$e30ZU6y1wdrmDA5IubX4xr#OC; zV9Q-lpul)K3%`i!@*T>eQF4HF81`MTl>@+ElZ(F8vANiw0t^(wf7`{;$oU^XHYmiu z;$3UG4X2x$>^sZp{_*R=ZAiY5%Q`x)LI=(T_7JevirzaxSf~Jw(nQvai(vTSy&m5W zpf6bnw5%|{1B1krn7(*$2|!Nt<4oVh52P&G@4$hW)A@zv^1ki0#(4Xk!po-Zb%L?y zIaOib!55xbH%p0<^7x?N>Y9i_;-K3whLn}SU=!{m47+RHUhyX!y(3`UWCzxq;=GD3~0C!8>E2@$Y26< zAQJ;b<@slj16qPNqZwBlRAAnVP*#LzE^-Oy0v0`adE3=?`^z-dYQ=vqVBPP!9pB&SD_qh8kWbrXZcmAAeM2Cp*Ip@VoQ%6l~Xk zZT`gmatlZ6Yyz0y=uEC0c)@zvu_9wYi&`q?IiFl+n3-*XBRPDmuay%D&-n7UP(0lu zk%eTZctKuyiQ{5)QbwfK+5%&JCx_s^DsYhIWkA!VQKdHYs)wqt0l?X4i%^)~JjazqMsI+jK-cAr&aO{#U^y z>blH9R#HM<1{_*~^C3fV8R%t*_0(H3&IG8X2V&Oz+odjZ=9kSf2~lV3%3fB9Vx z3N9rf)!UjUF}js=>W0b@Z2KTS#A<2De@U3$sB(>?8<~gIV!bnq-ntU)cWHH8FY*-Z z-$m`(EdE5$+9BZY*AwSlK%C$RyS^eN$0Ez$EIMN4L6gZ*ITk=!Fh+Yb zp>{5r>Cqn#=Tx3to1$nYyP+U?wqWXu>YlW`Ym0-H&*8iWq22gv`*vq){B)5wgRiscPdMMc$>bX;Qlr zvwW7w_s?y0@yW{|7lc`06H<~?77_^;1il{RZ0sFt84_N91Aokc0c^12Y1<%^#L!7Y z7OEi9cYsY!gKEMDT1NL3p3UeGM!#!hr!47M&ZR2vd#nZPi^wq}YtI_b$wXO}{!s}NX z!3!H*8=(=FWEZcja&QWK(mWZ()+A#SVE>~cqPMm;;xUw z%xwv9aK>T=L!Sa!R44xRaQ)9$?%*3^*D-jl3mcI99@q(#*JN&x4mQ7tX`^4lqW~G58L^=z`oqxRn+5E6+WF z*ccOP2%3y{~{sFxzxbTUc%DO~q+=I0OHysPNjia7+p*#nV56XSIw|7ub_>#?KLW1t&LxN1Q zHcL*!=S^szmb_CpdmhVCsh?%Utf4p5z*WkLJysXa zmd(#pJ0^_vV3XCnISo(iJE+nd0-s1Hh8vbTB`3VZ1cb4qA46!w02(Z!vbUq+8;G_6 zX#<+Nhm>`F!13?-uytAyrh_o5i%4p$V(P16YAkL~%9se6ny~Q4%kdGLu@O!~;3fPI zh;x6N<;z$5*X{fV;iEH|AXaryZ9bKGuYA8bIf0ecU27schGU%BFRa23dsrK9L8}BJ zaH}FZ&0Mlg@Ch3qTJ2o~$Av8CR`WjxY#6q!6goyx>>woi#rx@V$d7QO73kuvMz`o1 zcg6JyM|S2@^$UIV;uwd+1~Ma~rwv?HiWDX9hAM^kbBs7O^jr|s+3%Fmh02D?H*Gq` zMsL;ihSUw!)grU8V1~2s_De;1<|r)K*I&Dh@DeJeuZQz?aQk;&F*3PkU1eXj2LO@R z>(eFJ1+CY#YY1^WhI1N60`U!bX$(XzF9CRTql*_Dv>E?|B*uaojOHYg`ihzOW(+@{ zMS&VifhI;_GhTt_-Ay(lmJJD{xb_rd>AbDB3N)#R&WMh9;E~eZ>dgD zk4(FvM3&)5zR*=Ssa5)IY5$eSkF3;~W02j?cTT(2F+$nY^$b`$nEQW&&>YR$Wd?osBNe^Xkn0g7LQn;FfmP)PGy&xWK5Y^ZWyZ+SGDcyUzK@CD9kMi|61frDWz|Bkz!`Iv1+ud;pz*TWH~#KB<27Hgr+S3U z54IraWmdG@K}~l>)}vzs7d`#)_1p}sUwev-%!o|tXhj(Bp(f!-xnl1Nn9#ezpd;H93;NJkTkVen_$n*k4RP@uS8^nwKLz=cDmjk1YVq`pV+X$|QW!DgTLNm9 zBotT|+|cix&rcEy_}I8GE}CMNhEbE+5O)K(-dTq)W?f6CKovlPv*Y{}6zEadwgo#u zHCO9iQqr-vm$iMZ-cxA{c-W6^9tx?_4^vV!%bapq9F_Oyyd)tfh zU9W%Z#LOQ-EMrG{FmFb|X9;8kQ`H=a^F6m+t3c>wUODE@8-$K;Fq?ZMGx}F&cnFC{ zQA(4*-z{um7rZ?%ld%wSN6j_fTscxUSg}o;mFvl9lSKe8yOpeCU@nZf=^DqRsE`k1jRcKL zaFAFm+?^g0f#_xWS=_x^#)dG7JR|wzc{BH$T^D+{nSASx#kl-$_f6xsttsDqG^)dM z!!I@>3F>+!YyCtf(o~1Ov0LY?Z$wo%EU7YrUKPF4?I`b!!-0;C5P5xrhjIXhn41{K zY(mzYfNa)fn#>*@CW0c`$^;}IdOP*=yoF&Jb(ij$)kW+thw_w+WrCz||BqzQy~O!`jpruSUaOlQ@Z3@4A0XX))WjwI=t7I(1pA?e(w2ooQz> ztyVhbGmWj{KS@zs#_k%(PsCWg_wGv`-%r|2$sF`nXK!YiFB$nIU|D4$o; zjQ_wWqw3Shk@?+VRG`V9wO0c*9ewa&4*?>c8!lIU6&`;&&(DZ|gA$Ad?(X`og?1CH zvAZqde$<=(U?Oy@KPB3Ujs!uz1}^Rf7M=;g&zXXsC%L{(a`8-X&1hP!o3G{sn>jV} zsq<`W2u0TlUCV!q>y&JmN&KPkWjQog3S762JbMkmBlEXSxIrnVaL2(CjB~RKB`0q? zd2T$CEagoOAbD5&loMA|L{D!0ZTcHxMZ5cr&%5Sy5aFYa=s@AGtBz`F5mo7FH^yr2 z=?$TG6C+*;Xd-N>`s&g-2SJBQoB~Z;S2K+{6w!$HTQt%LtLp{Va$J}m40uUX)CEsr zCJ0p}EP4hu#HGQw&?v)fH-z)Xy6S&nJh3jQqS(TwE%`&ndPV-H&@Jvd-osgza66YBm=(O|-g4Ab^ARo{nyPW%aEBZzZ+WXnOTXb7)i^$Y~>4XQBi;sjXEAX8b zyFzJ&pn%kE5EkTyRxm`))f3OY-AFzfX)(!6r=7|p2ih3IBBwQA#!r6BPhcEI`R+o} zA~gS7|5A-uPe9XY%eH%+rKeKp_jjTz{WmZu5^s6FJdpM&;1SZ8!Wo;O9@RCVi5amY!RTL)LZ?hTc*lpLG75|tntgiT3xk96#80Yb zC^>=y6n@^J?9f%X`0gnzq*+Hf0_u32k};aRVU+jFgy_rYB+KVjme1s0FW$dVPcpPu zx&NMpIuKB8A(9Hbb1Vevn&RGiIXzR6(WVZLyICXw#OLS!;7%eLso(9TctAV<&cR&Du@;m zz9F!LZ(1=A38Tz2j^qX34185Os0+qnoF-oBUH3k%TdZlWa&N8wEnoC4l4-09Gov??n}tNV93z&xcTiPo$gY)^r7fYl;TJ4y1ZYk5nTys zBAVfrGO}jJ(_}7+jjUax^wRoxcB3#4ep~{1_jQ-KksY&w4sfhP-f21-^rmy!^LKhka}>^Hn(7T^95*Z)m*rNuvUPp`}D3(YLQt$h=2x&ro^r%Wx@@pM5k zC&?g~3GYhlaEt>|X^aCGASxZfH8j49bA!0RGF}WZqQ*d{jcqv(hTef)gNw#+yu#+R z?f9>~zin>o%xguf{9Dbdql`>-$b%%|6(cN=k!qHs#CeRpMz|5NB@7YAf$^Mw_7O;m zmm?$#u7MT@>9PaHUrxfrj~PRDL~#=p2}9zPDVfX z+vgACnw*q>bycPM&fs!R7S2$Xwu^;bjhlxX>2ZI5;gfl1G&$qSPhR5@r%;u?elX9{NX%L9><@eLnoZzm1tTqFAjrAnHD;DTB@{K&8mA(T_|flB8a0AVvk}zWb*-q z;wJD28HSTI!p9=k+l>$wA0&y4IwD=rD}xN@C2J*m`9T4+gclEQofaAZ2Z_UlU22R) z0#~<_AeiLhjMxmyj8?AlOk0NYO}d{OAGZ(Tb#UH*nT4`*ma4Pioym%X$%?1%P4lmw z8vcaxrhG_K6rDeQBRGFFr@8cSCu*{zRwL3_VJ!7K=FvU&&M@|B9f^$2)Fj4idT>g&aKd3oL56K8LDD*qF1{7=jAh7wG)puyjFRlaJ2&C_WP zJV9Oc7)-gczz7W!3xB_S-hjsa3;`m_TAJF{BfPZBSL_&a)**S;mL9IP2)l#UaJ*M7 zI#ul9W@uHJ%%28ynr#JxC5@eqF$Z1jt_`dUPj04v5!SIrPjjg8HM1=%NvXHGsso-C z1b%NZlvFy`= zFB}Uu!VG%fe__B**!~!6S38nb_!@#_q3$q%Kg6Af^wfMpxW2(VdrM$B1N1(M;t#m4 zt%0EL+XoM$%rSxZ;KYcjU!H8RFIOlGt?oi~By-qN8&?8_&$7 z2I%GI!0b=pynRJb@EdiIj6@ql6z|zmnB^LKi_jBN-d?$2h;PW1A+1vro_1E$^MYDT z7?!Xq@c0@#&j{XYg$R?!06{L0y3g)pK4O7k?32SWxqS{`9YAVRo3k`vj9X;)N(cYDJky7OG>yDKgzchC6Qd%5JA85 z-v1s7rP#5As#ZEeCBN%VI?P8#u$^2yL9cWj?ji5JM=+LVfRKN3wfd1VdImq9_;fI& z{^zGaq*qu)!kHvR50CV>!5GL@raDR>+ zKj7nm4h0a%C|?yTp9Epo8-t#VY+zvDBqr$A@_D%8p4yg_Sv&o3RL61u?#hj^;3oPr zSxHF0;uuqNmSpLjC|W-~umxF6o%!+uGzX`R;U%$%hb=g0-PBF5#YE^{L%QHB^55V? z{5OzB+yhD=0zja^2oz?g!Sas<$8t!_Yb*>|`xV*^^L~nNrAJDrK7~30Ve%!7S%FeSgpMyv+RTb>H`S zpX6!Lj25Ig&Et1^sHQ`*OmgsJkDz0 z-r8LI75i$+Fw^RB<*$XG%Fxzo;N~(MAI$Be(bL9(GCHY?%YEX=E14s7R`-$BNF(IR zPR%({-qJPsA1(9|At9t+45Ixui)+;2KdQ#iM-^q|ozY9Q$gPG(aHm*su$_@S7_rpH@lr|yaQ zcjN7VXG2AJqk=O7QDNtR3)KDI+bdq<1D&IpWJhLUGd7|goyZ^e?KJj%z!OZm2IbP- z)XMr3ZJf`n%sm~u6GwYOmAOug6svF^8ATjx4e55JE1yQ!Q_pmRnp`PsZxTu}O}bHg zEkF^Zs?Cc=6$g($T1T~{DqrYU^sI}ZljoN0*v!=fr^?6_YsDLjxLQO&#k z>I^01!k+ITXMtssW`uW|G{@1M-hm!|Ti)RLVSZGfkoBRISiz;71$dg)s!YRFa%r3- zTiuSmR#3mZ3Gw9PFR)vuxq7506is~@+deG3Rtm2|<-)6{ z7}XF5$MXc7a(Nsva9&%%SIoFj?E~;R_u|p`BNO$R!*8;A|7mX?S>qSYAM0i{$?6 zk34le0b8r4#GR}vZlNK^sah>YYqWk|oUD7l!|T?wt;N8dRydEh4DYn`1XWX0$uHrr z&am*Xs|#<5S8@P@MKJN&UFy&T+XNoV|h<}o!>pIr59y-`VPlsuLKr5*fb+MFu9 zBc~_c^BzgKd~+wv0$2FKDw=UTKWA&(^)T`7Bf17lGHomcFW-f}yfxJGlW(-XlIy~w zXtmzqgPQHTANNeLj8m>~6ucMIl>$P2AJuZXctzFS#Ex;(mAOL1<6Xve-rkPw1M)Ko zj;bR3X*WDA5hFc$k4(Ii1f?=8;?v?Cp4j?0thW#NS3x6(kj&tk5i$HvusHwblpDgXwys#CLuH_@N??sWf{3s&RIS- zlI06jUmIzk#O++?Zel9^gQi~Yjm}fzX2%3vO}MH9-6rxJ*cXcGM~*Qu~}QRhk~-%!?HW|VQ!UUDTJr(hk#kP{$cha)WdFYV$9%ge- z@xctQsIx*pjE%q8LUMYUFA(hZ5rIhQGlW1?*=M$Y5OHwTs({sZY01lyaJY+lX^WL2 zW3UpDe`KVeWgZGl(+uxETp~;GCpj)sZz;>4G&AXMA7k&dsuki_^!VR~`hbX_JmiZl zK9N=G8o!ct@7tzU_|9;Gc$IjTO26$Dv%~3XwNH+#q<(y%tB}ZyUN>T}w*zU*KPUdc zxrNaX*^od|5qvj7kJ-3Zl;+53Y}&3dbquB3S3W0>{FbtGB`tF(U zVZ@-R{Ynq2z5@h3(su2Vm6V|ka>NE1Wr)zdw=nw7Q>Y8=wRPuH>ciy+WzZ}BjJ7QB zPl)Dm%l&biRls+vMzz~K`Lr=S5U$MiEmPN2F87(B#+Q;Ia}QCDA>HP;#Wsq7uB`kF zsg>=nT!B@7Xsdj<{Jn*}O1-q1ti{8xa??3IJ*GEec0HJD8)w+?-x^GtufbqxSc5+K zufE`SswQcFj4!%}I{6^eiXz-Fr-i=Iajx?zz*&aXO_#@7`tiB7aWyI-h_?`{KVaEI zaIvr7E(=QNUVwy0g@PHZVgyrp@!Lp!nVOjc{0?04$v*O?r&uQ4^iAs4k7MIsZxS+3 zJ6!9AZ%?PL>0HMfwbWmw1ZYO(>_oJ(eYIH5f`oz}1}Q~N2e|RAtPsfi)QgO^Nf$29 z&E(>hAO7ANxd)QGUj^k{)+iGnu;#t6B>?BuzQ)~bos#=IUUq`u4(d19o+o3ifB8*0 zFRBO+x}ns8^c2Wl+0s?kc#tJY@zc+h%hh_o=|T< zhWMgb(uGMcas1B1>vM;nVvOD=hVG+&p1P6KafZ5cY+Rz}VkLdSp?!REYl^J{SPw(}jh%rE+SI(R@_V<=i8?unXxcBR$@FHyxuaK!)3 zm4U-9d0X!o`_`9a(#)S5ZSFy1i@_a2w>4IcFb!+(4s848Nd^yx$TV>b#H^p(tN z3v;wsk%9#Mmv9HxPZzt-E6sTa{mflKXew422mNT;TrRGkegCG^rd1%ct%)^WwwQN%eI= zg8;~O86YpyU1& zdD~3%7CvT}zE)~j(E|@nqqK2*n0rw~E&8j$m~WilM<;?(5kr@En|y#HvCuG<7f4b+gmn?-*G{B(lX=oKkctKv`qlNJ_l%7 zh;Ek-=vX~ir#Z5XTuMTW(c*3=W3^9M-?NZ#DCJ04KXuAq?aA+p@H=qW*|s9m<#%c% z{NAgePYS!v2sa2M=KCWY>mAwi^1#5(gNSE{$=BcOU&#)aM!6uz?2&J<#CpZm{wgG{ z4nPI7tg?1{R@%5|RF@eB@1R!kKMd3yfN&+}!SK9c-;cDGl1gzE#d3T7-b%I2^rDOO zof*@{`&$dg#(mo6jV8`8ex)6Nn=muSGRKv%qa1tK87N}bntKc3+^>izM$@z0?v4Ga zga}YrN@9t|Y3aFjq#ryT0~{rVfv;W;2AhhKSo#n6M|P(tCw4PA={r}sNP5c;mAM?{ zMt}=Li%CKax9{z_Yu*R?BQ%C|!y~zFxgYQ>RPvkP?%nn_!oPhpARgqtgt~=@D(cajIe-f8HZ~I_>0hT6ID%t0 z*fren*;pfYf8)8kj1dL#=WyrwwjCru&4%J%yTm&?!dzEs4z5D=2ndp+P!BU=m9{fH zh%$?NuNc)A&5aGQf2S=yiCxFvI!As;g^_VK@fPlMp2wi8{cCe-z%DaHiomgvoXeEX zhR2JQM*&rOizLhQ$SC^nY|Fr%W0YafE%z5hFVYlOje8$yk1FZY@CPssdE(ZaP#?U@ z@h`*ojV%64Y$2&|hWpAoa1V^d{ykXI2YC6_nODbsrPTjmK6e77p8S~iDoUMbMsQSM z78T5}%4u#YwY>HhlWk`YpOGE9ELv_OQGO%O`$nFma~?e8cl3dKv8v|k{C2=AMPP!=;Oa^n)3ujj8mHj5VXkv73bE`&&MlGSv!J=i_lUbDOFT^??5UwTM=x za&-`W>(dV)>B6mH^K&H&TlCF!|0?oA3?z6ZH83wG^gjA__EKt@%Z;o!R|%x4W%2d3 z$Kn?6H&Ta<&lKOJsBpP2r%I+pC~+K|j%(He%M`&A{l0>a9lG2-5d9mECmI}qE2_xd z)GX!lT>E4`Wt(1$tS2K3?sdzuNL$57+r!RoWyAiDBz|GL@=))Z1s7?eM&6 z%aC}8u0t*E+HP|JVmnw{;@Fw#i0Iwh9WgH04UL$-^o1GqE9>*(0vyS2J51u1=w~I@ z1@SA=zo$N&HR?k=kd|4OY`zn|1 zUbzS9z-fg)9=lU?VXrr-byGb?OtIwtT59BDalPW{cY8G)1(}T&q)K(5j>PQYM{v^& z0WTxy*lHyL1BK@j&(mKv5_!-8TTidKnkzae!ep#PN0H8hQPZ22;h&C0Vmd3SJuMr{ z+eOr;?l;apgsDn-^_vdKwtR}#AMdWY{vZl1+cfh;8P7yesUd4KU^J07GyWMLviCJH zRKX@>FMKM;YJR!Jeo3qRa^b<2Ano%eY(D|3_j%bkgjv6|irT3Gyf zG&*&f7Tc~qb6nE-5nsly#OzJGk&|2iSG2pJQrNMXAPxu{M0nppb_BSib}~@LUPlC? z-t11qTFNjoXm2E;7+th~Y--AbRJHv2*H(J-w*26Kf$K|lypzQ*0^uM*80;OHmGV16 z6^`bD)8gx7Ab3b5bRQsPdhn=cj6j8~^)u@mX5HN995NFu?pszws-&w)I2Soa<~f*U zIb}V&^PT^Nd(f=DTm3*8h*L-HwiY5cn5{C_$Tz(CQ)t$rn6!?%2j8SQf9X{c%pZ_ z1d9=a^NCy6-X_4u!C1UiFJ8hO^TS+}{_WPAI7-n}*>uDL^W0i}U2?PD@eSI~3>otA%+xz<4 znOocE4X?|5huFA;=(CM0|b?l`-K0XBc&v(&Wm@a=v6kFMO1R%G}Uw;v?W zjCBR9N8K8n77p5(=G>iEAU-)UN}gMBs(J*u=CSSfw2IE4L#YuP8?I7}3pN_Pt2|Mg zythO%dWP}W-$vqQ(r#jZFx?VB1&N~H;<(^C;`}8dv5MF^5g1gv{z%mxQb3Gk0QNUf=E# zjK3~Al0*C)R(I^*5l@Gba*-nroH2S>$cG=4GAFpxQ_b09+=PfPsqqj&KNo7T0$@`i zKci`<&Ic6jn_RMF!d5tF)SyD}(o>{`T^4*cM*wsSH+-0U5k5Ba+?#=^g2X5Gx* zY7GQwD8gO`&Z%V5mm=eERfMl*Ooa3Bk<05j;tzD}gvNKS`6_c3+Hq(MY6rjDe&7Vk zdEMeNBW*EW>4T&+#Lb$QTq06R#u`V#-T|)6bibK|{;Eu~y!&prDp(MMsj{`7urRzP zQ|40ZR9Zi_hl8%G$@{Kw7*oSTcr#S(UQ_5nKhHDpAysp0*i%=o!A@#>$pgfF&;bPqYk;^|3Q|M$3)SZ~DgGJuz2!>W_CWqcJkz1c09+9#&`M{9azoraqy|U+{V) znWuEVB-Pr4gCM{>7(u-0P4Hre#C0z3DM`V_=?@PQeytRL9u1nhz<(z|GltpWlxAfo zRIt{q#~)|Hb+8e79zQZ8HBaN$xUw8SGs@vcXBtQ#ybEq{pYH@lXMlnb?LDMNa$3KQ zMv>=#)(m`?b!>#ED9>sJydC{AJU#w2ij*r=+uApZ*&1Khsea&6I<#lCm8T%&+s(`P zb}@>W?g2mfu=6~j5*&5{1SZ_ZIC1&@N zPw!kY%dU*fKbQ{Z|E&{?gehW0RC^Haw6of}mXnWz%1b6sdHM(vIu=2^x*rPtuY}6O z>30+HMv5>hW=)%98g;N<6m{C6C?l;?_IDwNT$ZnmP>pS{L_!JcFM31pJEN@~IaUqGPBWm7IQ}BS#p*5&%UUd2Cf!8EI+;GER6r;U)PxB0H;) zq|)@a1vC#;r zcDS(?+j_T(agz&9P7IGOooiZ&;?_@&|Ie%>C<#mVo{=H-_TpX5frb$RTJWtkgip=Y8A273-Z4@sTv4!lOeK|Z?qe&up zbNgw9K+13xEM&0aB&2%?F`YhX%+0Km5AMcY3X)s%iQtaOM^XkNA-QaVK(|#8t)y_- zYK|E=T-?V-3$XoIt9^CL5(<4|4eXX}A1J?F#^ZBKmus`Z3fvS{H=PZ5T5K!5{oo7k zG2`%S#^B5@oPxUR#n;qQ+IA{8wyco;+)=xk3y+s5^atKPzZyB3b^M3J<^rDmacy;ay1EPn-5dy-39AJd_Z7!*3(|$jEZSm&` z_G^N<$CmoSBHQ7}u8&PtPC^!Qxz9sjNjr))$f{7pYC(mw#^9GTBagp0%`sa3J7~aI zKLiK%>zJGcbrf_@A|7E{u_&dx!%DrybxmHD5B1lYAKL;u>{amw5B-Pua*V^^pr>X0 zvt>n>={bs}03bVcj-)rn;_)%$0R1YtS~dBkgM=L$?aQCpdq`G2vv5wfb$pU;!mnJO zX>0!6I?(awRSB%f7uCCKrWKr%@+AVR%N5uq;Hv%}Qo&r|1V2iJ_m7&Gi#VtXvQXQ? zAK6}?NA+k>_|vcaO{G+W<7=JSI|QL0WNf9qg}Jh~GHk}XZaDO7Dfhq(eI}auW{d(w z-7+Vqw*7*q01D^4VJJy==y+x2{E@u1wCDz{c@SMSnvMXIYn_J;NIuNk8p5yn2p>qf zBX*zKWD)+Hg-0$s$Bz4g3*w<~3HPnL8STijgP_9ud3)tx2?PbO$n$*r<^e@gAteA? z9}R6bky>>~LSkQhQJkl0Mo^)m16${xa_8Px@=*-aTzw||8nuIJp==DD));f|tKeM3O!=?J;#q4pp||wMeY<-naY?C{JDmqg9Uk zpaV}=&M7YIgSCKc0^kF!Y>K-{UF89oNb@+f2T-6%#Z-#4-dTuv%?dq*BrHen4MG5+fXke+i2wRc>;}Oz?+Qf1C9!*ukl|@;{nS0?+*67a@1BS zPkWhh0D*nzatM3fX-^9Zati`Cxnyp}Y_#u4DJiUR;@__ z5mD6@c<{?p=Cvf~>u!8Jyh+bwIcJ?3r+q5EF2Dv8QV0S+o5o8Ty)rGqPd(GueOA>V zR<81(=L~P@RYj5?KEREGlS1$mB^^k4q5^_fFrX{ITgf|r8JZIr#vR*7>EZ`f2N=TU zkXOPxJ+rtoBsk5m?;M^@)q;4oOY|V=<5?a*U6UK(((~-P0z8V^X0_gjG3e9q)G!Rc z=^Y2B*S&5&`=$2jt#PBREx-2k5%asmE9;-10U6P(Wm0i=8?MlMGa_g-w(Nfv=FK( z4-GCCWG(kgQKQg37Y#S&kTH2N;BXy0mYQ`Bsm3{xi~lfOS0Qx-A)=bx;k0|XaOp_7 zl9}_Y&-FRRzv_3RG5Q{U3I84wq5gxh)}i}%vjdi1d5NZH@3ib?Wt!Z(8D3AG#&k`Q z4SL8e3H2Yg-NP~O*zm<>K8}7;Th>nl(*_G9!{)n3Uz=#^UB8sEr zBgRuuD)`|u@WfNnGfOZ>#P&%VOh_u1@`33V-@nTC9beGc=pu0p&lR|Sygen#q5D>4 z$r?Fn0{rL8+1iZ-@#-XTGfxX!&#@WIviY301dubtNY!L@GUgsKSbWPR#e}#bh;Tf0 zZAFmH3uH&?{4_SpKI5OcG!x4VzjYtKfpd=%8%r!eb+l`t$xHL48B*|j^O@- zQgOE~`OFvpr4UTw2l8`|F7LtGi75GJ0?*5AT@zYO1m#YlV{mki?E?!;7cR*QuDoWCHk0n9P^XRW zueAWNc|ULu4OEd$sQGpN*2>)rW+gh#4MmbzZvM$0=Vwnu-^IR0ggx(%D@Fc(^9>s+ zzGqPYdn(NWw1>O&6#f#(*$R+X;hgjv88HK$V?&3@DS_2>d@oy6uv`z0U`<;5gL?%u zP9D}xNZNydo&bR5O_tRTm)m|O!wp(#MRP%f{U<0dIGEJ6s%Nud_iW9T&0vBj{fKkm zmNo_Y2N)+l;$M8Ejinb`ORf$U5MvpcpH#VQ%?qX%BX*hNQ`BP!>7lyaZY5QAB@y5Dh-?1D*z{0S3J+4^qbTn)8?4{w!&O^&|1SC76 zzTJ7C#rlW7)#<$vLK{a_uPP%?I)NO(>bEBFvS3O&`4)#RP&GXXQ(BLd5uB&~Uc!11 zE9^TC+6V2B`f7G0qkcLWo%SQLVUS9DspfR)jL*TA2t+MY3XGXY~G_-O?HSmo*4YW548J)3v%Ua!-N8OYDEUJ4k-0 z-j*|8KZX00N-tiR_<5Av!%!KtyR;6MspzZLM@Sw=*m^hd%c7)F_`_v9)q#J?SHR8K z@ZM}oA^1HcTw?aGJxa#;!SSETX`;^692*MsTeJ@dR`HiPW0(N;%L$S>n z&e16Z3FH{>84alhN&)cFJuvBAI-o7;-5YvyeNd^|0kf##G zJcae*SP>G4kncuE9j{1m(czXNormH=W1H3#=d){O$k*u%^+zn?-c{mUEAIY|)03*? zDy7ecgIjCHcue~l7#AKAIv@$wca|lNt`3v%j{e!bwsQop!UfzJM)M!WgbYw6INzgp z6Z+^z$XL~ZqjPR&UpMgp&O;PsAsHI6XX80%RTk>|I`oo)93}KLtwk_We}3SW8MI%~bG$ZIXzh*VE~aSf69%cATMR z+`=y)z1oG&81Ms!#v@qzz&7?Q)Pie|v%zoSJ*jPvCgJkeBXFxufvc%6bz#nIdvi7F z_!Z)O4~zI4yl89w;^w zo$nV#IdB43A~{gzqM;!iYQ3uExpA6?g<^i02p#p33nJH!rFTwW{TsB7U3TR(M+zHi z{2@iFB2FG61#;P!@y;jjDf-2iD^C?x5r>}G1v zTj=Q(mepHaKl{WsbPKw{TwJc-?pZmr8+EH6rkGFsIZ{5jk;9^~9>|ZhTL~b>CH;K4 z+`cTL3+Hes=w{4cl~Tf0PYXQQ|Blg)IB+ZII>_1(M7dnlwnLKMKIA>Q46hatmAWa` zTMn7Ku0NKbc#cPH+>@T)&6NjFb7M@j#V+QbLo7Q24oK914%dZ`Jo9#3#)bN@c7q}~ z29?v;bMZtg74yeyLFWmf-=MCy7KrbtZ?^zc#lrw^mOlUhZe6ek|=vuGz!> z4q|+EjtXNBZrt|tCLYVdSg#UK*Ax7T{ulSE%E;IqL=OA{^Vs*rG&rBItl&fe^1)Vz zUZrzy7q$bxM4ttQ-Br|(*V``!(a!W%kNRq9iTi%+A@>)J1lsGyD87q?H4GUc|u`D`$bq zvwqi$DSKcLcy^(JbAvUmoAg`IHIetfz2ar$D^d3;AAL*BfcVD830bzARocbhw6QQhy){07JF@e2*!>*j-Uke> zw@|ElK-Xi?Jy%A>#x4UsUp9ONUOevg4x(@xc)}@oUFuo|XPPE=K}f~%D`6{Qe!0fq z%;RO~03y$Rz3E8ceQ-CdUjg{yj6BYl_9&!rM`~M!p37*3hhyPdBo&}Zq``vJ5y71j z$+4m@u_^`g71gooVJsRSC5XX>v<8U%YlMA2$erI6Ps(9V{-kcMhBIFrk3aBAzV=Y4zW;+5KKb5tvU_0V>$|fXy0t26wfsi!d*AEkt-wH1G>q) zZUJ`PwMve&2_p4gK=@hl&2JhOAe81O6@ddNo;rFIHsYpdhVV!!rxFYQJeJ_XM>&Af z=+>(z4oCSk{6M`2e;kdcDNRw;G=kGpEhHE6k*bZ*s5X^v7=IdC9 z@K_$)V)=JN4?YoBYKt`>dRO!YTyi}bfN~G`Y7!ZFI3~&*Txa=r(e>(*)HY^+y>K zpNLmFi<>AcX^CF0?`N>J=?dx61-P zT-eg^+y9=?DdQ1xaQ*3C zHtZMCv}Xjtj-|1jLU#UPY`>-*ANa!#`KFMURL~9_Hv?|#^CTT|Kn~1#raV6N_J$&0 zp(Me2qc=lBjX^2Oq$uPPm)^~Ah6*T&_$DlS7U6jxtZTy34z;`3%92{+R#!T~Y6)Q9 zVYYkMCMJtD`V1Ga`_i0X#mS^7-%@uu=```;_%v_la_on+E;p#o;Hgwp(sp2nj zCQlx56eh=ng|;Jx=%dd;_@N8T;2v@<%|&ty6^b?7CDpZq`g&=L3^zs6 zX54_F;fm&v9!+*wm}#23+Whm^Vs z2r9CtR2GZlF%NcMEs^iCS{Gxf{Org_b2k5I7c@K@c?vIV4K6G{F0x*StT@_HrI%Tl2mRlQe9S20 zc1R1aHC85&j>>Jc*Xp(yrv0aikfAjlAQ`SW^MU`7VA;d19y;Mr$_*CKB!N927aA=~ zinK$RPJ`q=PF+XEsV8$*>h7xe+O^>=7Mk*~0yAObWT7Ib^2q7+g`IO-@D%ju?hadf z_XQ)ba|yQ|+g_h;_{hw;_hBtQ!iVjCot>})J0VV5@jVMV;M4E)fJaan4E+GrHb@MSqT6?I&sWQt#jZ~MpvQ3_0~6!4=0 z_Dv271m8depQaKlkZK*o!2P3|&8mSKIFIUc;3|=CAx;N9_@gfgfM-#|idP z1BFDbL0cQg@}=>=5dwee?O%Qz_F)^r9UBB2q6j-8cPn^cVd%_l-MLr`FhJ1ImCus| zI#^aX^QUO?wqvV-e})Dj0YbkAdZCmZnK`-&Qt7av6sfWn6wG%77kPAHGZTFY4OO{S z7Z3P1m5?icslstAJu@JSZR)pcd~$WJ_)nldl{&>VyT0BMHUcwzO0fL;rP96hsT=z` zmOP&PTWbG`;)Ge7)<-e;h(~Eo=kH>Q-qSDmuwkwwYP#5)o#9RN>4X7rW+n@~`;b1z zrO|ysrXKtCV;l$`xD}8{A|-iNijl+@oscNdTP)W*&FOW#;GLePC2F*>fMGFXaxQKk zDz#*dD_*!DS_Y79ixv15$hWToI6L@ilf&&ZKQJ$B_%5zzI!ui6)DVazVK!Prl0je` zb{2%G0QBiSt(6<~6LSw1>Iah5Qqz?pQ>Wp|^Bjzdha#tl|GNHeXSL);YZHF6%P|P^ z0(I%rK>+^R5HVxNE*p1*iMULSf%&b+$I1V?<%Q%PQm&x24hdd zm>zJYoVr~A-3i1O=CK86xQDZ_V+M(@{yj4tr7TZ5~`0P8f!XKjdE}T%9NDET05Tc4xwgj)XahMyK>nYd6 zN|oWU<`qmsloW{p)+urvKGRO{jRC>rDr-Y8`PB$B3d2y)(F1h{_95}0@E9utE04s# zzdEsMaQsl*89y!Lq`W8pC8IN3xwJ6cZ?4s#jjr}4I%e+0vF)~Q%;GKqGAzAW7PxCEyrSH&DDYSrVK&VJc#5gmD02fg(wajZ z@`5HZu(Jy6ud;iIa$|VroA|tTx8bn1MOW>fxKP{x*-|uE;VO1T9N--lUktGaa#&=A zLnPw5@LB8pe&KIm+^0}?_?;geGvd($zv}Pk4j!J#lvU+y#PvIYB|uq7NCr%?P)XM1foKa zQDPjMNhQWJS{&>XT|8LsgRg<^y(5=v1W{Maj_IXVIW+u=Lq}Z_fj_%Nnq1$^|0~cI zUX|GaLRCo8y{RQE;E@etz79520b1V+Xv}pAs{-BjV89>7C=NwU3t}Iq1i3@kDZ}Ss z64ydm*+;obMRi@i?^h^#`4=28%r`IvORwLNGtTtCF3D8-FSol7r^KAZaRm|zsxeM%Vxyi<@Vc!6B3Ti1>SRH5=Cc<$0S& zw-u*b({|sC5q@z2wEf>}c-0Q*uKtLQ9mw31aF{Gm&B!|`n&E@4r2bt9?7*9cMYBL<9qg1_g40cW#(A%K7aewRY&5n7Ro7fGhIUx}5yN!>C<)H;%M{MzAyl_HJ20SFAklbqN4 zD6j)ac?T475VEg((T(Y6*DjJ93DiGJM5&$8I!L~M=D0<84}JR|-?@T&Id#LS+uv>0 zM=s%6@Xc<_!lu_t(wz7C`jDxX&-)lAc*#F-S--ZZiuf+Vm@WV_y>X#c@XxLfTYz4{xKW`PdLo>+^jS$-|`A9R$=PYvAq!Lg-g2xipa3)}K$l z@*&8GihJ)|u>3T3Jv_$BgRZ^+Cm_t>9+jiE&i5?%+L|i8{t(q?$j<=lAlB15_V@wa z!X07FM6S7i5r0FG^qOGFXI=3h308;veU1P)9fJ701ySSf9N0-H);vxS#e4YCJ&STP z6{8i0#o)sFuB;ZJvA6neJaK5w&N)T}0Q}JmpZWS$9OoCHhXjq9?EZ!Oq9@x_g(Pk_ zbG`$3%0+q*4dtk@7WxwH+Y|T@itU#zB`fQ|0uaiMPllE zqLDeFPzw6Khds1~$^F30xkH4j67mJU+^s%Tme#A9#KjC2AZ4F-5h%oE0LQ+U-2tHAs^nj1uW&_BN;6d^6 zTF}_=wzdPPhmU*N4zMNgXJczvwp*Bui^Ahx1ji>YK0|va-){Tv$G}1vTbPY@aPf}J zJPj+^j|9QtzPw$*VEd~j!z8h|(*7-+!S+-cu`Y#xoFC-JEpk{ZP_l?VuEEKvlPq=RGLbM>otAZ%*s0DHf;;;S zM5IDacn{3ufXKzFX2(LEMXGUGzCLR(lF5T`Kf_`C+3&&>b%J3sD+~a8DVU*qahlyv z{Sjoj5$8Ks1I6Om18*yiQicj%7a|T-VuJ!?yHVx}VTqbm<1R1Ozxj+=r7Jq;l}q)H zs{Kp}8A4TFKQ6L2g@yiuy0f37P>1A8LMk;GOWw*nN9i&rX`6w=ODuJxL@J$XNnm3b zYXTi#)`ss8O7Hl+>9&UG{jBvrmF7mBFhEuj-e7_Sz!>1<+K^bx*GI#aEGZ{?t@#Tvl!d$(0mASm>AYp z%t%~zV19}uJYymNPoxO}XiMsm8EGZ&iEq9p{GM0TWRjOc5uaxQhuHxCB~y9Xaz!z* z>WYAo+BbYdw_Ft>vySKuXQa%TX9xF59ZIpaoU#Y;FJwpb20ca^R7=ceo`dD_TfCBh zSy6<807)q36aLp`s&&ktV$QF`#gE(Xh+PLEw`W-v7TPp2svcs{S@c;t3yOUl2?azh z|834LT)Gy7qqAaayN%gz+X>W-%IMRcP&l!OGxrk``+qT{hnL zUVS3m81Y?kh!)v}GwgYRu4o_q~+{dg{N;j==m)y_SM zAIcxo2VNmjF9bN0o|F;ac{u||ctc%4vW$SpF##9t*N@L}eyf`e!f_w3+#=hthFLPk zCu2C=HX(w?DnYmknqkYm9wOR*cBQ$-x)b||#|T+Ob>d?EL_~Bw^~r*ZVwpYL4U%06 zksy99ZGkkXR8__lC#j|f`m>C;-r)eiT1%1}FMkBLZY4Iv@lx5NZj1d4ViE>;*ZY?{ z=@YN4&u7FDesSBXihxfYodWoCt19$eK+(v$GrdK0P5(?DkPUQo5ukwVIXjm%Q)t_E$*tAY@6#nSV8x%Ww7% z3Lm6Wt3}!H7V=%g_J&P7n_eDHp#?gz;1`lTccYTnAp`weEs4|cHXrZ*7F+&GU^z*t zEb9_tcRB8*9in%X^I{Mncc*UR^i&f5SOn(&9QiXB)s3R$dyzf(IZHREA?VtcMBQ#V4>a@N zNkm%USh$1T*D*#pvmKvJh=q<3aCn^@MugLeEDcw-VOKGaJ@izz{(<0`fa7%=n_J6x zkr@O)8kcIx;#*}Rb|*<^xt7mTtm8dXx5ye2VA|(avh?@x+N!gP$LK-nhy6qPF3c($ zlsm&vn0`3r=IIAIBA@2Z8p)a{b;hg+?5PFjL{Ov1n&&(82H?fqj|b*R5gUkV&i$~8 z?QG40gwOY|mGYZ~it_bTjlQ!^22M>@MQ?^NjzMpjodgfU7`cV|XXP|Ivz*PK5L;)1 zp6t@+S+abq>}zL+3AOU@Z>*3wPoZ_XIN^Y8nA3Y=L;!rnnr^6&uJ36w2kmWNx!+$2 zQ%;|V2pO_k$}C=qbWwi{yR8wssn1PKL_p4X*8qitk~l)hJL zBf50CgW$v}zD=Q45$*~dXDu9rnrv+?AQoWUL>L8Bo)&#C43QHWkdO{urT&PBA1B(8<6(D!zX`|NoND6^`BXn zAaV=&Nqw9*YES%UYyRcl1*gFBiyz;^|5v&3iT+&W?}Fmb1I;VR z7uX!mn9@tmBZpjoJ03M$-!lNiYC17-PtqXE;4jp5#gk9pWrzB%IkWNAJ7R#(0SJ%7 zI}z)P2g}<-vus!f^-zyJ)IlS&BMC$zv3W{Zg#Z8=Eqi5~jYfpG{C$i5dDrGHX%aVQH2{D6ED*L`mA^SdznR)$Q z^Zxw4j|cy~=AL`cJc^5FO&U+vJ+vA7010L&Q3_d^H98Kl(Ylj=e%;RN9+BD?oJt2Ku5DuyCvSYA1_0|+ zv@GrG8n`40@Vuzu8uJ=+nad$MA)mxq0I%w{l8jDdWc~Ox?P*N&J>}i5_eavG(*7=M z%Lg~D@@}S82|Gljm4~0@|Htxr;LD{=nIG_tLHJL~{myzI6uy(aKX2QQs(V36vqGA0 z<(#|=%KRg$E!v5-R6H)lo6q)EPLC7!_gZR7z>3F@C!>rcBu;(Q*$<96?|@e(W;j72 z?LO&0v(##U6(Ua%TY{ik%C<$IcZTi&V{}f2EMs)8F$wSVo_#jEYsUQ|d)nEzIm2CY zA*0|{ns=Y7QV?3`9NftY&0MMCC#4bD;0kku5iG6HH=Q*a_NnLA#xY5Ic6w(BO(^9j zyGX?YQs{72=S9@|abX1asoU10jY`6okh^3fx_z22z24&9tbI$Oo^ylxH@H%QI`r@fTv^_>Ka&!{}QS+kJG<*Ie+6pVgCB2o6<2!a+51Ouo9(ogdcC! z^%iECQQu~6hd4+$XMol&J3pOwtia4I@D_b%Z@At%Iad~$ILApq^gHB z{hQq{Ld;c*#^rQwsUx|QHfZA<#6oexj(Ep0Px){V>ebS3e; z3vm49QPkIUR30985BGc+ny1R83Gkc5z~JWA&o{=D6E?7KW$dB@Aky6JCj-`LuIh* zb0=QE54THCoovB`i^y)%=w(o_8*5?To2=#uHjqH(D|Kwi z@i?S2xD@AYX%((Fn2+yGg+egC@po&G^i;tb`<{6G4-M+6`l^D2DPU_@TxPR<>=djX)DLb!jnv_=3mi%FF z9d8Li)b$_4p=3XaX@_Ox+Oe|xetHlQHz}2Nh>t5FC1}6>|LUEaf|eaPB>@w>lon}p ztIsIy&4|;!-p!I44$#A)9Jx@;1WrT<+VUp;lT5Ez_4wQYi&NZ_;WR; z*<&i$ue8nU!`eRnE^59l-I^TGBx};t|2Zy9Vp_rb4g6rnpHANa-MFtnzJ||=*q`xH z&bT?X7})&iHPNVk&nlfdO<_co(d3nebj0nu)<2*j+Pvm}Iq%-(6@k3 z)+w4+RL6s!VS3DA5g%i~i{(bRp3S0|kY}$FvGww&dcgYv%+#{i?~1!{7xUv&$h4gf zcKJw9UQIhoRDyqc~yC$`#9+_tnHp#hj zuGM}i>wM5rZX|NPQU5UXv;?#L;mCac=CG2Ut{e@x%m-yxP*1;6q_mvN*~MoyiD+cw zA-jZ9W0O@y4g9qHoAoes(D9$qSyg5Tt-Ms-e3rNBV5N7Mez!heQ`sih^Ux+_US<=w zSxRcNDY5peOl$DGGU%swcxN+#Iv*pkGuvHZ=Q7nM>M}>|?6xuUsn+_J|F`av^B$p^ z2cIS4b8kCxC)yGD=T13IE&ie=@BeUvAW#XzA!>82fTsjy+y(mfAQka5xuXXWv^$=T zG$a66;E$(RrEw~5^>sfg+ecvb`t;TDA+n~tSxt17*RxB~_2zoraG|H3ZJu_c^+$lm8ott%HlyY> zNwW{8vxa&Hjx%fLwR@0t%g4CaYy5Z+V$S!KrM0FZFR_>m8#YF>fTNs&8xQaAwp5<3 zl&J+L$xCTK%_ZxTM&Th!b~vw2_{hUqe-E+z#0HPxKl zyS5txcE+yRZwsa0KM(G7p}dZ6?gxXfVo8*(D3eA%-%_tbvedVQj?d$^k8J0)hP#77 zvm|h!GwrA@s0WD){n3iLO@!D!;@2Jg&2Q#%?Tsd=w?SOTWbVdi!gRY@mG$T#jM(=(^9$jN~(X|xk1l&{w^ z;~i{HBVDcg`Y5H*rh3mzi%P1U!l8XXJ+hhYwZ5x#ci7)UazwulkmFdm7eP63hPRPo z?-jjM&C;t5UQ&qLUnI`)<8yb3J4WYOh^NpDOkX#bPS;#o*AFZ<;Qu!?Tl#trRegj?=9Xl%^d{Ohr9~%+$^^c~}mIfWJRwWbBa+kxJD5YlKnX@J(s7GOKsx z*6$~nr*@5%WS<8O*<5NZ7#Xiu@}eFPHXUjH+@RRkmP9+j6Q^vmYV2}2f!iu3gzjc# zNjI&5$N9*)8PvF+&FG!O^5(k`$b3?OtXCrLvX?L)lKk$#)OwRoQQ|J2=+O&g;oZH3 z{e2So94?W;G|(nEU?h$HSa(LVXi9;)c}8Xw8UYHSY{t2z(P2>>0%s8~ePTX6lv}v( zKwRpb50$Z`nbYU~&LNFWOJLbO1FW2G_mlYB4tmy!l7f*g%>|Vt8Js>@VlC$*s|oCF zO<=_w26Oh?+^SXF&r97=*o|aq8Uk6NGiknpz|H>VHt{EY0P*A`g+oKKJpatth2u*V zf9qRjWMZ6PX%()KXA3@@UXez>_3-_9*-|{Ov3tDL>iISORQjP{ZnVxaNSp*~LlfqN zMnRKS)E{0jB?;4rKPB1NZ9!&lwz=7(?C;xf_f_`poX490>CjZocL#k z`{aZBAUuMhXl*=4=nx@|z7tF7@~6Dn58@-S4K?0a!il)zlzqMivNm zToW3CoTd2A+)-ltsU@vGGLk*I{s>(Kol);3Ca zXP=fk!0P0@kvr_Po8j{pC@^ulMafANQCD>&x^F7hU{8`e8%| z8L)M?z;cho^=)&No2|`13f%r=6YgDZpBX-7{&%So7kBW7pXLC16%5P& zj_YR)#d}}Yn{~kTggP7g0k21XY_L7s*}sQj9)@u5(jNtntrocvlnq_RMsUL6QCQCU z@B1!vb&Bje2V6ucD*G**bS)@I+@=?f-6b|kKFfbs0wFn%;knY_&?dVz2;SV6%q47V z6;k)3Q1>Z4*36`(z7JIFAGmBo76Bk7w4+{eVAZG(yK8;5?IOQyhEL72X0JCS-^-!zzY#k?HR|99p*yUXA(`vs{eK@ucA;!dv||h=FpmY z5^96~e%4CL=>X)-tj(1N>*|Y1tjy;L zHKbB-sAy4+)lgz>0VUVRPFXwYR1Z?vTOZ2j;&680J+}bSPOd1(aSr(+mU+QJIelHv!F zSKjmS=(*lGlvH$pC#!=i4TPA|P;UYP0KmQ!@bwM*1=R01wZ)SyLk{OL|OJ>k?K1((*s4`lu84tMFI5%+2)*biW>4TY#REusVjU(@>93rNA}`~APG(gu#p{uFQach^LHMAy=H@o+WKBc-^MS3EI-VR!CY;EG? z|L}WPp@E`86eyj49acbkcITT!wx*_Yp4cmtZzb0uYJ8Ne9W`x<^G^Wd<7pYQ|>5a-}ne_#0aQOa_`!OdU^gWZ%P`kDAS*O zV@@klFEdi>x-8ss|EKnidy;3Js0yBPK~h23{f<4@nGW^86pXNVh1IYZPps2_t`{g- zIa~fk35TB>@tA#D!)AJ}Swwc3*89jYyAqXd%@&eEWnb=G<##&Iafs3dF+WfGhrmah zl_sEa0d~Xfj{M4>OArp4B+zMpUw4+E(V&F<2 z5-FFmRumsAWt5)Tx@6K`Y@9u2Rb0(Au-2AVQl4J1ex#tpEY#T0WVmCj-eud%a0F9 z!BhLp$+ic|SJF!CW|17L|Dm|R0lP8y&y4W*BCf24*qKRQwNf!_c>aLl^tYNzUG>fN z<9p`!Iu$jxX}znsWZhr9sz6&8LhX#*=l&w9{_$QW#5%XhY=D?R5o~JO! zA}JfqX~4X5J3@@W-0q6oJ{Y#lHUt{q191nK#2WVUqUmPI^A@XI@OW11`C!s7f#6XXx)zLj778FsHziTfxK5}KgyngARWFOaE};<4i4S+{9E68 z57*#XQo&vx|HK86y;KO3mtpEYgD$`HCD`fkF}$iF+1vMJc)ux?azMb@kf`^FRB0kvus3tf89!(S9T8W-!=}dGog)24ScEZ@}e` zerD3x0R8M|b5xAxV6=A77vUm1_A;pX#wM8)U+&@>%C-$h@AR>09C@IZxX@Kx{=2d_ zc3sgHAzhNY&)$p3PNvIg)kKT1cFgSY;}R+f*#4Xh_rv)pBS@l?4JV<$q+d1%qnLL^ zcDVhb{dvu8)F_cI2!v)}{Pu+23N3PPL_`|v@2sK7EvtA7trbftp57v!UQ?P@;$byS z#pP}vX8;f`qxsnyrKqP`5Jq2K+r!p8c$5hBqt9V=jkxdWwd)9~2Yqnv5&~zfLg)hlEyEU6^h5)rX;7VA=mOoXU^OZF} zL^s#BI@m>@%B|VidYINQtwf#zlB58%brMbi4jBQWsazWgYp-{{OJ`EdMm)2a0jG}#L-Dt?020v$!nV{?N z<)Qk{FqDMQe8fus$ND2k=qHj;TPEj7RC%3N0CCN3@Ts4fA4IcpZSJn&UrVrr^6h-r z-$djS(hC)`J}pJH_d}=6E43@jbxM{Ushc{Ri* z$lbo$m@r=iN3O|5hV$b28Cm^v88D6eJpsTdZKdpTDR$ z_U=f5sIZ2rn?CUxI9su!!A+oZ~0iTtYjydC^4K7f}znsu_B+zYrZwu}SPqBukt6);-Ks!3yAfk7U5+wD1lzR?>? zGpSKZLp;;3S)E}8!vL2<3}+#%q=4hD4P7pxY6(3Q(CPL`LfgXlasx2~w$lSsP&}gW zmfm|LIQDqkjk$}tX7@s)Fsz#X0Hvbi!`Fr%ziFGFbVl!6L+w6TfZtAQNVrfz;unLt zt)c#SFfy%{imV{*$!xF>htYsDYEgp=1CNmnhKOve7&eQ_Wy%UNF0<=3wX_5?eqphohn@uUrRlT(%>0g!_BV z?y@VIlrhHRP|j{jClr;xl{a8GUQ|+{W%yDL7)!x)FXfNj6P2ZR!{Yb6b5?plA>uJb1t8x|OheuH`IQat(so=RX;w?TA5itt6U zAV3((onhm7ZVSxa7TsYZod9h?%bjE0yn0hQT8TSCR+f$RWzn~1>R=J^rV@enNgNzM zE*VvLP-VOwciRo7kT?6g-5PN9{b-c{OeKh5%)E>-rIXMaR)X{w`m>oG`NUT4KZG1- z(KPe=M*>$yL3-|Q@zve(_sRJ~plb2{{b|Mp_4Y5elJ}V-@M{&EVG`walPnXjOUj!| zikq9u)dX)ACMH@*Mn3905EC$$dXjulmk`^l~Is56lm{cm+P9VtDbdgpH%`amEuM)G}iW+TE1gvYKWQBZ2 zk<8Cg2BXIZE#G*6??z8Qxvp1~lzLhaCF^*k!9xb2AZ`2Rv>_4B+y_o?aY$`?Wmz)M zKRF9A(Y2(`0=Ya=-BZmytKmXN40Cmcz)wYu>7ttA5F|Rc2j-;aOAtouSfJHQQJkQs zJX^t$3WM|@xJ6C-3&m6o`Xwd|>BVrPYf7iB8f;1<&IZLljb0D7GyQFHQnAPHT;h_8 zL+v;{$3ub!To@Er;hhab#|x%xP-(F3*YBp5_c*s`zyD+?Ssu?K3M)#}n@Ab-`@}}H z1@ht!5Hy9$PZa0qWyh%|df{69`sOA0)=`YHa|98*O+;ytR<+LQi3?f{@=#%4UwI%2 z6$Nc@qZ1JJ?*58L9|$9-^XU#SGLw&uIf)6DYqzlT5b)npi3x0u=7S|T0C`Yq;N#pMRs6X<&j@ zaH@jMZ~S$0Ig~s%rE%Cm>DZ9|G0JnR9Lnp(P|b-~9nCHinFYxU|1H8d^_f?|V*cfU zR%vASt*$!kej!3}NcUpY#uI_NkZ`wX*V#y3nf%V#1n*<-(^rEv)BuC`($xcU+>Fp} z$ZxEvd9x>FiHWBEHEiWB%?)l^(@Hh9bKv8vG@n{|udg%i=eazT{%XFBBJZt1zYp(S zj%Nt1+{vjE^^4;yM|~k1qOgcF&Ffa9b@lF3&9yHzKHf2XT%M%)#y%$Q@n27gj7AmM z7M^}wJhFTg1BS--defq19;s*ntIHsCNT@5=Qo(LG{kqvL`nb}Llq)tjLn%(a6YCtcO`cYnWJnL~d9GKu^4bxUk>LDFyvr~FoH@dL zk6{>r_7m7BT^^`O3Q}QQ;QzTF2Doss-QPj5n68@F)wsG%^1^Qk-jz9jV-+hbz?Wq_ z_=RerkPQ}KNCCB^&~Yh)?Qo;LGk4>6G2yWIntza^@VnPo?+W|2N&t(}=C42wv z7^EdsW&nsh6@z3Urpy2)5ph=Ydk&?y0B(^Nej;~}K-(n3Z0!^>rRv1zvkHtZUdcD%md4`FxW5eA^V zh^|n%JKSCyXwe?=5VD3MzsMT6Mjr8K0LxEl_xyw`;K%9mXrBu^T1fPuZ;;WJOCBP= znXQ#cqrpZpNZ)=`4SxP3#W5{Oau$Ovdzf|7WV2{C ze0pyt_~_JS-QWk$O3LFVve4@<<~eqTs^CCJb!$PGb{tdY(X8A*nu|jIp`u9cOOkmY>H_ zV^;3+P||9!`6HlxE9?QUz%uoYi(m}r?;vBPjeOSSv#%F5U#PDA{+IeGeO}SFPZL`I zbj4jLKaaO#+(L!fj|Hs~Pp!cG6HvAJ@slO05o8g0h4yB0g*whF8T{A_BD~|20qGW^ z{#e`K>yr6(@tS@%g;RaP@Q-Jq6i|rrB!UfS&WX28r?TjJ$0jhf8!-`ljpG&&djR5; zfnFp3jsWHQn%dvUQWC#CQJG17-1-@-1Q;<$>ULXjQ6(cn<6; zW9@WC#Oed*f1uIP5$2i<(gzqJ-d}y*X_h7N=^L)1AB18eU}1%}U6+PS1#a}V+2qR( z(eCyL>%bCCUOlDfO-aapX+C`k+o6In>B0#rz2{%&wpgG=#IUVTHGh5+h>`{R8584+T@n&UYJr|wWdw@+5v9T(x~W0=5IlLMXi z=$(z&kDIm(T+%OVcQvifX*gT;*07yNct>OD`(*(+g=`%=tWkCy-STyE6O6Jdgp+^QfCi7}?F{cMYL2fN;b#^(1`ctk1j5 zzzv*lS`~T+%qjqSB}Pw^D_oNjKaB&?j3O@!z^AvqD!#by3oytdHr0$Ec?1>~J462z zouS=|Q-L4N|2-rf7NKi-0Ex&b32h1$M}SEW?%1W6W3p()GO0ut&b%#+TLm03P7ktnOz`%72=uQzpw2Ac3;OsTfD1(B zOkIA6>*qw6q;oq@ z=AzatOo(R6SQ|6ImmMXQKw}Mr!MzQ3x6_XGB#ZMQzttDwQXC-%y*+=I-#uAl>BRWp z1<$o*3rZ$5vc5p8ihLW6eyvV=ny>T#8Ox9xTh9_cnie^l5QjypYCXkE3S zgeai-Dbib4O2?|JrPW1g@gIRp*FIY~oP*WhF{M``yc?Q;l`buR>HMrWXhE%!$$sy9 z?As`tnKL#%tH<*KU1pxl=+1>}v;S z^+bnO^u_Q>QwBiXNhC`g|e3>Mv$Z8A1*J zz9U6!CCYXYyH|RF?2n_!xrAaqcAj7vozb|*x=y6ryyS38wpfvvr3lS_57_+{nh7`! zG+~{t)4%0tx5x`=o|Jqap28d!vSuDhW@IBF-pCP zk_DO|lj^#dHB8KTN1nc_j@?`Q&uNUzTM>VvWu&1qQUg=s{iTocsUpzs7Gspg_cKp#<-yNhV zyUg1SRYTX<0-Bb`^uJ>-9w&35rR7fYuK~iJvGF9N0e$wn*Y{c^jPBd9M(Zldc>Mt_ZM803}3N8D^c0so3Y)49n;dY#9rk4Lou-(JpDcQ1c#1qHyUBzymL;KZBr78t}Ew56M32 zbp*rmW(s$Uew_kzmcu=lhovc=1ffl?aczYU+}Ns;us-m79WR@fpK4Dp01Zi~`}Q^~ zH>fYo#%rFZNQ??QSL=$p@kP6vX(AeN(VDn!qN~ave8zg^9eUO$eIwv`lYwJYiAot> z=luR~B?Zr1_G)PEDbBBMm6}>P>HM#^+CRfORw7f$I5R+m8{Mhp5R%6H8>y}aBKZiH zj0}6e9#lOsvO4AGv>T|tg65)U$pvxpIO9W@hRf77mBb_dhe1J7L#vEwNtexl>%Zo` zUTO{>Vya_IN>i!J=*g;ti4&X%V0yI@EX+EPYXh8LDy`SlW4!rj9OA4Te<_T1ml9bQ7kqC{b zh8A(OSls^aE*74jxTy=iE+l?03iQ2eneQy!TVK~BI~7uUCHFL1(yt$4E}QS}bLUXW zAfXYCpD9qdXl_uiTstC$92(>(YjLPOAO#(9_TM2vr!}^{z?T9>H2!Br7R7C+;O@U_ zPCu!mrL%>UnaK1>hTK?fudyVN=bjSrNZ8INI=Sd_V@lN>&A7|J-bcc$xds$!u1oR+ z8_~1_WO{_gThCJi#(KEjRM&TZ%q2pv3xXdSfv}+JS1ZpN2+GUI=6P7v!5p^XJb89r z@VHNCTU`bzh3ueVZYTN;6QEKN5fpS^L`}xAltZA56sJoOw4^iMZ!#BFkm_NQJwgVA z08cIUij~Mw;B%8y!N0};Q~O``M;forj&8V4-XT1XV{D$|UEn=xntthEFWt?VnMu#w?wcsj1Z7Uo$IqfVDT}IDZo(qv z!|0pyrgygAwEkJ(+!48cFSij>-to@pnx^K1?K5jE+?(~QIq4Tuh>5XiPBoUec0kC6Zkvwd|L6(2$HR!YiC$i`L74Q zSUCA70?|SNQH-nf`tolSSN+VDd(Mvi34d#Gs-XV9mCy7<=tHzaG);SoJ+5IvKnLI; z{{*n5v2Bdqq?O~w^I-}sD{u8W|%c2GL^aKAgAbZ>)^$Lr3{F@onV47p-1y|#b;n%~aW?pz=3M&sAz4+_AmS|D5l!5S?mLcykq zr^0?~8r+^>P>gN5cGVlkfq-PbV3aEyJPl!^O%gKOncEH~qugBm2 zD1!GR#jMa`7Fm1umQx&D}!uRuyWv|CN`0r9KcHaFX_sAyac}-IW=}zx~ zH&J2~J9EEh$A3>=J2K0z&YnjxJ%Gjq_{^APGFpid*TO!NhG+yg*+Yyt$IQU5_77+e zKCOY=W%xV~;{kv6MUE~9DOkYumoD=hnzZ>NFHvXS0D~4#<-6xjZI|E)uR+ejycl^v zV|s&ro2$P=cIOItaU`P5v@|-AMT@p8`Jt$h>(Qq=vF-|_h$qsG6Rquo2ietNRjELB zgo!ngO_^r(E{Q9~lcO%-LK@2r`VnN=1uDoFb-q!LkRuIpx89jM?02AUdHEzxK$E5* z(NWK`A13hB<&eMIe35Ec9;!y*ZlnJ2V4}K_Z zman}k4HqV_JeG#kQdrrbcEk*|#CzGk^F87SLz9!)cl8sqS_OWd?VjB-f@S?Kjf|OU zG?iu%^G*S1Ea8w`;G_8~^Du6ncJBVd9g*f_^|fm2KPh3)$>nfBrr%iZ#Ki0rh54VW zxK>!M}SQkd(8pMD+7t^ z=E`}X3lud5AH}~ju9O8@E)vUWv14JanK>6b4F2j0W}7WLX$CO@4vDGm(gQB5slCXb z3_e;EHU6wqq&4tTc{}fa(?3J2G-MTrY^18-Ek*GOGpSrSi>svGg|OUyfz1pRfa&eWd#l1<`qlsQ4l)Mtop1RM|5o34E_-FX^(>b7$|Tif z`q5YMmOS~Ic8nj1HA)Sw1S{Pk8z?@yM~q5 ztvQ3Ksu6Mvcre0o*zr+>i4a2Z6!`W)b5VdwBfv*#%xc^v3$Xyz1U7MKykhc}e&eHR zPO*x)o?P&+@v`6p!}DL>*f~YiS8jL0ZYmPmh_j4^|HA=gE}wBBF>ep5vUpSG6*WJ{ znO!os-&jRGx4G{_S@8A}_2CPrxhvIU__(EuwZ`aY_wQ^}%duw5Sg2fV^p)l*gk@*Q zcSv+5%Ho(7eU3OQ4&DZ7AP+t@R*b-ZyO#xZ2Q8QbT{8^Pv_ss%%Z^BHtJYy!V_)9K2zk6eJ@@POoGuMaJHdd%Q8H)US*lkQs` zpXDe!M$F)jvzV^VhJ`3z`yvGP2kq;nl&5yY8$0AIiSxbSMI-cIQ~v&}_1vpiX0Y>$ zgH|;yiFPR>JwUUV8xY_+R|;sE;ZYSunfer$Z{|o}1AQLup5*DRV=$HMqLX(Cu^ z*3lAwr5q%TEj!NiiYu>&6Qu_05E)Zuyp*fU{2GgX`TqlpJMRi#q%<@$p zpfwEaP;nYD?fvSM6gL519R{T}i>~k9#RlE@i{YC8Zr~j^NN;TkiAhL*(D?t=0<3pZjfCPohnO2{s@ol&+vN}9h4JLcksPXf1?DBiye~Z*{rs%Yc=6sH{ zEnz>^L$)EXVVL?4JsCVy0*e_wy{B^Mc9WfWY4kP3!td2Fe|$y9$Da?Vf-M1@a~QpV z0l+j(_j(Wu$o5)5TV|=bx%$$<{VFV~aFJO(PmCTYpwAkA29HhwbjciDSVUu10j^2d zf^~~Q+?I*4!&!Q5O-}>p>_Pe>TQ8T>7&TBCBY1653{q%L9q0&I>AXzW9+W54e|)1g z9HwGGGa*A!a|)>ZRdk@$=PJw)Nj&q&ApQ9qDI2!=48HKnAHFb|_uybf$14`1heoMs zuL#Fx6iPa87d=g%hoN=UfPt#farLoiSThBdBQY^J7+_NCBdSb&dMFxt3sLoh+TLxs z>giz4lieK-jey~a%h+s$J?&yNZauu!`nppsn|&RF;|8FTw*M?ksz5t;kd5Jj21G01 z_&)Op_ z_Io8={;;1X#8)kVBLg}Xa!T~5<+sjrHqWEDDIX-tX|p9)jie~E=#`7eW?niz9Lajy zXA*o4_UqmEMc@B&l|cI2D`&YX)w^J_Z3ue;u9*>?AqR>769p6P)O|qUxab^UP3NlK z2}JZ)C$b!5y=UY+_!ikO0_Z$?TfwNI`Zsz%qTrSuTPBMUBmIIj#hxMQ3&78mxaCX1 zfMW>%FWlU?_A{3OyLvzLC(N6Wky*eSxa{!)c3X2uIKLuiW*F?@U-qTNLX}!dFF`GY ztd5PiB8N0(ky&Py)OU++v);fgAfN-2fcJgCUYC+^Nd+EDpuqkYu$-4z zF4za#38WWH=zwI_ojM@VG@~lw!PQ*Lch!kvKdmXA)+I|W!xp*$_B5}2&;lXL`3L7c z9<=;>nkLjog9$BHO&@+Ha|a@n_CV1g$`!#Smkpgmq>3?WYZb<#ojS1r_nB9~_W#H= zP$hgLpvoe7&f?@=@GJTQ2S#CHr#vxij?ZZwBOLk+4zt9#^#eM%>MNe~$N*2|>OM+* z!gVio{XuWg?D@97oOl&o19b<$5?_sX`r#UbOgDBV=#9 z+2dNQgalH^$PImN<&&+7Gwa@Ed`zay8ZeO#;Lh26V1;tXnzBx3#jXlkz8jSK70|)f zC!X7i=RYS8`z+>PQ4A{6Q+(Ivx!(Upq*{z|8ZhcwHAe7t@HX87v?UA!duxQ3T;Flq z0llx;;P}~7?~w-=RJp(Fg`DVqHb2v&V7WuiFra7s)@KOd>PT1TSBx@}i6#>;ERPy^SV5>WEmcDWu0plP(N0n?a2Y~vw}cljz0Xv_UPqO+ym~kpp%Dt~aWHNLAn6 zH3G6b_ow3psi#?NnsS91c~^6|jV;siq#S5-6HWERQ!dxaI5nmp~~@DG20u| zoNt|LShHX*ESgC~mx1slG?WLpjbTGSY2i{?lu#(;Q@wcXIh4*~ zBvJnYsjbl2ZJjp`jk%Vu3c9`<9FhH&q0lEyG^V+7hq{R4_i_f+!r&UeprQ+~qggfI z3ID1H+>QUv*Tf0%3JQp1$R&IC$JxDg+z5f2danjnR7J_!c#_&p5#z$5GyRq(V7U{E)vBq{^GmTxLSOXypan?L#mF4j}sKeMnjtcgyEAO!to`hZbjd)>N4f4ujZhqLhN0x4kK}YR07UKCx=Ge zxR=W#cxNiko5y~0dp=Zwb-%z7>T+Q?^!0%srT+V9*vup-+9VPRy@@j3a(rY`F zcvwJq8%C+VX;g7&>L0~M>1$SPU1~kfXLhc)so_xRtkFPLdQFF%^yoW0YMOwNT&1bG zutSc)549^2IPGe(m}FhZfvG;{CjufT-ASB>Sk?c_t4fkGB z31uW?OVKd1NA4w~WHpRJ_eNIP>vGrY_wxRHe}91MbCkF`o=LnY1A=lGQBt;Xtv z&;}w%-eaHQD)n4id%rBcwD*<^`W(>kxc8xTU;oe$s#nNn(9r&{_94Ov0W|CL1RuLf z3hMKPbRlD#ExF&yz9|k6i7hdOOgJGDqySrY2W~e3LyvaC$AIp_>sn88_CM!K;;5ag z0VA+Ob>b5?k`FI%oe_XC@?eIHN({6=wvPRxibon|iAU~gY@fOE@W>SRgd&UP!Dj$w zB(Jj*sCGKf5A7)d#=f|EeCXSpt8W<^d&(*?S(i_D8Txk*fRf9M1(E)zkJ8m)i5GzI zhn?=T@_!yWA5g8A%M?s4j{cV~92?(J1M06Q^%199k z97?LNI;IcWQ-$6w;^d^to@@!=3>T(aT&cVtA14=3W7Soz{_0^Ud8hm`@HsSM2p7L? z*?%+Za{I@m?(GM4CirccM=4>`_C^Gy43TP8e^go>|cp*K1 z)5-C&;w&4%pe(`LG;xr9FwrXfsOS$l-6d^v+H3!4M2vn@-?@|w;e+ghL#d8f-Ub;L z77sse8y=J2LA~?E&WA+*#m0+i*Ma6Yd=wN81T@(e@|}F%g1(L5Jv!D!lz7%d4nGgy zH@5xrTY+lZ?H$LJ_QG!KO37!Ism?)?S>?-_ zg_{BzU-RXS_cwG1X-|iU%MMRfj=c3a=q`s-LD;NeIiqi5R?t4W$+(QMz^42)zhF}U zz8=ar!X8L_|_GDz*Jz>yIsQDj?R+;RW*C|^018_lmI)* zz%14iOrc=kQ54G(fYTdzK?Q1ZrpjwK?rS z@DD;*8L4tiwNQ%Xc749o{NZBT2T%Rn!z?dSw62iha^`O9GAC+PKPmYi5-?5I=hCdA zRjT7uA6k!W>JTb!0QHawl7_jqli!0sE;8aN*xi2yQEq<2dU#(MioFWP z(l^Yc6mmG@ei5ZsBH^8tlc<1^VoCyGa|#szZ9D-hBQbGf%ytxfUxppAzoeu6$o!7U z4W0f_CR~n#1t;BWq>e8^fJU{2_mxrd3o~kleu}@KNhlN42Pu!_XwzSmzDA3u!tI{E2_C`~A0R^5 zJ2c`1)pA4oJIB0eY2uN$_T2aRRxiCvmWpf_SbhUK-IzJ}nK?xxMmFat2)%P7O7!(~ zx@xuiEo1B}F4_W(yWEW_@G8F(E`pM`4N{V>h2m1mAw&P#1pS?m|HT(fHWz#fU=OoT z^Lsh{oy)mv@&Ze96~*luASn9A&?nGpPvg9JS8gyQz=us^(FRYb_&BL!`LnB2dP7)M zX>+$4r>pbfJ?_`~lXPaY7)`TSmJVcX?Vifdq5I%vWCVYyn0WYZ9>-p7C9bw_Mu=I8 z*7;#z;Z+YhOcZy3Lp+fiPTHI$ZBld9A5v>v)BQX8s z@6`98g`DQ~$Q2K=XwV{dIUoGB8M*14UuUfHH9?WBG-YQSysC_T#lV}h|Ax2+8WO16 zYLSq`puE~@a-`GjV?7-1n6KBpE-&FiE6wF^8Grifgn_Kb&~U*YO8o+eTgRP_UGGJ6l-OGrK6$q})05odM+c1X>fRXWoVYFGSE z7Z$#Yq&T;~wBrn@h*MU;%tJKD<*UryT59M;9$o{4>3`xRu8?Yjll}dj`Qfwm%d`dU zx|kfQelKc3020Um4F@xf|I@y)YyRVqP=N715u({65BJc>meLg--s$v(~SmK|V_=p*NUQLMzzAX)S@k z`hlB(9cVn}vF-5t#XBgsXY`^d#)r-ywwmvTusXx+H-?63(2v;POuusa?*P_g9ea;L z6an`e_kslgNX}u@z#5_}{o;5=O{VLi1x^D{-wf!Fgr9&dCy``gRel|N!dK{;bvZ%H zLa8h#?dmYLTDzDW-ubOLWgg-D8k@Ke#V0SX9m~|&+HpzoHRi6`y6a!|!*5yS^`LTm zdPSjvB>$a&kx2NbmYB~;^&gj)p=Sn?DvT!q#!S&CKTy1W_w>DtX)j;DXp4OO6_Bbo z;Ue(^WYdJ$G}$w86$15IOx7_OP_`_L{Kg!kGSptpCM(6E*}gMfP4zpWhx#VZ03AH~jp~crKqjk6JX?@G_vT ziF8!a-}^DZvs?sO`$iWIUU!~5=Dzkg-zZ>yUM7LJUrF1CK+7yhZrZMl(N_iRl}kCD z&h!o8Vp?7L8Gp_1pDg>!e?Gw!Mj{C~+o z^%_H;cOS-8GL%1v*)J&@)i%wXxT!J}m@f280OXr#>^yvt9({2D!lkly@WbqkCu`CH zZHsHr6aNz?dhE5CTqmgaub13jM_O%d=NHwHzui9Yg2H*7+TeKTdv<$Gk^6d2OFVvLoONGJXay5Z^GnEVohTuer&gdwIgmXN;kc0`-AQEitoe<>c*ryx&c? z7l9d%uYf#Lw1qs?ETEuH`m4;r#;Dyyz4tGtWzGd=UCWBFR+djV^n;fA z5N!MkqLk}>H=;M`e@>%FKkxOJn7R-+#82@(xCP(yL5JxhTahICc45cd0tSUU%vS$n z?!~58zNP1c$33&395?=p5weWx+YI}kB{8OCja^187a?Y8n8dKG+_2A@hqiXleIu(C z3H5IYbsu`LwLd_cv&%yeyUhU%?;X=3G;mC2+$_eyB2;m~h&!bsNieNr+i9M>-5isU zasGPO^bJY{_Bsu2KqNH54_Ka#kzHA;5cY;%Oh3X5<{dXcz8Zo`{`3LyV-VoBPG+Y3_yx|~yuV&=l@v-(-e%CXMa&x+d|zEa zIs0Q!bx1qdSE2A9hA6)a8Rhv`E!gBWt}(WHu$YoIOFC!;WAH+(Rgp2q=KBtyR>c3c z{x!k#qscHQS>}OXNs+r(G4{m4ETyc?%pl=V=aVKxgNp#~-kV)XliH=X?Hp zXf2t}6+$)65KI~F-MA^fLQgG+DY%20@`B~Y(&o-J(Ee^-rC1S@npEw#RCh$cVzcB| z@*70Q^tR~j@bEj26@b*s0=M5~8VVP?UxGd6M;!M@o3fVlifKZD)R1Zrdl|BLNb&M! z){9K7E0N~>AvxFX;@qj{kUO8t$~e@Ie1!u7&=E0K`%%VuW4FL>J%JO2k1jvyNJ6F% zF8?diVw5b*44~{JKlSa)8ZG#1Q~C^|ORYfkZ zF}?QtAJ8=oteW5IiI+0I$~=$+MfPDezwYGaZvHG@>zpRxwB_$`&VMS3Zn)RCrT(kF z@VZ(#YE3@=(=W)xqN2gj30yLOTNj1QO=^Er@I(q14;XHJd3(#KBW@+h# z$#tIm-HF=to9~3ZkMXow{>Og<6A1WHGHUke=7(Q+T^8~4;6my)WClfB2M7%`TyO?; z=COhuq>7XrOboCFt05)h`p_T0%xd$NZ?4}*5&NYQ&Oj19`xifE7Gh_gpXB_gHY{EMI6|S@u|@3z%w_L*NUMYL6O{+;1^h_)qMY-(uqJEl|B| zx;W-xvr?u_4D3? z9~sd37ip^!F6l>xb9M_{ylf7IiaETUi)Nu7 zwQ+Lo*7PKmU5E=)WgXCwpx6bXb(BoV2bs3yv9h376fp1jM;Ju~9Nql2>2 z+;4$TYD8NdTp|-iY2(7=l%dA-S!~P^I~}K9sl=3_Z&qtX<$v-aq0w2I z3e^A){a`*zFUqpXlAeA;1aI=?`}md9biD2jb$O;dcjgfJ_1TYDs(p$`NB9y8A>fAq zp{Rg%ij^*Dx+r40n7}*3DjoDhr`k1gnSd)Fwx5zsI~$ z{Tw!#kt3GQmyYB+L!8S!32$uUB1p-IlKFg9XiKu*LpnDSS#1WrhOT8raztET`g!w8 zL3lCM$ejK=RPGKQa;wB{b_VTH=Gn_B={l_RA6bZP4TIS=Ln@Ci)@)nyE6A>1KG$)d zff{Gc*8}#j4`F~NSk&vnfX{2f7ZTVvFu2)|8rKlOvtal~tGkxdL*4G zJN>Nkoo!1cW>xZS5w&Qr_IP7o8T4eSG||*IMJph!7C4 z4IFB}E5v~11u~lXHCC|>d+ag`{HFHE z?${;l@Y#(|;&t}dJWBAZ8&Oe3?`IyEDCY_g1q&|;_2%B4;1^|AZUoK(XgFPzq+pLh zBCP}Pa!M*+qZ+CXah#QW{NRe$;d5`@pa)2$T;e*tLbqJj`RYfJqAoAK;OJ<D^~0 zJbHzs#P6a3hiG5iy1tOeEhO@88MRVl5qq$Jwpt+a9EcG1*4Y>qj`3O8UmcXDd()Gi zf>Ay}mULeke#a~F#4Ps~HT|VlSAX-dVTN+anijPPUWp=or$kqM^eU}G#M~VvEL-b< zx!i1|ceb4=Bg!Q?J}iJrA3R2l;Et)jt9YxLiP!i^;Jbe3rN)UedusXLrF9R~4L4kG zK&6Ak^q2iYSWODe5?}Pie~WmrUYKN zi3s61eC)@!jn}uPP|m5;zOt~R=k*($txNQ}MLA|VpX~HXiPi@c@y0WA@`@gVzj`Rm zTHL7}D9$Pa@FG}Wv3!VIvQ*#&9_zuN?Y@?^#jknYVFxv{!=rlV(u|klUyieQbJ{BX zWSaO!INcS;9}m%eE?c|oCxs_JnyP9PrkB58BUaPi|6Z2#HpX8W=)frNE#!w|!=6M$ zd5=Ihmb#IRx6$NTIf#Q?emyzwu!+T*rrNk4OBAHbE z4@^Zu5PW+c)U1aO{n%Y7F+skKJDiM8bG)Cy;r4=QQdpuzEgCx8D}K&bUYmnm9AN9) zKcORdmN&nbK@FF;ch>Dg=xxpj?~D5Fp7;zBG7PS@3@ zIKe##c4&H4pUGOIoHD{P}N||y#aCdtxWT+7G zm#U08YGA=^XS@xVo9_t&d^L4UWiqxT+cI&wD_%L;Wvb6qPFSJx5kE6KZORqLi zmbWhe=rE_@mQKYNr~r>f*>kv8WZ?r5Osf09fld6HIZh7xgDRn5Lub7DfU`5kpxzqR zJ!CE{DmyI6_TmfktR$V^+nx#7-^-{&PN0wuF#a6dJR;XFILBkM`j6JYNifv&9@3BV z&%LLmfMz-DTv0{isNg2l0s5ox7zG@!k8J!sL1>P^+dEHJ9#j7Yg03fy9LalAb$;}_ zTd-e>-o>9R0i3)G+<@tbYpcu+CQ&$&Q?z~-p@XcrOUhRvfRi{wD(nAwU$zYRT7}{# zTr5JnxxMDk;GTn&@HV>f>g#>-jJeaDdOa2)E|ZsC!s^a6&t*!FUy_dUd_uX&}NGx+V*@?`Q_c4(5V zbD3Xmq8wjJq^WX4D?aZzm{!331@zLaXLuS>Sz=lc-p-rEU~yb+7s#)M6T8Hu-U9E6 zA%#OyQ4ltxyWNS_{|=upOH1?ijBuNOd&@oS?ZSu1_tm>AjOK9n(V&-^dX*NMpN^3-07d2UBeo@J$zn>lLDq_!75ZGa`GATiJE_b7!>fl?F(z|A`ls1&d$# z4g=TEfv<;Aj`SiM+H8vNQAa2|Pi9KoY-;`7IH#wgMzKdsO17Mzu}@&QiyirFvhuB0$HLLu|d zf$m{+iOPS~en4*$!=?dn!Xi8%Xx8UVGm-z%aTByFTNDsXhJnKca3O z7_7&bmN^t~gBu`h%M@h?!G`FhjZkqrq3l8!>uj9igcc#R9;munmcVbv^~58|c<@`4 zlRkB{15>p-SaQ6c8dU8zy6D{CCh@3O1@3V*`Y0~43V6#Q1)QR?5`I?!eV=ZQ6W(sY zgb#{}{RJ7&ijEe28zB^fL1&9_sJ(M#L_*|j6eM-b4{KO z%ATrRtytGk`FgGl0%-)SUxDgjcXaaaGiZJEl`o(n5r0#58ot7_}KlWyOYwR+&Z=WAcj*UrkN^^?Mj7{PDyh>JIv z02mPaP6f(z>(2WChd@pKoa#r=90S_Xi4OaozwvfEYg34VzeT<>j;;O9cidMq+D6qU zD;xKZd(Ax?aO}Ld-i3sbJ`nL7R#n6AiRu`fIRkfXEkb}f?K-(yc9GuoI{bTWSgfAdTFZ(7T$70whOu z0`?H1CJxfkI*M<0U;ElN=-H^; zbm7_4!#nm%Z50%*FWBbn`Bc7b(BT>Qgml}Q4rXx@Ix?Q(XlR`k*BufQM>LZIL zk`;gll>YWGL63jQ>(Kfy%P&Yirp1=@rK{+qQ0S#X?`vyPx8L6Of5kY#fo3zeR)(0~ z3fhfF$7oP8g>3PiXG`68Y{ttBn@%NPy`zisJ=p%;g-UGgCit_R(Xvd)D`7MR0T=7! z*WHAHO9t%gbvbEF6J4)`aa~-p@v*mUS*4-NOBZI53)A0MN{;JL|Bf8`>wCL`+j_|v z3X@~viM4g~i-IwoLf(8Pw~VB6OE!foP`sW;2!SRzGulPfMbS7|m)AjovQU&v`(O%{ zooDvwTAS1d>3EUzpia*I?KxCAr_-~vV=5DkQ~hl_v90bao3^#eP?a(D#>;}H3L~m* zk|7PDwPAox9RO>e;@9p$?|G3ic7r_HIXD|t;EX1m-L6TKz9fzl+RlTEO=-$B+px+d zob^tLtejRVJ~7ruah0UEk{ZufhE0wsRX!a>?1{bigd@AFDTt!w)Vt+Uwb(v)1e>(p z)ikN%-c_>BN0!7Z;H3rpe};=Xw4XX1KD8DOD%ky&{7#DaTqKD&Yua`Q>#{gaEnmW6 zRyA5)jBPdvk>9p$V`8(zKZmZm(60>{zN~`b@)Q`4*uXml8+F(siUyi|O3j3G zSFS&;-ltPcS|+Fbqu;jO@vPV~uI)m#{T+7%*EFeQU4_fJU_`^bV!PcwiiPg=f!jlu zidA7IiR%Fu32@T0u)sG)TW{kb<0MwI)u`NknbvBRToIVJdsZ^fH#X#LtK)gkz?V5}ZC3Tk`_q5biJ4iHY}5X*QH?t} z>lzl|=)D;p5wse?h{_260t_S;KO5xtc*2=DVg&EnACRnqDP4NS)I8mYX7!0zewiOx z_*W}~?D=B;CrgkSS&xI`1Skq&}o2Ham8 zCep~Fe$c^f{gcJwe)|+X`zTquUR3)G8pW1Er9b3h{W}WY7}QXN65RlMqkHHaeO~?c z#MDCDXrmJIcd)IS{#bq(6CE|jvgtbf}W_HWnqfHo zF91@pi5ZU5vJ=2P)&l+^(b?h#XV~*UAaRj$-Kk&yx6fvOQX}-1)?Vycp2o@@rO^k7 zLi@^iY=A^}*s48$`iP9$9^|#u!Pr~)j^P_`J!|`2ZWg|HO)}N&7d>hEOLkeZ_Z}9D zTtq#ly+23$&EAc5B7(^hIEe)~;E~NM%8=>H(iVjF-N&7@vWqlO;gZjc=zXU5P}T9J z+i2r?PhH5=TVJ0aJ@@9kbyKTutf`b}>F=*&Xuxy@`(hkvkc}4M*Rf*1vo!R7mD$CQ zL?ZY%1$^=Xb?odui#8YrUAU@Y6W}kMw-uYEATD!M?R@mVwm+ZeZ7@w8DtbK%P2aIH zhO?eypwR@Qmmh@MqQ#&=!%5=pIeL)}JklQw9|Q(2A*zJ52TrqZpVjANp{yn``n6yt zhdx$wbi9uFJ~YGT*#AoNe(-C7mzi%qLt|FTDk1UU+*=cXt1vY9s+Waom{(i?1}`jF zlBc9UOv4^?XsIjnqJw9jz}vzI{jVmPO9v}fFcG;Ml5%wEU2{+l`V@xI zH?LQS2x-(t7QSPTsK}G|U>Orx1O*z0GQYxp9lkRW)?!hE-IdrV--lSNsU&6Vu$>vU zs+Ru#l-%C@E6|yX5ZnMjVtY>U1kFPqgJE6fCpp7ZS&`X-X8^XBnQRJYa$f{hj=ecw zd94%uCQ!n&so{&8SmjeK@B0HuHzo?Y!vMdK6Kf5yg4+ZICh>73XAY1p7vSOazpxTd zv;RfDcL%;tX2X4{D2hqc-sX+5D=PMT(FfF za0rkVK;w%2*tgqn3=&i?kq*F>;fJ)^HgV5itK*iNg;HS7t|e!Bhdo7B_7y6IxIl~S zJuSoURwh4Ld1LcZWD(|v$)9M*%7?~HR)(1wQu3?iw}xjxLEJ~8r`p4N*y>t(?A|ii z!$mL(fX!4Jj+>UqQs#|ZRf>6-H{AeXAu#U(f(^ipBG%89xk*&IjUIiO8I)@=YFnAt z=wSOzG_?Ne5HM0U$p_`rd<7=QW0##XoeL(0bzz!iY|U407oYt0fJx2ppv}{`OZz~5 zk7@Jro{jXLqSA)t=>-9>)*4CtOtkFkIQi3uc^gIzMyYA8QR$tGjo(qj*?j(=`^;e; zG_$|N)b!X5o_kmgWd;zABBKJ4RRwfn5=`_%y6-Xps-jxoBa2P-kV3ip7OI+d3kPn>`hoOB!m|9)1r+TNcmzdF?|zyu#GN)OypY+ zEs8wqhJcYzN#RZkXa?UV$v+P~&FL|8%>=cXD!@>e29qc0_j|Ag)IROg*mPo%LsAAu zuA(8-TOs+?Fg_ zP@&((Y%3vz_cz1?ys_`q zHm#w=D52n07`~^mCBird3j+bUr^=oSH$Dx2*tKE!ZJnK}jP`q$eN&oOhUE{l zq?w9`)`vZXG>M>bv<+bm#~uYe8ir`Y{5mjAXk2>>tkq0_f4tCWP|F1W_ z_z{&zhN3Nt82G|#UORVtArE08#+Twd?}Pa-@IfD0)1t9D7X5OEN_N2iT1#E8dIR!m zGPunqi!8yWO{$kQce@zJ`V6!8ePQp4h~bqxqydfDDdL8blrZwjh$S*IM$rYG!{hzx zlB1QwqRgn<+p^GelZ~wom5?<!cSTBki z*3l|3l0ocQgM`avw=aO;eW%|okC=ZeCW|R%X&D^jBplL_1T~#fI&I+bT@E-A zd-Ltu0JbG;_A`-%x{|ByA$?4X`&8c-C-e5&yS0Lav z90-xu;IvY$j~wXklV-fy%qJsjuCqXKgo79C#v3I_VnVWp@glTA3kK$2k;no$1qXU0 zC5))gyRe^5s`s9}rn0KfvosDp)9>7;yZq>XKxeg9GM7VAYTmhz9kHiB;M>HrEP@(~ z+4O-DMs)#*jrk2G{s(s%h5}u4gVw&B03lEhJ>!ZKynh>>LtUHNCdZlN74e$J#gQzo zDE!lbK{?)`GVEz6km9lbR@8&+HiY%6tC;*a?42U^oUUXT z0ZrVf%b%124L@O=nt0mj#A?nG0ZpEy1uGyVZ@)(*?8}0D~`_1SV$h!}$$7g|Gi}z_}kj!+N$?F56KeH1!J=7~v?w0^?uB zcGeBXuY>$}$QCDN!^ycTz}dt)1IZ4Z=7yqRSTb!vj%qt?(mJ|k+6W46TAor_mJr5@ z3W6rHMOOlQ$M)T(LRY_5w`uHWub5qJ>TripyD#_XXM2^T{~UIv-Pe`2qf+$&n#T5b zsFT-Vqdn99hZ5P-j+)FHVi5CS&6%7rkBmq!KgZJ$>M{xhf5h3C2cED?5R+a$1!j|y zuAl|E0whox=$Gl}ru-5{*qaFnDs5#vJ);dPzN9Vy_&$sSp1e(9VT(H{P_xVnfnO%P z`>FB_+t8i7xh=_)4A~yZz9hV0#{6kJ{hs@%kRut@lNvuDr`?2{Hf+?_54hb22#01hn`4 z^=4^_iwq-d(yUcV8}zILr@=NR-!m)l`0L-1?f2OTue;HB^N1I0gv7}UH&`K;luV%2 zYKw98U|poJcYOcYAA9yCs)HZuUbbVb;k}1KwcUH;9=@0+pM_PZpEl0n%BM0r_ zHzBM&9mI{lWz5c)od1LBiCU8t$F;D8q;wD{Sdn^}k9kf%*bgEr3? z3@GN~RW^BKFiwF@)amfmx$)_2+P~f44Jat<&y^|F9kaju^&z932o?lAzV8&=tidRx z5ZlBzAYik>4lr<<#S}1;m>}ZOZ(m@mmub8i-sQ)$q2xUv6ybD&U?o6!RL=~!@2y~f zIYGF!%Iqcpq}1AU#XKS7z$Gr@{!v;5%$ORy(fXS30tICLdgLS?z})c?d~m5*hnv zzkVVaYfL65V;Ca$FMv(#G{f;j?d~%~OFcm2G;4cjO7ALm*N06H z0p#giZaxVd=0cj*&v-0!nc5H@cI6n%{~Fv*HJ&-~GmB=d2`=u!r?}2iZ50hE3*!SU z4h!GJ3SdFkjc8%~$QtU>&TXyD^2~Ved^s6;s0?l!wZlwf2BA;Q@@n#OfoyZM)m7wX zMtR0(^1xndGFEhl%EEabH2H^8WvrD@P~*sUciDB7hrp$IjfgNbZ|mbUb1w9;F8D~E zm(*0U2udE9Ma4KfM>X1+0p z9^wlqt=7N!UvnDiNb@S)M19&OM`DkS00s)h8Z^&%qH7~o^GGv}=Aaq(`pjah>qgsX z0j-sqOTR&O-|(Zpgesi5R#*47qU3$~Zp>UXO~`(b9=m}}CKP4sFk`*=NQuHEwcNPc z`y|~efU{6kaCw=i4ZFy}yT;z!aD*`QGhK>TN>J&Ehj<^d`DbdFPz_XlIWsJs8bCu0 zO;|ugjS=BJkF|=*uB`A}FxO%kqY)jfd4B>Yr73cQwY|hfDu6!=vR}OMOpyc4|23`r z82#?k4umb*WokOM_4%4>oWUfPd9&}FLj8bshx^JOC?YL4O^5eD8ElkJ!89oA9fnS& zw+B2yXJA&>l0mSUnS@&1H9JcSe@VgWKF9w10s8v@Wf?GHzYyu_)x9PZMvxG%KnRB2 z5g>7(un!c~;kc9N7glU%*U#Xt3ZrXY6JqVrY1fO6KVVCYW^r}E(Oc@j@V0W?ftN6I zCGcMN1&B)9g+TV9J-2K^7pv;R+T*?Q!maT)G|R7yTP(oRF$zl+4#!wax-9}1yi6Uo zVC?6vIUDUqQS&SrhgT$Jut{V8K)W8ISKy2g{^B+nujv5+s9+i+6~qLOf^CY7*!#?+ z+yp{X1XF^aW{27`FW)V%SFEBqSKdXua0@-Ei(!>{77m=brc7rlHtXsY)%f0&3%p#* z_4@x@fX_%BlQWSrii9=p2zO+sI7jV=zlD70yTuKwFIYR+)|bti%?OGt9b@t}0f?-v zXmiHG75XKCb(yDF{n@o4rBO*8=EF15gTR?9)CVTmt~707X{-$uY^1if5{)Zp@kJ(c zsk_ODUkfn>*&FfdQw^pzqcf%@AHxo{ zS|0Lewh&+-q0*ksb53PG9Rypbm3!}^>aiW_n{vZ)*%{hH$|bufmNmUyvS0@h-26~N z2cvqx=yBfeEWFlVP*;`EV&QFPw*F5a2rp*Bac~mynE~%Yh2kjaO)k3$k0`(g-3ALr zY+VK5;%KSNZCl*%BF_i{E_w>B(|fKn)u2E$Ky}^{IQtWGOnz0b4~QAWjs2Ww4VZa| zskbJ4X$N8|ZKNztC+m3|;$;pT!RzH_(Iz>XENvjX>YEJ~w}nr!lAa}?dLLRcqTd?r z`%&eosA#+pewyCcTBi-ZvkL7FccIm)FxC$5MkZX`UP#8z~Z zsW);Gv7o~-t_NTQ(Iw-^7zL;e=&-R$YqQG{P>|X)q}?|eUqMKJzo`1=gR6iy{uT2G z=@{IDrG%?^P(&xdg}V&^;&I{*0-+Ecg)Q#Vwc=q8%^R!X7m&uoNKPHNc0G)FK=I3< zy1!xe#fFIZ(?48x{X-gk}=&5i}5ohy_~!VVF~s}Q2Nhd6nnU{ zR6X;%=wLYTD3bZQEgHvMWApup>gZze4I*-)vF9PkJK{z^{QXAkBj+p$DM8rsD*)EE zfzy`Z&OpRo#AUNgq^7nZ+eKfgENVBv7&0xI@X!0piP#z9w>ri~REPgL1}~MWMT;rl zRV>-#@vI|_g1fy={ z9WL04T1bIQ1;AN3bzvPa?~!t(bxe6P>5~FLaJp+XZS%8Xi}mEjsZ;mZPfEiB>{&=L zCb)0#fDuR#zrHaAkVbw10(=S0_dAV{9$|zLdGA&-NjwytvMgc&`2hcnqzbK&?RH$h zr0G-q;hjkbv^VUK0+s0*V77zzXQA*)i3?&o4FQMj7yUI~~ z@{5RUDS*0w&2IJ<P6(uhZdF#a25a;5hSMglw+4O`98@*uP{QB9+lGZm%XCBK0g?Q z%J9S8)TFr4HQ6NWp?|9@m`fX|>@6^>1B?4S$uOC|*#s4nRk%na#6U{C1i0CE4c5zW z?p%m*D3)ZYA%%-;!bI<^kcF7zxj5M6U{;C4)6Wx_w@w&)yN?P1xWE#w$~2M=4Dkr3 zcNn2*#l77WTp5~KqlMPVQD-Bxm*{yb$nt`>FCnwGmUuyl0ZQAIlDvOBbh^_g3_~1! z^&@996;_%O(eJ>1dQ->$-yO9hdgM>pE910(t2P^cTYe4hOdB2Qli=NSd~`TH;nyme zI6|erUmPB$j}F9RhRC2JGwIFo7ENIM5!ZZSvPDyNO8bZf(_NMr%7di~sHHbxU=}E~_<&QGvUe5zVDau1 zneWI`#{u?L3YtGXO-60vMuQOfU)%QQU7PuN`dpY_6XhmUvo^3{=}|1i4T_`)Hk?cq z$xmV&6-{EyGw5R-AXX0%ai7hgoGIrscl)2yI^#zc^8j&8Ku2k>Os&1{-c;*H{QY2(+QWz8X6#6vx4iPV6xGv+ijBF01$K+cS75HP5U}q$|}ER@5H0- z@c=~c4fazh1Xs*|HON>ZibhjLfj>CGXLSsN&)8FQsh4=uu&7-!M0I)0@b5lK7myBo z_B6yPqz7t4DN$ryau3!iEb06e7YcVHrL#?e*3(0rq%#Dhuo@Jqo+B+hl&r0d2fvVs z68oSvC!ysIZrnJ1ewlOK=B{ynxvXs5h`8ua1d*#i3h9o#-TI}Yn@##VSdtRa%PLJbZ|e5<3^4wdcZpZ6QkL-t-Lbc7;6@w(94py0=%{W&R|EPz|21QNxvc7YETKDhU+qzuP`_41k{FEm zl12LulYf%y`!#hgCnO42n#v=0kHR!|#)BZt9{>t*oz@TTnqpHziXOai}!l3#*@oxyDP z8%*HVb*a$l?<21)CS$yH+z{}Sz5{_5fuQaQdCfOmIE?B@Fv2bp5%Q=vOmIXCuHD3G zH_x)2@$Vj=>(FQ-HYe=F@Gv%h@578FJ3~`cDrJvy_X5gpkTP2f@EdQCqZf)k~4x;T0u8l=Q7`HV29o^A5pg~RAAp+$nk-j?3|zfAdXYD~yln-4d0YKIE)`LVznIzQi zj)3Hv4aGvLaHkKNzDFbuGVX?A9$E!tT@G;%*`KDU@B1i&Gnh!Pm|Cx_%NM!?J{kIF zp0#d=rc)&2uek z@8n4^Q~-$7=ax9$rdFjFTo0p|p_@9{cn+BaxqP;+q7H~JX=!}U^4_DTOh=)4)gNvI zYKo7Dr*nG3{p(?2`J`)zkYBh#u85v-gW8je!Xpc(3Oh&ogd!)8ce}-{#~%q~ve1Rw z6oBQr%%wUYutde*U2s}lAisQ1op@Opo8Br}=`)_aZL*O{ssf&}AYX!P>qsFApge-7S?r*tMEzW~6 zx$Dt`6)5NZ2fHYZJ>TzoROklsm`deDcx-q&IA5~vgO^b|rnoB*H?dZlgiqbuIf?4n z1Dnhk7dNo4_lEypP1hYy)&Kv`9k}-9s$^zlQ=;TvGubN?qR1*MD;f7%QDl^|M+*%r zGUHwvq`0Dx(X}$Nu5r2Uz3%;;KHtah@i>3@hwGmAYrS8u=kxg@?}M!ouJ>+Bdy0-s z3>)io;u-oUF1!#`Ud9UDtCQS@t>Z@!Kc3Tun6)ce+Q4+=unyKNf{yCvSwxL*o{t~g zAa7r(&FtqNZ_-dXp46ta9A~%D#36n88TVk^4fVD=o}O$c%KOJ2ciD1I--d#4X(!a+ zb=Dif8oy05WjO_8-Lt+Q1Xef;s4b2f?tez6afTBetO>hpjTkJ&CMaDTGWRz=-+r$r zni=MM@H_@n_no)f&%;{xys_c-iOQ9$Dv__N-+O@inMJ8|upu~Et@6hM#CZ0~@>?Q6 zEzXVL?ZZk8ve^7aIwpS;rM-ty;S9M;#hllwQwN-dmNcC4xrF$P)1Q?NVHI~IsI(98 z4i4*4*h79fK>sZ}0Q2-1qUl|;*JB^Gm}XCM%fzz-b+z2E3p7lkuKYI z)|>T*n6~E|2!#X!Sk2pW(PyNdgHEpaB17|xh-ad?s-Lthf7bi>Nz_T&+~uEvFN#F& zkMvckYWE&vX>*4<`@!f6_@_}`pv!*F?|N+Dg*OM@HH~+r@sn`-z4|)Khw_Iwl4}w) zDhy^w-0DY4TQG$yq4MxY0*m?N_4(Fs}%VJgI1BpO8R>Fo;)TfF@2E)?lrI6}Kp8emZv@UryM*XOVy8=CU zh9&_^#kqAc8@cgf&iL!wkjsZek1)>!aXC8DC9cHoN|a@Rw=b^o93VLc<_5#-EV_ks zJ?FCwIj<|oX3g>>S(|pR5w7&JQAP6jpeaN$@h1yc4%00Vt46UF1PmUOw~N!bli<*5 zGyxILOG!DB5Z2DR5WvC;{aB!ym?B0&K9|6hT=$_pYtE{ovhAhwp?F63cn)E$r%*${ zw-R#HKA=zLRr$M^@kHo>k7ngc?6IcTCGUxom0;unjkOHKO5QA~1$9H-I_}Kq$3Nla zYPrv=#)w~FGRvE3`?HwL-Lm71+WY$*AEiBR!1cebGM%ph3*`rSB8-=E_+o!9!8BTK#8}dihHnT?7CJsr>7s=iO+t|zH7rEGJ}E0o7du$&rNsNB-B*FzK!cn zzk|X|J;xlm#FAgk<5aq{1f=E);^{4JeM@^`bi^MUUve3hLZd}kK{KfPHf!-sD%|C$PLzR_m|&b&e082{tLptO+K zwUSS~n^T$xJqo+^vl7zGItpQGeNRLg?{bCtht9xR!bq(9z~Wfq^`i<}N&IOk38{B$ zHMEUpyEd3-J;ImNVn6bAmlL?2e$0fz^DOTr%WKZuHOm)zz@e((_2%|C>Rrsux-Nr3 zBw9U9TgCQpBYWa>6X)e0tUF66AHLJ`5`WmjQ>Ii7y|oeXSO`6RQQeU7@2fjm2T5gc z_UrazaVldL>MI(Ib}g1s`>#pe;vH?3K2)hSly4JCbTbQl4LqLe#}NngD^&!^uM!_5 z%cC3OGo1D{yR$X!B(gs^rl{2LAnBJk!Gb>VQTtU8{WSE7?x6S_v2cKVBg8~V zE>_2LyL1tGk*^MzoHed%wDG6BqP7QW%X`dr4IqqTPw23^v%IH|CiIHTpryKim!f_2 z4)T4l6Skd$byrr_4Dlk@whxqxWLM4iPCO?4g!}qTDxr zb%!sB>MkymPd-^(N|5xqg*El+M_Y2Ladk~d)2)9>yxt3?oZ&7g)NMG(K6)mV(msUR z-5lGKkYX4-kqFx3ycdI_^%!i*`(2BM%?Gc=Wwd*i6<4PV6CXd`+N;8}j|;!P@dzXo zywLt>qdwxm@Z#!Y6JnlLV9b0YiZW61*-YI+=Hv4iOwqRgVXWvp?AtZ?f;J>CG0{*2 zkBN)8W6M*P>yY(Br)PV`YRh&(z?B5f;gPh~M_GB&)$0V#jw@%Ty}tbGa{IDwbeOQf0ib>0jcWm0~{H zeMFHcsej`M0`R9Ou8(m`8-n)$+HBSXiwAwVk1uwOeli7dl>*N6uygy1CTcqm6GN@p zpXnc_Cnd)_d_q+m7|nx00i#qefsZ(kY54ou*Mx!bWt|p~QEz6?Z$Bg1h@i5TccSIv z4$0v?zOe%?Vj58i29LR?N5t_gqRRXaDy3%%Kr?9ga4Ki8=YRmxKqil_^!dYboi0HF z;Oz=7?Xy7|g_Vr&D_&_TYP&Umn3%6Moj3+f;>{R0vQeVV$R_Zx(kwv*jERhsv~$%V(iw*6lUqSD_Hh*dYCvl*5 znU%40$zZJonTCD@j&v}I!^yb8zoNmr4qfE!A;k0xc1+k0X4v0PLqP2G!_^0*;7kW_ z{}tvXdzE}!-%Fko2{ZOjc!3Z<1mDoLTu@41>c<+dXK|=pbhks!J>@STKU>*iYi_S+ z<0oNJVt&6Rn3rsDDzN%+im6gy?Dt*AcP2EMAjoS7a*TNyk4TOT&kk?#iZ0n+Tv~8 z@!<}kw*oe(<4wM6PxKYW9oxE`l&bM-LTJ~Ec_`(QdMu~NG~41ww-igiic@xosJ zK@VNPi~(-xlsF>|B+U44JTpFvy7u?C<8yFe)TBCcvw8drXylO~*(CCHU?-UV3Lg2V zQg!!!#~(r*=(kuEyDig*5Gqsrvr+tS=>7-cDyBg9zx2lxVx6{kBUwbUe!GGgI0*^! zwVDy6JS)PkCkEj8o)1W2b8S%q(}|p_twImvrG;C+-71}@N%#M1{$~XLe4g~<=<8>% z#xFI$Itj8k-;wvT+E|X*1cN0MXzMH!$G8IqkM0+hW6N6DR)0=evC$>*c;$Y)%VwE3 zg5JYj8au%55MoZ?ddHHfn_t+9d(=i-9nH$7>y~s2z2(Jp))NW}|D=kqv=+oO10&Oz zt2c=3?B9b(GK2EW(t(3o6M7RQ-*&G(*4n(JH;es2FQ|Yu<8uJA-ch3=b5#@KB}u_oLQaCeD^ipN0^=hq0lXX_n}(q zsq8w<6}A>MuI2YddeopAv5tGCQapSVz65k0YujSjtFO-R%?(Z+jSO) zuCK*Kj_^_vs!*zo`$~+gn%>l2qT24hb|SqpmJxgsnjbdBbd_e}lwja@zja;?Z&85N zk(UgT>}Hib$_eTj>$aH`YeU~Rqr)Un_N1I zL&d$0*E^^J`wwfKr>j6p!?3noI44pT%d`AU&NHL5A5pFWGsO$fNqXSdlQv9q*e1WBZ>HH1%H=ioTz?MtVDo7`CxUmhE zhkb9p>HQUTLs;uR%N?@OT;WZ}c`U{pQDiV#04D51b^N*fjcuGs6O$-6#|)kT+zN!! zoKLW*S#jz0{KNG)T>M!I@srWUbJe_-kmWg&4N)~1JoX^69j+q?!ZpkuT8j9qrZ;Ar zIIV6=>`OiRwb?VA^>>ls+kjdR#M(L-y}tCU?l33*T?W=ebhUwH_98}9Pv{t;beQ8- z9G+ck`rf%WVrlsa>p`$PlE-I9)mb$D@)TjixVs#;H-}g~w`fMlgLt21h^izl#|P3= znDVfIAvClReCEsq@8QHW2qI`NP2#pOhI>|mmDOH%pPG(?G96-?g)B$w^x^V6W6K|(Z+#f8a3$Fe>|9uq zk}XPmjlIvyZ9nI`=5%i(i^xMP?Q}+!#sB!nc-?Pt?x9u{Hq}#s>I_$5y>xzj*V}Sc zrG+TK2ZEl{DCM317_59YK14yY}86ij@_MsVViAPu$j7b zp-Qtv!41&{jGu0vbqU|X&r7M#sA**0KE#+Bi z1aFmSu@{c&123|r9~OLj=vMRgCa%xoB14%M^J0Hl@SQA68)42oZJ&xubzJq9$EOMP4<0-{lp* z#nJwet2nI0!*ExlJGK5|JP`u#vT&9@@N3#2qU`pK>i!TOxkH~T;llWF+dG2(XAc_9 zI6IF!f#}sgHIv6CerivNOx$=>tGT!gBIhanaghmGWb&MRKDp-;Ds%S$L?EFy_P%$b zrs4vSqV$fFTR5SOGp9B;^318UN-bbCgZ10t_&B6L^s0~N>ZfNi^F-4dXdZ1PEQ?G6 zc$2;zh=m#W{Q~lklKFi0W;uP1KIi2?f4Sy#)aln>k_s)JzPZx@w$`<6dKPzW#T_p= zx7poy0yE4?Lk9L7NxUOVUlf2OxnY;kzgqqu3t+8-@W~ccM>Cw&VNip=1r7eFzYR)xm9Nz4JRWC_gFFEdo(T52*TdldC#i?<*l zEUoNc2ltOL$Ke@QSzYjkRSUAd9~XJM1`S)ao*#`?UljG1P8NFV@!P09J2R_{oI3i> zWqBj);Oy4kCt@XS&3!YtR)NuM%)rDnGHpN-ST{W5BwO$oc!may`b_~(Ap9*i;%T23 zdZWXq-^Pwj(8lg|1G35dePDCp<^+7+zclw^w8Hk!&Tme%;EU08#?Bh$!+n<0Ou}0I z=~r#l5fe?mNXU>>+zBwHC^A)LdqpwnRC1Nm^d%oaTFz6%Xz;`AMN5!Q6>`ZS$?nsc z$BBLy2|qCVLr717UpQdqTtDH08RkY4k%gUn8jIf`rtWg(LlPgRm1&qJH;~CG7!~bL z+P@x8c(;%HSWo9I+-)GUE9yol#jr`Eur`U*53?Je;(yOEW3cp&F+wFxJaHCvZW+Tl zkGac^#TbT>Y`g(gVVWz5u9AUZ#_!sp4`;x;>#@O5V^SPu)eKLDumXH9-A^vS6FVHx z_l#vV-$@z1{nq!P%|)UU6^8;l4WK2^8=~J*fg*`POATl|4jUOU;@NUpM}gs!_CvlA z8gf#Lj}Njfme?ie)hlGF=PUhrdPnRI>(r@?g|iZ?K}GXIun?Z_yb4TyZ(e6<`uYl_ z`+}K7g)c3{np54A)sSCO>>Sk~VV)GATa^G~Pj_17?T`)5BnsH!%KW@#(VP0%WybX4w$nmcvW3 zv&170V+EgKPv5?>KkH#~1FgW5JJ`d9(K)uHYRj5121vzZ+nc{Jwk0_}*RA^H zgw8u`F^C0Cc-*_w`?uZ2%C2&KetiQacdPcR%k)E3`g$e*LEYz`TqYU8oL?z9NBwXO zCEswczH-aLqjEj#0h3BNY(#&+E`7~#ThXY1*&;N3eqbzMvPS+!Eo`EiJNI5F#RX^5G2~y&Zs5IyAhT)4{p@a6yaf8xHk&%yO{<({h4xERc`xoYT?H8h zzWK1Snql;fLT=iL#h!It4m6z6@lt2NBW03vNZ+n?E^<2XxtuLDDQ4bn=K;~t^3$;iQNtn0Mf_jIW$8dqGLPihHKSxV*ZzQBI;oGj(4uTcJ!5F(&60v+@K` zmd38m|2InvqUj~ecM4>9*s`3s#0|Jc;o#JH^cK4+5-GyY@niXMhbva23vP2uTC<=} zTIIooPV-S3dFI^a9BFPj^)UAs9hg9@P8h}g00~DGftFw~VR!giE;r+Qr51DWET1%; z5zkL8>*9jL58iPZ>>WAe#nHV7R*)pznGnQ|Nw;x{!AAu*tHqCLaqp!N&U@A<{yU}2 zP;ZHP<~BbgJ32pMhh~`N#npxGm$(j1J2)hyC}0>nbFPcU%Ea)kY(olhe;+iBi=r#x zCAAKx=4|Z!IdRiZ(>Ed%<2zV4x4-SrUANcUU=G_IFxGgN77t>g`U8CJ8B{|ffOE^^ z5Y{7sU0rJoTVLUMT%k(*3e?cllchr^+v0CytGopdOgi+jzG4e0txQ)*<*w<`vX>Ov$^#thr)@^|786E|X6BANdpMXty`Tnu5EjR_8^Mb~UKwBxR}WEA!sR^`3SuBJhF(p=%it z_tBu1cfn&&^hKhK$EK%@*7Jc-DbXWAKxLsyF^*Y;Eb`n;{V$0(ailRva1F?5NVO*t zK0gUdph}$Xzz+(m_iS>~;2VP9bGK@s!H;QyS4GP_+kyInFiD>^{K@Y*tQ;({dcJKKyfb7tNN zXq_bU1%&b_ADo+@Mi9w+cNJ^ZWh8Gv1CShW*QIUfEz$v|Fg+bN7~S@e&#vZ+RG5SnB{dI{fR2k-uPDjv%|cNfnJxYGe-K_ z*|PnvHhxbC{>=qTW<{WcAcmD{h?o03^>dbY@MrHOP1qD9b}Ax}Ns51&lVLhOLg0GD zt|Nr~Ry$zUU!RFI;;YynFrWZQZTxStQ?wBCNEu1^-rd33Q9BT%I`!ouC!!{(xM+>^fq`;nvV)m zb+5;X&NF>L1Zqd2%?4LX_!(;<8@;fy`aMENPQiv?ojHbegqoM=F473YvH=usfWZsI zMr;I6^>kby4Y$B6?g;}RHS0Ub*m@Tb@fsv1S`DAL;P4Zq6^p<6u(?dSaWNtOgzedN z%*gMPA*6QJOYPxR7pnaq{lzr}LM@wBTZqbjcRmqC?YP^Xk=Qs8_=`lLdanJNdY?6B-G9HsuAxT<^>SHKA z-)Lv6U641+wi_qx6$tOXIRE+mE8I6H&}W`kQr%}Z7HA;nTX!)-^E0ABN`L)2TO7$( znGSp~^RU^+Bt041APy41B^rNb^hXg4RbjfKlcxcL6GrmS$F^qR$E2TVgqHilG6y+X ziacefWs*_hucuiI%Ns80n&MBh`r#41-!!2Y?H*l>2J!TB!!w(d7R;-ods#mpjv|hf z6&-}uy0w+RqWYk(SH~JewL(YCks7eb+n%h20P%>+WUzI1{Nl*o*E=6H5*=o*i~`|h zH*N=@{1jr3ZOo-Wy-{ATB#!aVUcUz!$S9OxXVpa7LT5%KqELb}yJJ$fG(Uj3ST8ek znf}BBleWXp&X;&rFeMEneE+cjmvB>_?LW*|I6sgMUYwooX)0YS5Poa+RTjLPfX~C1 zmd3}AZHSOFq~a;h(@>@d`a`Fl)0v2DCX+Q6v%29NoJR4`T=B^Mmuxu&0pD!qNlX06 z46HA#<=MU#;BrQLI^7EvA9e#T4%~Q}1EdgU1X_&QU48`Rw2xeR?ey-Ie^EuyO2w?{gNuskZ!G(Ma8T_F zzBtO+b11?ay7lvZ6914fTVkk;3^AiV<{7So17@ZI^K1r^S(^5CHt%WnS+cvW4fdevqhF}zd}82;?gTyoN9h#hvU0;>7KNbcd3x3jh5Iw>htVGtuEb_!Fax3v}Jx&hMUDJ z>=tv~7AHzO;OXdNx|M?c9R|z38W+CO3tE9p2ph-dz0c8Vrk$$gGy}>*Zs1G2V4bJ6 zr@J)ZEBx93iWc_7qsdE8!n1MYlH#=p=s$aTS?yH*DvSK&w!XeIA$1Yd{<#$kCgdzy zC3TRLa{X8gZjvFFB*-uV-jb1fTF*LUvhkoSd)UcMY?g6)a1+!W_gf>Zm>89qcidJ3*{MCqf5qoCU#*1c0;yQ~F0(<+lNtboe+O!2A9myaKx z{&GP3iBHNg%;y&JgWR6HaYrJ9k1;qd>O+Qw$~l-TxI8ChYgl(b*LU8z_;_B=MyvE# zYwy2xG;$5Hg3%AYDu40zo7rwS$Xqxl`jeOnXL3v*H$8aQuCHgBi^CLg?D`X*kjj*n zz_JaAwfT2>g>Ft9xr6;ip&$=upVsz-0egdISUOvpRa_E0k7mI2JG3Pg?)YHw_rG6O zEN=vr{RkW8iASE2vLW6Vy?uGw@qozAoy0qhRY!6Ql@gd`??*Z5Ts)Ux zdS3>S)(8B2w35#{M?}g46sMZ_t=}sU725wVw6tqNbmqLm+@T~Wt7NCml7J`A6zv<9+a(YW z+o57<{MwS?9CS@Wj;HmyN<2tI%#93yROecW_)WA`7yWx)R{NBnJ`vNyv&swlPAIX( zr(Czqbb8G3)vK((F3zul0zk@tmgGo~M$Y$3M&J07Em9IUPF&@W>+Fi?wa-hG65gumv`m1Udu)m(NiJsLavCFl1s=mn5bSABZ5ape& zik_i-Ek7XX@*Ssp{b2gqQkWtA*ycTPPvq*eE0-ggFHC{y+mD#7-8e}mI9$jU6)BB= z(BZ^ZK65iS_`NHL%0o0j^*E=ArIRW636`EQtjASlzGJ;l(sxcK^Ihe75ouliZr1$# zu}4GZCj*D?Gdi>8xSapEavrAJ= z)&B3MtjgbMz6xe#eT;erv%xg^~8+UXae972i8pAaB%xn1kD6)Wzt6&%Zm8D_44r0qG@gdA7k5M2+i8GFmP270% zsS$PHRS%Nik}qqECC@R$KvvXoY?d&@vs^j(ovO#r9+j&vx|`*0Vx=;;XQ+R#(bZuY zS7s2ly;6SA;`g~T9@n<#YP*Ap;zC!EKp?_8^>_0wx$GIeHV`T@k5dOW`k?Rsuuu+F zcq$u^9$0v8AhD#i=|XJ%B-SH9S>2Nb=qg{n$%4gR!N)q3Kf3ANX|H|f))?Q39_pB5 z#5FPKb)6fTRzJa2D4=3s^Hv@_o;%`XTjkg*Ft(Yn+`~2) zy&t%X9{d61cQv6iPM6g8_)_+LO#vB3{E?X8rJ=(d+jqjSl3j#hO4B&h#CiT@jLZ*C z3f9irOG zZ*D3M8_XOcE0`WUsYMl&!RC1xK&BmGs(%Ne$loX)Afl|QMa>sXxasV8EeX`32s*#) zuzISPq?W$OTZr^kSR~{yX`0aid(Eu?)t=5f#A&Jj*=RH_suaY{2gfIlpOUM(Fif3(GSV2hawy64)b8uUFD5_)YLw2> zjH#g)_2X5YU$#h)zn^CjwyT@@ko$to_tZYRBOpcslfo!%6Fav5{B)0T(9Z(4bhy-=^>HaQ&HFxe=l#K-Tn>oDo74=|7Qw zE9Z$Q^7CV3!TbDo?gAgwpMEEPJs*k5#YqhA%CFoMe;akRW9F*3p+cQ?V-LG87mHwS zm;qc6^aGYT;}8SgxgT*EZCM&$SQ=zIryp3zwM-XtelD>ua zLyA3JV*R0Zczb#O1PcsT5ox?`gp4nVziF!;(&lMx*m4Cq>Cd6}IP}vqKU8t^>4gak zwnPs2ya?O%s6^`IWYCipv9BMXYD$~Fp^J(!n!$u~sF~f04QfTvy}b&N4n~m3LF)3# zR2+((=8ho}qgIz`of~q=m{IaDlk8x`aH~c=i(T*cSlRRWBR_SSv~ZJ}%V*#|rRGX| zzQW96+hdN+P>mAM=A^Kjbe;hT_;mF{tnFEBsaRdqW%Tv;s>ZMui|O;(Slp*g`D&G< zViD4s63GYUcK8vrtl~$z&#V4m*To}t?LnL$)39uO_ve%eZZ_)8M|nP|>+ura)=clj zp0*-#6T<334lNE|L4H;Qbhtmbq14$}!qnAyjtFId&v4z-P!2v3dr5&K^WN8=9yUpr zI?4TRLZ4=3AFJ3mcaPo_*j960F0W&Lttj#)v0=&PDoWhp_2p5`+>Q43nqV5ErhP?@ zm*BovT#H*-Z>w=t+LlM5&i+l@xwvQ2Fx{q$r4wIkp6TpB#~+_$>ZBiFQb=0s%!&|9 z&5Dg3U;$(cFzr{fSfC*qvRLSPslYla53#y-#PiT#|B2}f; znESOVCTz$W&K&Vkd+55hOLvlPg8B=-JGw3|or^!Z&&Qrh;jY|_9*2eU!0&`2ZRWNd zhB2f4{_Lm9X5zRWUqm?E_WU(7Snch3U~#u(yRgFlJWq2;HtNhlO+ornp;+^&Ddpbb zH4~Ej4w{~RgcX3l^_E;sAIzu-AR7>H>OX$EokG7iuuugUXl1h%q zt%u^U)^IH0q{Uu*`})4oO1Xs7jGY|sq`imwfXAtn)TAQ;-}F3Pj$!1uzmn#@-w#4k zaC$dbrM|GkCpMbY&Rwi0zB$@<@j@O;bCKLe#CvkT?2oCTbEEIvC#($c$~0+tVqfC> zV<=SIuxiJxu%GxXd;kG;u_`2m2X%}t4_jYs(jVBqJ{c@N6XOk_9kqY)Ch|Z->|`a$ z?Tywvmby$nNR&fL~{FekgNs|{B@V3P~ zQaU7C{f+FE0`IymZoO-sROY)M!BgG0rt(5uA(W^0BdRlFTL189Nco8#uPeycy1Q%7 zJE&Px_G!vF!KT#3NLE7o0`=>#fJe=gCEq?Ly%gHw!NGKvqQ9-glzT-kPdLmw2fmdk zMj`Moa8Fdokj2X~ft4SYm#-9i{dfoQSd>IZa`yTszO^MCcYvAaT~>IwsySwPZ0KQ( zQ^^SA1Esq^J^RYZ-K+DYwteg*n+rD=$Esj?5iqY_c1;xbNJx2BWx4C|p~fxcKtb|W zD98hV4gCH~X~o-EZ$A8az!ZewWvT{dJ;=ex;t7z8d#NV2g{3GstK=?BO+q4*<*29J~f7XInk2}%f%!)~MQ z+6pz4=5#QNw$)q}KlypqxAK0uA1~dyKM@KhF%O=toM^^5DLN)P*`tXp{%BEt-1$#g z-=^1F2?XBC7KkR=xkKw0=Qx4lr;sEH`aui_T}D5*GtCowjsqi*fR%#=cU~`-Q?&i) zIexw_`pM{5Yt&KhQE7=x4NWV9XOV2X?v*vsQVXY6msB{GCSPr zqMHB8vpxv+0zJ&5$VCzeE`-kya4JZ_PNo4Ye%Ro6Ac~8`1u2ywrAk93mRKENKffd( zpsG6$=SNCnYs3&w7#n??4NIt@@vjns@nw`eM4am1W}Ud5y(D0AwMgIhGTv^TD3$~; zumRGl$Bbb|S@snKm`Hn*-COE+(lO*`lf5QlaLI7si#gyNm#M{|${Iz>;vXIZy@TbP5zn$af zqt~PXqMX0e%c0AVH`hby0^469`ZhUxeIDLlH+!i2FAXL6IDxdk!W4r+1E8i5{yctB z*Bz?AS0)YPei0?tIKo0%V5{>42~V)VcGg>Or+xVmApzKSR{b<|d1W3;(yjih9m3yv z?@uh;zuoeR`I;}D(f3sCH5D^-DebihW>S%1Ob$D^@S6TFq695}c(&OREUN2ac(mBS zQvB0v^10B`JsA?W%6An@3=0(WDKuJ?>$mqFFj91DBjB6bmwX{cusKEI(Zu3fv_mHG z_?9s(340`mP_UW`2H}Uso*S2;y5aa)`rW?kEWK#>t+Ir@#%jTA$7!uRowH#-W2d`bSpork_LBfl;n;kaJpn|Azx_MN z%N_(j7AfY(k%nCj++~4U!gctvz3vz}0tPB0y1$mg{dY%Yop@=Dcaay0 zy)b>+P!_*9U~vX^6^=hguoF14_2vO@5EvXFY*7u^6@+A10H&dflbrvkdy zP=_l^VF*@}p_Xhqd=#^Zvuxh?@TZ&sZ{YRE<*z41Wa0}3sHsiWu{T$4{Lb9-*MGjm zyK^(Ov(StvO^<07OBGh5G*YU&pIIVlG9UeOR50 zdpY+E0ng`H5;Dl(lH~gwqcp#B?XpLwHjZ;9uieXhCQl`{zU!>6O002@biC+(M{>Nc zH^r?R`tSdSKHfg|4&nsm3p;SC3_iwoy9QeUbyLEN!~fw6ix6D;FFmJAI9Ox7v51$6 zu0pZ*bmGpw*hm#P2sT_|iX;Gwdo&35eRhi~X@a0E#+Ja|rWS4=oJLaSb#?frg%V_8mMo`DSkY`jHl&OB!JU$pyf0Ht&6Zmrg(AyIc^3aWbe-t5xG&-ZHXA{pik9 zn%79ERiw8jX1Rd@VT2`a?9aNQZG#AYtL1(UGCAHfl2=`L+H?A@QzPMN4JQJ1I}yu! zk7Ehit!lt_2tFh#zblnmThckO9Cn$QH!*5mR!dVfCXO~sTqi!`NI+ZjWh?DyT*sx1y#bZ-Mmmb?}GjXRvw^qwK_O-Iy}J zJ9V9r)VCfU((%!>Gl4PWYf>I&J1Rw6wli@Wo3(!^7D-rdG|&Uubp(U=E0SgGaL2|P zPj++M6vPUv6H<-kLA3aN&6CT1nYdT#iDreyP9c-0Vyp-4{bLZhKD80ns z2eAwU8fP!d^CL%sPgDa8G8<-LnDU=aa0eI zzyo+oN`Apwi@5|K>>qMeccH@!YMUol3@N`0KjfJ)^915bMn|7Ajcg$zbYEfH4F1Ys z{)OTzXC4>OYS$=I^WcX#8^RmQE0*y5##n_Z6I*KBJ+8*a62smgMro5`5}Qp39|yvo z4C}c4Epx~#-3yaGxmQo_C~faJA!dB+Q9~Y7ZF}#fUZ+S*G~LmVX*38~CjIfsG_5R? z8LW3|cL`!1$t;5sxHBc-z{?&=UNW&VTp=QTg1YitxHr#)d-1=DV+X`?1k_(NLhQAulzY z^0G^>Rod;eFJ{A3FNV5nH}&u2Wn?8yfB^%zq3YR4+|SL$Y>31$@K79}9^-iVUGUte zrT8R!Jtd9VcEEx6AM5ljZLy>j`_M|PU*`O|J=K}5xDHDFoU^RLppHj7%>^PMtaBhB z%_jqB2-r?+x+Vhu#UUkmnDM4NYnCLmo>mC$u_+i$>1+}T*3C^oZ-j0|^)`1t7A6TX{_9KQIq`D^v1s^grkw9v|yHdu|! zX`c|Afk0(2*d3OJS}m*<8sp6oyDiM2#cT`qaQ6gjnaS6+QGW~d`M8$K@y<5?4oZ>b zUW;9s%bl&=wvEf29U^}B=i-P=dylfSHNW?cn5XZWL$PigA;}+za}>pG-)RaMHEOZ} zmv)u_!GwH=r~+AhRLNKRU)o;9XW`Vegvd4fmKZ`@oTTKE;$%?Ou+Sm`Ff_wtzyU&n zB>M8)GkDTsr_{_+bxlkbFdEK~+SIR{OU(x3Tms@f2fxC8t7AW!d(S3k@p_31^6Lz3 zK{y_;ke3%<^pFODR0>QZ-1y7E9e(O?~-K{0-)o54arl#%RGK>&9Sa7+V zGJsDGOlui)^_n5B3P~DE@3Jbrw91NoTG~f;J(aL-?CB0++EVF>9(=>KvGf|IS)s)Cb~(Fy{nxN1aez$>%{-F zI%gSJJ>#}$D6@WB*EmtYSkmc?WC>;oCny6w2M1mf?~+N>+_mYI0C>79^DC?!RVdLxhS58>rJ&O>t8xaK_K+kaAp1{{`%GLbT=HCb7{b6B z3;EyKl8y1RRn^v=roTJpW2@UzpCvPURk1SAgz;{VuQL*2z-lP@e`XZ?0Fk_IVRbaT zAWQJ}-I?89m^#8g zX2g26*(>XUAwoHZcU~X$${2B32~ow5Sk-lY##h@!`taZT0=-OAtZL?OQ6Irq4WhG1 z`z0QZvC57ASXa`Z8~5KiD!*y-mYmObpz(in!+iU`s8`kjpFTPHrxlvekr-=?hgAOa zk(7u8Z^_XYivo%H(-L-Hh;BLf7=$}kFKU;UJggF6{Fq?6D~0Jyso%^qoTa;T5I2-AVCET061@AZCqpMnfQO3 CAgN>k diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/special-skin/hitcircleoverlay-1@2x.png b/osu.Game.Rulesets.Osu.Tests/Resources/special-skin/hitcircleoverlay-1@2x.png index e611add3ba9861baf68614ec51d63d3f94c8592a..3b5e886933d2f7a8803a44304c5439058ef86fa2 100755 GIT binary patch literal 40858 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�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 U^GtX>4gf!XyL%uw1Pc(DKu92j;1Zk!4M7q# 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

public static LocalisableString PreferNoVideo => new TranslatableString(getKey(@"prefer_no_video"), @"Prefer downloads without video"); - /// - /// "Automatically download beatmaps when spectating" - /// - public static LocalisableString AutomaticallyDownloadWhenSpectating => new TranslatableString(getKey(@"automatically_download_when_spectating"), @"Automatically download beatmaps when spectating"); - /// /// "Automatically download missing beatmaps" /// diff --git a/osu.Game/Localisation/WebSettingsStrings.cs b/osu.Game/Localisation/WebSettingsStrings.cs deleted file mode 100644 index b3033524dc..0000000000 --- a/osu.Game/Localisation/WebSettingsStrings.cs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. -// See the LICENCE file in the repository root for full licence text. - -using osu.Framework.Localisation; - -namespace osu.Game.Localisation -{ - public static class WebSettingsStrings - { - private const string prefix = @"osu.Game.Resources.Localisation.WebSettings"; - - /// - /// "Automatically download missing beatmaps" - /// - public static LocalisableString AutomaticallyDownloadMissingBeatmaps => new TranslatableString(getKey(@"automatically_download_missing_beatmaps"), @"Automatically download missing beatmaps"); - - private static string getKey(string key) => $@"{prefix}:{key}"; - } -} \ No newline at end of file From 05e05f8160a73dd9f270147874ba0632897d2670 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 19 Sep 2023 18:02:08 +0900 Subject: [PATCH 367/729] Increase transition speed slightly --- osu.Game/Beatmaps/Drawables/Cards/BeatmapCard.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCard.cs b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCard.cs index a16f6d5689..25e42bcbf7 100644 --- a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCard.cs +++ b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCard.cs @@ -19,7 +19,7 @@ namespace osu.Game.Beatmaps.Drawables.Cards { public abstract partial class BeatmapCard : OsuClickableContainer, IHasContextMenu { - public const float TRANSITION_DURATION = 400; + public const float TRANSITION_DURATION = 340; public const float CORNER_RADIUS = 10; protected const float WIDTH = 430; From ed9039f60f31415089be387e9075e6439099ee58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Tue, 19 Sep 2023 11:09:23 +0200 Subject: [PATCH 368/729] Fix notification text sets overwriting each other --- .../Database/MissingBeatmapNotification.cs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/osu.Game/Database/MissingBeatmapNotification.cs b/osu.Game/Database/MissingBeatmapNotification.cs index 261de2a938..584b2675f3 100644 --- a/osu.Game/Database/MissingBeatmapNotification.cs +++ b/osu.Game/Database/MissingBeatmapNotification.cs @@ -52,14 +52,6 @@ namespace osu.Game.Database realmSubscription = realm.RegisterForNotifications( realm => realm.All().Where(s => !s.DeletePending), beatmapsChanged); - realm.Run(r => - { - if (r.All().Any(s => !s.DeletePending && s.OnlineID == beatmapSetInfo.OnlineID)) - { - Text = NotificationsStrings.MismatchingBeatmapForReplay; - } - }); - autoDownloadConfig = config.GetBindable(OsuSetting.AutomaticallyDownloadMissingBeatmaps); noVideoSetting = config.GetBindable(OsuSetting.PreferNoVideo); @@ -71,9 +63,15 @@ namespace osu.Game.Database base.LoadComplete(); if (autoDownloadConfig.Value) + { + Text = NotificationsStrings.DownloadingBeatmapForReplay; beatmapDownloader.Download(beatmapSetInfo, noVideoSetting.Value); - - Text = autoDownloadConfig.Value ? NotificationsStrings.DownloadingBeatmapForReplay : NotificationsStrings.MissingBeatmapForReplay; + } + else + { + bool missingSetMatchesExistingOnlineId = realm.Run(r => r.All().Any(s => !s.DeletePending && s.OnlineID == beatmapSetInfo.OnlineID)); + Text = missingSetMatchesExistingOnlineId ? NotificationsStrings.MismatchingBeatmapForReplay : NotificationsStrings.MissingBeatmapForReplay; + } } protected override void Update() From 773ec469898c9d616c2211723ebb3a9742dc76c0 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 11 Sep 2023 23:59:44 +0900 Subject: [PATCH 369/729] Expose some storyboard pieces to allow better testability --- osu.Game/Storyboards/Drawables/DrawableStoryboard.cs | 4 +++- osu.Game/Storyboards/Drawables/DrawableStoryboardLayer.cs | 5 ++++- osu.Game/Storyboards/Storyboard.cs | 2 +- osu.Game/Storyboards/StoryboardVideo.cs | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs b/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs index 6931cea81e..a11251ed22 100644 --- a/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs +++ b/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs @@ -23,7 +23,9 @@ namespace osu.Game.Storyboards.Drawables { public partial class DrawableStoryboard : Container { - [Cached] + public Vector2 AppliedScale { get; private set; } + + [Cached(typeof(Storyboard))] public Storyboard Storyboard { get; } /// diff --git a/osu.Game/Storyboards/Drawables/DrawableStoryboardLayer.cs b/osu.Game/Storyboards/Drawables/DrawableStoryboardLayer.cs index 38e7ff1c70..40842fe7ed 100644 --- a/osu.Game/Storyboards/Drawables/DrawableStoryboardLayer.cs +++ b/osu.Game/Storyboards/Drawables/DrawableStoryboardLayer.cs @@ -1,6 +1,7 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +using System.Collections.Generic; using System.Threading; using osu.Framework.Allocation; using osu.Framework.Graphics; @@ -30,10 +31,12 @@ namespace osu.Game.Storyboards.Drawables InternalChild = ElementContainer = new LayerElementContainer(layer); } - protected partial class LayerElementContainer : LifetimeManagementContainer + public partial class LayerElementContainer : LifetimeManagementContainer { private readonly StoryboardLayer storyboardLayer; + public IEnumerable Elements => InternalChildren; + public LayerElementContainer(StoryboardLayer layer) { storyboardLayer = layer; diff --git a/osu.Game/Storyboards/Storyboard.cs b/osu.Game/Storyboards/Storyboard.cs index 1892855d3d..03e30d6272 100644 --- a/osu.Game/Storyboards/Storyboard.cs +++ b/osu.Game/Storyboards/Storyboard.cs @@ -86,7 +86,7 @@ namespace osu.Game.Storyboards } } - public DrawableStoryboard CreateDrawable(IReadOnlyList? mods = null) => + public virtual DrawableStoryboard CreateDrawable(IReadOnlyList? mods = null) => new DrawableStoryboard(this, mods); private static readonly string[] image_extensions = { @".png", @".jpg" }; diff --git a/osu.Game/Storyboards/StoryboardVideo.cs b/osu.Game/Storyboards/StoryboardVideo.cs index 4652e45852..8c11e19a06 100644 --- a/osu.Game/Storyboards/StoryboardVideo.cs +++ b/osu.Game/Storyboards/StoryboardVideo.cs @@ -14,7 +14,7 @@ namespace osu.Game.Storyboards public double StartTime { get; } - public StoryboardVideo(string path, int offset) + public StoryboardVideo(string path, double offset) { Path = path; StartTime = offset; From 2f020f8682aece5fcf4b54f879c4492149485ff6 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 19 Sep 2023 19:44:41 +0900 Subject: [PATCH 370/729] Add test coverage of storyboard preferring skin when specified --- .../TestSceneDrawableStoryboardSprite.cs | 176 +++++++++++++++--- 1 file changed, 150 insertions(+), 26 deletions(-) diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneDrawableStoryboardSprite.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneDrawableStoryboardSprite.cs index ec4bb1a86b..d20c7c2f7a 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneDrawableStoryboardSprite.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneDrawableStoryboardSprite.cs @@ -2,17 +2,23 @@ // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; +using System.IO; using System.Linq; +using System.Threading; +using System.Threading.Tasks; using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Extensions.IEnumerableExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Sprites; +using osu.Framework.IO.Stores; using osu.Framework.Testing; using osu.Game.Rulesets; +using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Osu; using osu.Game.Storyboards; using osu.Game.Storyboards.Drawables; +using osu.Game.Tests.Resources; using osuTK; namespace osu.Game.Tests.Visual.Gameplay @@ -21,17 +27,21 @@ namespace osu.Game.Tests.Visual.Gameplay { protected override Ruleset CreateRulesetForSkinProvider() => new OsuRuleset(); - [Cached] - private Storyboard storyboard { get; set; } = new Storyboard(); + [Cached(typeof(Storyboard))] + private TestStoryboard storyboard { get; set; } = new TestStoryboard(); private IEnumerable sprites => this.ChildrenOfType(); + private const string lookup_name = "hitcircleoverlay"; + [Test] public void TestSkinSpriteDisallowedByDefault() { - const string lookup_name = "hitcircleoverlay"; - - AddStep("allow skin lookup", () => storyboard.UseSkinSprites = false); + AddStep("disallow all lookups", () => + { + storyboard.UseSkinSprites = false; + storyboard.AlwaysProvideTexture = false; + }); AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero))); @@ -40,11 +50,13 @@ namespace osu.Game.Tests.Visual.Gameplay } [Test] - public void TestAllowLookupFromSkin() + public void TestLookupFromStoryboard() { - const string lookup_name = "hitcircleoverlay"; - - AddStep("allow skin lookup", () => storyboard.UseSkinSprites = true); + AddStep("allow storyboard lookup", () => + { + storyboard.UseSkinSprites = false; + storyboard.AlwaysProvideTexture = true; + }); AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero))); @@ -52,16 +64,54 @@ namespace osu.Game.Tests.Visual.Gameplay AddAssert("sprite found texture", () => sprites.Any(sprite => sprite.ChildrenOfType().All(s => s.Texture != null))); - AddAssert("skinnable sprite has correct size", () => - sprites.Any(sprite => sprite.ChildrenOfType().All(s => s.Size == new Vector2(128)))); + assertStoryboardSourced(); + } + + [Test] + public void TestSkinLookupPreferredOverStoryboard() + { + AddStep("allow all lookups", () => + { + storyboard.UseSkinSprites = true; + storyboard.AlwaysProvideTexture = true; + }); + + AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero))); + + // Only checking for at least one sprite that succeeded, as not all skins in this test provide the hitcircleoverlay texture. + AddAssert("sprite found texture", () => + sprites.Any(sprite => sprite.ChildrenOfType().All(s => s.Texture != null))); + + assertSkinSourced(); + } + + [Test] + public void TestAllowLookupFromSkin() + { + AddStep("allow skin lookup", () => + { + storyboard.UseSkinSprites = true; + storyboard.AlwaysProvideTexture = false; + }); + + AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero))); + + // Only checking for at least one sprite that succeeded, as not all skins in this test provide the hitcircleoverlay texture. + AddAssert("sprite found texture", () => + sprites.Any(sprite => sprite.ChildrenOfType().All(s => s.Texture != null))); + + assertSkinSourced(); } [Test] public void TestFlippedSprite() { - const string lookup_name = "hitcircleoverlay"; + AddStep("allow all lookups", () => + { + storyboard.UseSkinSprites = true; + storyboard.AlwaysProvideTexture = true; + }); - AddStep("allow skin lookup", () => storyboard.UseSkinSprites = true); AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero))); AddStep("flip sprites", () => sprites.ForEach(s => { @@ -74,9 +124,12 @@ namespace osu.Game.Tests.Visual.Gameplay [Test] public void TestZeroScale() { - const string lookup_name = "hitcircleoverlay"; + AddStep("allow all lookups", () => + { + storyboard.UseSkinSprites = true; + storyboard.AlwaysProvideTexture = true; + }); - AddStep("allow skin lookup", () => storyboard.UseSkinSprites = true); AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero))); AddAssert("sprites present", () => sprites.All(s => s.IsPresent)); AddStep("scale sprite", () => sprites.ForEach(s => s.VectorScale = new Vector2(0, 1))); @@ -86,9 +139,12 @@ namespace osu.Game.Tests.Visual.Gameplay [Test] public void TestNegativeScale() { - const string lookup_name = "hitcircleoverlay"; + AddStep("allow all lookups", () => + { + storyboard.UseSkinSprites = true; + storyboard.AlwaysProvideTexture = true; + }); - AddStep("allow skin lookup", () => storyboard.UseSkinSprites = true); AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero))); AddStep("scale sprite", () => sprites.ForEach(s => s.VectorScale = new Vector2(-1))); AddAssert("origin flipped", () => sprites.All(s => s.Origin == Anchor.BottomRight)); @@ -97,9 +153,12 @@ namespace osu.Game.Tests.Visual.Gameplay [Test] public void TestNegativeScaleWithFlippedSprite() { - const string lookup_name = "hitcircleoverlay"; + AddStep("allow all lookups", () => + { + storyboard.UseSkinSprites = true; + storyboard.AlwaysProvideTexture = true; + }); - AddStep("allow skin lookup", () => storyboard.UseSkinSprites = true); AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero))); AddStep("scale sprite", () => sprites.ForEach(s => s.VectorScale = new Vector2(-1))); AddAssert("origin flipped", () => sprites.All(s => s.Origin == Anchor.BottomRight)); @@ -111,13 +170,78 @@ namespace osu.Game.Tests.Visual.Gameplay AddAssert("origin back", () => sprites.All(s => s.Origin == Anchor.TopLeft)); } - private DrawableStoryboardSprite createSprite(string lookupName, Anchor origin, Vector2 initialPosition) - => new DrawableStoryboardSprite( - new StoryboardSprite(lookupName, origin, initialPosition) - ).With(s => + private DrawableStoryboard createSprite(string lookupName, Anchor origin, Vector2 initialPosition) + { + var layer = storyboard.GetLayer("Background"); + + var sprite = new StoryboardSprite(lookupName, origin, initialPosition); + sprite.AddLoop(Time.Current, 100).Alpha.Add(Easing.None, 0, 10000, 1, 1); + + layer.Elements.Clear(); + layer.Add(sprite); + + return storyboard.CreateDrawable(); + } + + private void assertStoryboardSourced() + { + AddAssert("sprite came from storyboard", () => + sprites.Any(sprite => sprite.ChildrenOfType().All(s => s.Size == new Vector2(200)))); + } + + private void assertSkinSourced() + { + AddAssert("sprite came from skin", () => + sprites.Any(sprite => sprite.ChildrenOfType().All(s => s.Size == new Vector2(128)))); + } + + private partial class TestStoryboard : Storyboard + { + public override DrawableStoryboard CreateDrawable(IReadOnlyList? mods = null) { - s.LifetimeStart = double.MinValue; - s.LifetimeEnd = double.MaxValue; - }); + return new TestDrawableStoryboard(this, mods); + } + + public bool AlwaysProvideTexture { get; set; } + + public override string GetStoragePathFromStoryboardPath(string path) => AlwaysProvideTexture ? path : string.Empty; + + private partial class TestDrawableStoryboard : DrawableStoryboard + { + private readonly bool alwaysProvideTexture; + + public TestDrawableStoryboard(TestStoryboard storyboard, IReadOnlyList? mods) + : base(storyboard, mods) + { + alwaysProvideTexture = storyboard.AlwaysProvideTexture; + } + + protected override IResourceStore CreateResourceLookupStore() => alwaysProvideTexture + ? new AlwaysReturnsTextureStore() + : new ResourceStore(); + + internal class AlwaysReturnsTextureStore : IResourceStore + { + private const string test_image = "Resources/Textures/test-image.png"; + + private readonly DllResourceStore store; + + public AlwaysReturnsTextureStore() + { + store = TestResources.GetStore(); + } + + public void Dispose() => store.Dispose(); + + public byte[] Get(string name) => store.Get(test_image); + + public Task GetAsync(string name, CancellationToken cancellationToken = new CancellationToken()) => store.GetAsync(test_image, cancellationToken); + + public Stream GetStream(string name) => store.GetStream(test_image); + + public IEnumerable GetAvailableResources() => store.GetAvailableResources(); + } + } + } } } From 4a7dc4d7927aaba2b1f527e6b2939fa179189535 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 19 Sep 2023 19:13:58 +0900 Subject: [PATCH 371/729] Fix storyboard `UseSkinSprites` being implemented incorrectly This was implemented as a "fallback", but it's actually intended to be an "override". As in it allows storyboarders to *prefer* a skin sprite before falling back to a local version contained within the storyboard. Can be tested with https://osu.ppy.sh/beatmapsets/832364#osu/1743837. Closes https://github.com/ppy/osu/issues/24813. --- .../Drawables/DrawableStoryboardSprite.cs | 23 ++++++++++++------- osu.Game/Storyboards/Storyboard.cs | 2 +- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/osu.Game/Storyboards/Drawables/DrawableStoryboardSprite.cs b/osu.Game/Storyboards/Drawables/DrawableStoryboardSprite.cs index 379de1a497..14132654d1 100644 --- a/osu.Game/Storyboards/Drawables/DrawableStoryboardSprite.cs +++ b/osu.Game/Storyboards/Drawables/DrawableStoryboardSprite.cs @@ -2,6 +2,7 @@ // See the LICENCE file in the repository root for full licence text. using System; +using System.ComponentModel; using osu.Framework.Allocation; using osu.Framework.Extensions.ObjectExtensions; using osu.Framework.Graphics; @@ -74,6 +75,15 @@ namespace osu.Game.Storyboards.Drawables public override bool IsPresent => !float.IsNaN(DrawPosition.X) && !float.IsNaN(DrawPosition.Y) && base.IsPresent; + [Resolved] + private ISkinSource skin { get; set; } = null!; + + [Resolved] + private Storyboard storyboard { get; set; } = null!; + + [Resolved] + private TextureStore textureStore { get; set; } = null!; + public DrawableStoryboardSprite(StoryboardSprite sprite) { Sprite = sprite; @@ -84,24 +94,21 @@ namespace osu.Game.Storyboards.Drawables LifetimeEnd = sprite.EndTimeForDisplay; } - [Resolved] - private ISkinSource skin { get; set; } = null!; - [BackgroundDependencyLoader] - private void load(TextureStore textureStore, Storyboard storyboard) + private void load() { - Texture = textureStore.Get(Sprite.Path); - - if (Texture == null && storyboard.UseSkinSprites) + if (storyboard.UseSkinSprites) { skin.SourceChanged += skinSourceChanged; skinSourceChanged(); } + else + Texture = textureStore.Get(Sprite.Path); Sprite.ApplyTransforms(this); } - private void skinSourceChanged() => Texture = skin.GetTexture(Sprite.Path); + private void skinSourceChanged() => Texture = skin.GetTexture(Sprite.Path) ?? textureStore.Get(Sprite.Path); protected override void Dispose(bool isDisposing) { diff --git a/osu.Game/Storyboards/Storyboard.cs b/osu.Game/Storyboards/Storyboard.cs index 03e30d6272..21342831b0 100644 --- a/osu.Game/Storyboards/Storyboard.cs +++ b/osu.Game/Storyboards/Storyboard.cs @@ -18,7 +18,7 @@ namespace osu.Game.Storyboards public BeatmapInfo BeatmapInfo = new BeatmapInfo(); /// - /// Whether the storyboard can fall back to skin sprites in case no matching storyboard sprites are found. + /// Whether the storyboard should prefer textures from the current skin before using local storyboard textures. /// public bool UseSkinSprites { get; set; } From 320a9fc17169c81b082c42d16fb750b9fc7e6026 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Tue, 19 Sep 2023 13:47:46 +0200 Subject: [PATCH 372/729] Replace test with better test --- .../Formats/LegacyBeatmapDecoderTest.cs | 29 +++++++++++-------- osu.Game.Tests/Resources/invalid-bank.osu | 18 ++++++++---- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs index 6fe9c902bb..1ba63f4037 100644 --- a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs +++ b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs @@ -622,7 +622,7 @@ namespace osu.Game.Tests.Beatmaps.Formats } [Test] - public void TestInvalidBankDefaultsToNone() + public void TestInvalidBankDefaultsToNormal() { var decoder = new LegacyBeatmapDecoder { ApplyOffsets = false }; @@ -631,20 +631,25 @@ namespace osu.Game.Tests.Beatmaps.Formats { var hitObjects = decoder.Decode(stream).HitObjects; - Assert.AreEqual(HitSampleInfo.BANK_NORMAL, hitObjects[0].Samples[0].Bank); - Assert.AreEqual(HitSampleInfo.BANK_NORMAL, hitObjects[0].Samples[1].Bank); + assertObjectHasBanks(hitObjects[0], HitSampleInfo.BANK_DRUM); + assertObjectHasBanks(hitObjects[1], HitSampleInfo.BANK_NORMAL); + assertObjectHasBanks(hitObjects[2], HitSampleInfo.BANK_SOFT); + assertObjectHasBanks(hitObjects[3], HitSampleInfo.BANK_DRUM); + assertObjectHasBanks(hitObjects[4], HitSampleInfo.BANK_NORMAL); - Assert.AreEqual(HitSampleInfo.BANK_NORMAL, hitObjects[1].Samples[0].Bank); - Assert.AreEqual(HitSampleInfo.BANK_SOFT, hitObjects[1].Samples[1].Bank); + assertObjectHasBanks(hitObjects[5], HitSampleInfo.BANK_DRUM, HitSampleInfo.BANK_DRUM); + assertObjectHasBanks(hitObjects[6], HitSampleInfo.BANK_DRUM, HitSampleInfo.BANK_NORMAL); + assertObjectHasBanks(hitObjects[7], HitSampleInfo.BANK_DRUM, HitSampleInfo.BANK_SOFT); + assertObjectHasBanks(hitObjects[8], HitSampleInfo.BANK_DRUM, HitSampleInfo.BANK_DRUM); + assertObjectHasBanks(hitObjects[9], HitSampleInfo.BANK_DRUM, HitSampleInfo.BANK_NORMAL); + } - Assert.AreEqual(HitSampleInfo.BANK_SOFT, hitObjects[2].Samples[0].Bank); - Assert.AreEqual(HitSampleInfo.BANK_SOFT, hitObjects[2].Samples[1].Bank); + void assertObjectHasBanks(HitObject hitObject, string normalBank, string? additionsBank = null) + { + Assert.AreEqual(normalBank, hitObject.Samples[0].Bank); - Assert.AreEqual(HitSampleInfo.BANK_NORMAL, hitObjects[3].Samples[0].Bank); - Assert.AreEqual(HitSampleInfo.BANK_SOFT, hitObjects[3].Samples[1].Bank); - - Assert.AreEqual(HitSampleInfo.BANK_NORMAL, hitObjects[4].Samples[0].Bank); - Assert.AreEqual(HitSampleInfo.BANK_NORMAL, hitObjects[4].Samples[1].Bank); + if (additionsBank != null) + Assert.AreEqual(additionsBank, hitObject.Samples[1].Bank); } } diff --git a/osu.Game.Tests/Resources/invalid-bank.osu b/osu.Game.Tests/Resources/invalid-bank.osu index fb54a61fd3..8c554cc17f 100644 --- a/osu.Game.Tests/Resources/invalid-bank.osu +++ b/osu.Game.Tests/Resources/invalid-bank.osu @@ -3,9 +3,17 @@ osu file format v14 [General] SampleSet: Normal +[TimingPoints] +0,500,4,3,0,100,1,0 + [HitObjects] -256,192,1000,1,8,0:0:0:0: -256,192,2000,1,8,1:2:0:0: -256,192,3000,1,8,2:62:0:0: -256,192,4000,1,8,41:2:0:0: -256,192,5000,1,8,41:62:0:0: +256,192,1000,5,0,0:0:0:0: +256,192,2000,1,0,1:0:0:0: +256,192,3000,1,0,2:0:0:0: +256,192,4000,1,0,3:0:0:0: +256,192,5000,1,0,42:0:0:0: +256,192,6000,5,4,0:0:0:0: +256,192,7000,1,4,0:1:0:0: +256,192,8000,1,4,0:2:0:0: +256,192,9000,1,4,0:3:0:0: +256,192,10000,1,4,0:42:0:0: From c4a0ca326ed5e02a9219dee579cb9a01c554960b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Tue, 19 Sep 2023 13:53:49 +0200 Subject: [PATCH 373/729] Replace sample bank fix with more correct fix stable does not treat unknown enum members as `None` / `Auto`, it treats them as `Normal`: switch (sampleSet) { case SampleSet.Normal: default: sample = 0; break; case SampleSet.None: case SampleSet.Soft: sample = 1; break; case SampleSet.Drum: sample = 2; break; } (from https://github.com/peppy/osu-stable-reference/blob/1531237b63392e82c003c712faa028406073aa8f/osu!/Audio/AudioEngine.cs#L1158-L1171). --- .../Rulesets/Objects/Legacy/ConvertHitObjectParser.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs index 339e9bb5bc..d20f2d31bb 100644 --- a/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs @@ -190,13 +190,18 @@ namespace osu.Game.Rulesets.Objects.Legacy string[] split = str.Split(':'); var bank = (LegacySampleBank)Parsing.ParseInt(split[0]); + if (!Enum.IsDefined(bank)) + bank = LegacySampleBank.Normal; + var addBank = (LegacySampleBank)Parsing.ParseInt(split[1]); + if (!Enum.IsDefined(addBank)) + addBank = LegacySampleBank.Normal; string stringBank = bank.ToString().ToLowerInvariant(); - if (stringBank == @"none" || !Enum.IsDefined(bank)) + if (stringBank == @"none") stringBank = null; string stringAddBank = addBank.ToString().ToLowerInvariant(); - if (stringAddBank == @"none" || !Enum.IsDefined(addBank)) + if (stringAddBank == @"none") stringAddBank = null; bankInfo.BankForNormal = stringBank; From ba518e1da8442d8aaf17a235d227a394f077689e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Tue, 19 Sep 2023 20:11:16 +0200 Subject: [PATCH 374/729] Fix `StoryboardResourceLookupStore` dying on failure to unmap path Before the introduction of `StoryboardResourceLookupStore`, missing files would softly fail by use of null fallbacks. After the aforementioned class was added, however, the fallbacks would not work anymore if for whatever reason `GetStoragePathFromStoryboardPath()` failed to unmap the storyboard asset name to a storage path. --- .../Drawables/DrawableStoryboard.cs | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs b/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs index 6931cea81e..c2a58d46ef 100644 --- a/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs +++ b/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs @@ -142,14 +142,32 @@ namespace osu.Game.Storyboards.Drawables public void Dispose() => realmFileStore.Dispose(); - public byte[] Get(string name) => - realmFileStore.Get(storyboard.GetStoragePathFromStoryboardPath(name)); + public byte[] Get(string name) + { + string? storagePath = storyboard.GetStoragePathFromStoryboardPath(name); - public Task GetAsync(string name, CancellationToken cancellationToken = new CancellationToken()) => - realmFileStore.GetAsync(storyboard.GetStoragePathFromStoryboardPath(name), cancellationToken); + return string.IsNullOrEmpty(storagePath) + ? null! + : realmFileStore.Get(storagePath); + } - public Stream GetStream(string name) => - realmFileStore.GetStream(storyboard.GetStoragePathFromStoryboardPath(name)); + public Task GetAsync(string name, CancellationToken cancellationToken = new CancellationToken()) + { + string? storagePath = storyboard.GetStoragePathFromStoryboardPath(name); + + return string.IsNullOrEmpty(storagePath) + ? Task.FromResult(null!) + : realmFileStore.GetAsync(storagePath, cancellationToken); + } + + public Stream? GetStream(string name) + { + string? storagePath = storyboard.GetStoragePathFromStoryboardPath(name); + + return string.IsNullOrEmpty(storagePath) + ? null + : realmFileStore.GetStream(storagePath); + } public IEnumerable GetAvailableResources() => realmFileStore.GetAvailableResources(); From 641e651bf282aeeb11050756e63e3a98cc136bf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Tue, 19 Sep 2023 20:18:33 +0200 Subject: [PATCH 375/729] Fix `DrawableStoryboardVideo` attempting to unmap path once too much The `StoryboardResourceLookupStore` cached at storyboard level is supposed to already be handling that; no need for local logic anymore. --- osu.Game/Storyboards/Drawables/DrawableStoryboardVideo.cs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/osu.Game/Storyboards/Drawables/DrawableStoryboardVideo.cs b/osu.Game/Storyboards/Drawables/DrawableStoryboardVideo.cs index eec2cd6a60..9a5db4bb39 100644 --- a/osu.Game/Storyboards/Drawables/DrawableStoryboardVideo.cs +++ b/osu.Game/Storyboards/Drawables/DrawableStoryboardVideo.cs @@ -29,12 +29,7 @@ namespace osu.Game.Storyboards.Drawables [BackgroundDependencyLoader(true)] private void load(IBindable beatmap, TextureStore textureStore) { - string? path = beatmap.Value.BeatmapSetInfo?.GetPathForFile(Video.Path); - - if (path == null) - return; - - var stream = textureStore.GetStream(path); + var stream = textureStore.GetStream(Video.Path); if (stream == null) return; From 333b839e0d7b859aa677a6a27163cb894c7d5563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Tue, 19 Sep 2023 21:37:44 +0200 Subject: [PATCH 376/729] Fix broken automatic beatmap download setting migration --- osu.Game/Configuration/OsuConfigManager.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/osu.Game/Configuration/OsuConfigManager.cs b/osu.Game/Configuration/OsuConfigManager.cs index b5253d3500..db71ff4e84 100644 --- a/osu.Game/Configuration/OsuConfigManager.cs +++ b/osu.Game/Configuration/OsuConfigManager.cs @@ -64,6 +64,12 @@ namespace osu.Game.Configuration SetDefault(OsuSetting.Username, string.Empty); SetDefault(OsuSetting.Token, string.Empty); +#pragma warning disable CS0618 // Type or member is obsolete + // this default set MUST remain despite the setting being deprecated, because `SetDefault()` calls are implicitly used to declare the type returned for the lookup. + // if this is removed, the setting will be interpreted as a string, and `Migrate()` will fail due to cast failure. + // can be removed 20240618 + SetDefault(OsuSetting.AutomaticallyDownloadWhenSpectating, false); +#pragma warning restore CS0618 // Type or member is obsolete SetDefault(OsuSetting.AutomaticallyDownloadMissingBeatmaps, false); SetDefault(OsuSetting.SavePassword, false).ValueChanged += enabled => @@ -218,7 +224,7 @@ namespace osu.Game.Configuration if (combined < 20230918) { #pragma warning disable CS0618 // Type or member is obsolete - SetValue(OsuSetting.AutomaticallyDownloadMissingBeatmaps, Get(OsuSetting.AutomaticallyDownloadWhenSpectating)); // can be removed 20240618 + SetValue(OsuSetting.AutomaticallyDownloadMissingBeatmaps, Get(OsuSetting.AutomaticallyDownloadWhenSpectating)); // can be removed 20240618 #pragma warning restore CS0618 // Type or member is obsolete } } From 8e16b1d50784e62123d4ab308985b186e3c4ecb3 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 20 Sep 2023 12:48:15 +0900 Subject: [PATCH 377/729] Simplify some maximum size specs --- .../Skinning/Legacy/LegacyFruitPiece.cs | 13 +++++++++---- .../HitCircles/Components/HitCircleOverlapMarker.cs | 2 +- .../HitCircles/Components/HitCirclePiece.cs | 2 +- .../Objects/Drawables/DrawableHitCircle.cs | 2 +- .../Objects/Drawables/DrawableSliderBall.cs | 2 +- .../Objects/Drawables/DrawableSliderRepeat.cs | 2 +- .../Objects/Drawables/DrawableSliderTail.cs | 2 +- .../Objects/Drawables/DrawableSliderTick.cs | 2 +- osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs | 5 +++++ .../Skinning/Argon/ArgonMainCirclePiece.cs | 2 +- .../Skinning/Argon/ArgonReverseArrow.cs | 2 +- .../Skinning/Default/CirclePiece.cs | 3 +-- .../Skinning/Default/ExplodePiece.cs | 3 +-- .../Skinning/Default/FlashPiece.cs | 3 +-- .../Skinning/Default/MainCirclePiece.cs | 3 +-- .../Skinning/Default/ReverseArrowPiece.cs | 2 +- osu.Game.Rulesets.Osu/Skinning/Default/RingPiece.cs | 3 +-- .../Skinning/Legacy/LegacyApproachCircle.cs | 2 +- .../Skinning/Legacy/LegacyMainCirclePiece.cs | 9 +++------ .../Skinning/Legacy/LegacyReverseArrow.cs | 3 +-- .../Skinning/Legacy/LegacySliderBall.cs | 5 ++--- .../Skinning/Legacy/OsuLegacySkinTransformer.cs | 4 ++-- .../UI/Cursor/CursorRippleVisualiser.cs | 2 +- 23 files changed, 39 insertions(+), 39 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyFruitPiece.cs b/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyFruitPiece.cs index eacda1dc64..62097d79bd 100644 --- a/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyFruitPiece.cs +++ b/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyFruitPiece.cs @@ -26,21 +26,26 @@ namespace osu.Game.Rulesets.Catch.Skinning.Legacy switch (visualRepresentation) { case FruitVisualRepresentation.Pear: - SetTexture(Skin.GetTexture("fruit-pear")?.WithMaximumSize(fruit_max_size), Skin.GetTexture("fruit-pear-overlay")?.WithMaximumSize(fruit_max_size)); + setTextures("pear"); break; case FruitVisualRepresentation.Grape: - SetTexture(Skin.GetTexture("fruit-grapes")?.WithMaximumSize(fruit_max_size), Skin.GetTexture("fruit-grapes-overlay")?.WithMaximumSize(fruit_max_size)); + setTextures("grapes"); break; case FruitVisualRepresentation.Pineapple: - SetTexture(Skin.GetTexture("fruit-apple")?.WithMaximumSize(fruit_max_size), Skin.GetTexture("fruit-apple-overlay")?.WithMaximumSize(fruit_max_size)); + setTextures("apple"); break; case FruitVisualRepresentation.Raspberry: - SetTexture(Skin.GetTexture("fruit-orange")?.WithMaximumSize(fruit_max_size), Skin.GetTexture("fruit-orange-overlay")?.WithMaximumSize(fruit_max_size)); + setTextures("orange"); break; } + + void setTextures(string fruitName) => SetTexture( + Skin.GetTexture($"fruit-{fruitName}")?.WithMaximumSize(fruit_max_size), + Skin.GetTexture($"fruit-{fruitName}-overlay")?.WithMaximumSize(fruit_max_size) + ); } } } diff --git a/osu.Game.Rulesets.Osu/Edit/Blueprints/HitCircles/Components/HitCircleOverlapMarker.cs b/osu.Game.Rulesets.Osu/Edit/Blueprints/HitCircles/Components/HitCircleOverlapMarker.cs index e5cc8595d1..3cba0610a1 100644 --- a/osu.Game.Rulesets.Osu/Edit/Blueprints/HitCircles/Components/HitCircleOverlapMarker.cs +++ b/osu.Game.Rulesets.Osu/Edit/Blueprints/HitCircles/Components/HitCircleOverlapMarker.cs @@ -41,7 +41,7 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.HitCircles.Components { Origin = Anchor.Centre; - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = OsuHitObject.OBJECT_DIMENSIONS; InternalChild = content = new Container { diff --git a/osu.Game.Rulesets.Osu/Edit/Blueprints/HitCircles/Components/HitCirclePiece.cs b/osu.Game.Rulesets.Osu/Edit/Blueprints/HitCircles/Components/HitCirclePiece.cs index 670e98ca50..c585f09b00 100644 --- a/osu.Game.Rulesets.Osu/Edit/Blueprints/HitCircles/Components/HitCirclePiece.cs +++ b/osu.Game.Rulesets.Osu/Edit/Blueprints/HitCircles/Components/HitCirclePiece.cs @@ -16,7 +16,7 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.HitCircles.Components { Origin = Anchor.Centre; - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = OsuHitObject.OBJECT_DIMENSIONS; CornerRadius = Size.X / 2; CornerExponent = 2; diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs index 3458069dd1..999979c491 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs @@ -242,7 +242,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables public HitReceptor() { - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = OsuHitObject.OBJECT_DIMENSIONS; Anchor = Anchor.Centre; Origin = Anchor.Centre; diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderBall.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderBall.cs index d06fb5b4de..47214f1e53 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderBall.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderBall.cs @@ -37,7 +37,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables Origin = Anchor.Centre; - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = OsuHitObject.OBJECT_DIMENSIONS; Children = new[] { diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderRepeat.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderRepeat.cs index fc4863f164..5721328057 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderRepeat.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderRepeat.cs @@ -50,7 +50,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables private void load() { Origin = Anchor.Centre; - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = OsuHitObject.OBJECT_DIMENSIONS; AddInternal(scaleContainer = new Container { diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs index d9501f7d58..9fbc97c484 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs @@ -55,7 +55,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables private void load() { Origin = Anchor.Centre; - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = OsuHitObject.OBJECT_DIMENSIONS; AddRangeInternal(new Drawable[] { diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs index 6d0ae93e62..a947580d2f 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs @@ -41,7 +41,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables [BackgroundDependencyLoader] private void load() { - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = OsuHitObject.OBJECT_DIMENSIONS; Origin = Anchor.Centre; AddInternal(scaleContainer = new SkinnableDrawable(new OsuSkinComponentLookup(OsuSkinComponents.SliderScorePoint), _ => new CircularContainer diff --git a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs index fd5741698a..0bdbfaa760 100644 --- a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs +++ b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs @@ -21,6 +21,11 @@ namespace osu.Game.Rulesets.Osu.Objects /// public const float OBJECT_RADIUS = 64; + /// + /// The width and height any element participating in display of a hitcircle (or similarly sized object) should be. + /// + public static readonly Vector2 OBJECT_DIMENSIONS = new Vector2(OBJECT_RADIUS * 2); + /// /// Scoring distance with a speed-adjusted beat length of 1 second (ie. the speed slider balls move through their track). /// diff --git a/osu.Game.Rulesets.Osu/Skinning/Argon/ArgonMainCirclePiece.cs b/osu.Game.Rulesets.Osu/Skinning/Argon/ArgonMainCirclePiece.cs index 3427031dc8..7508a689d2 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Argon/ArgonMainCirclePiece.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Argon/ArgonMainCirclePiece.cs @@ -48,7 +48,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Argon private Bindable configHitLighting = null!; - private static readonly Vector2 circle_size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + private static readonly Vector2 circle_size = OsuHitObject.OBJECT_DIMENSIONS; [Resolved] private DrawableHitObject drawableObject { get; set; } = null!; diff --git a/osu.Game.Rulesets.Osu/Skinning/Argon/ArgonReverseArrow.cs b/osu.Game.Rulesets.Osu/Skinning/Argon/ArgonReverseArrow.cs index f93e26b2ca..67fc1b2304 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Argon/ArgonReverseArrow.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Argon/ArgonReverseArrow.cs @@ -27,7 +27,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Argon Anchor = Anchor.Centre; Origin = Anchor.Centre; - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = OsuHitObject.OBJECT_DIMENSIONS; InternalChildren = new Drawable[] { diff --git a/osu.Game.Rulesets.Osu/Skinning/Default/CirclePiece.cs b/osu.Game.Rulesets.Osu/Skinning/Default/CirclePiece.cs index f4761e0ea8..65a7b1328b 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Default/CirclePiece.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Default/CirclePiece.cs @@ -9,7 +9,6 @@ using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Textures; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects; -using osuTK; namespace osu.Game.Rulesets.Osu.Skinning.Default { @@ -22,7 +21,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Default public CirclePiece() { - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = OsuHitObject.OBJECT_DIMENSIONS; Masking = true; CornerRadius = Size.X / 2; diff --git a/osu.Game.Rulesets.Osu/Skinning/Default/ExplodePiece.cs b/osu.Game.Rulesets.Osu/Skinning/Default/ExplodePiece.cs index 91bf75617a..7beb16f7d7 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Default/ExplodePiece.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Default/ExplodePiece.cs @@ -7,7 +7,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects; -using osuTK; namespace osu.Game.Rulesets.Osu.Skinning.Default { @@ -20,7 +19,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Default public ExplodePiece() { - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = OsuHitObject.OBJECT_DIMENSIONS; Anchor = Anchor.Centre; Origin = Anchor.Centre; diff --git a/osu.Game.Rulesets.Osu/Skinning/Default/FlashPiece.cs b/osu.Game.Rulesets.Osu/Skinning/Default/FlashPiece.cs index 789137117e..86087ac50d 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Default/FlashPiece.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Default/FlashPiece.cs @@ -5,7 +5,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Game.Rulesets.Osu.Objects; -using osuTK; namespace osu.Game.Rulesets.Osu.Skinning.Default { @@ -13,7 +12,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Default { public FlashPiece() { - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = OsuHitObject.OBJECT_DIMENSIONS; Anchor = Anchor.Centre; Origin = Anchor.Centre; diff --git a/osu.Game.Rulesets.Osu/Skinning/Default/MainCirclePiece.cs b/osu.Game.Rulesets.Osu/Skinning/Default/MainCirclePiece.cs index 20fa4e5342..bcea33f63c 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Default/MainCirclePiece.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Default/MainCirclePiece.cs @@ -9,7 +9,6 @@ using osu.Framework.Graphics.Containers; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; -using osuTK; using osuTK.Graphics; namespace osu.Game.Rulesets.Osu.Skinning.Default @@ -25,7 +24,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Default public MainCirclePiece() { - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = OsuHitObject.OBJECT_DIMENSIONS; Anchor = Anchor.Centre; Origin = Anchor.Centre; diff --git a/osu.Game.Rulesets.Osu/Skinning/Default/ReverseArrowPiece.cs b/osu.Game.Rulesets.Osu/Skinning/Default/ReverseArrowPiece.cs index 3fe7872ff7..27868db2f6 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Default/ReverseArrowPiece.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Default/ReverseArrowPiece.cs @@ -27,7 +27,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Default Anchor = Anchor.Centre; Origin = Anchor.Centre; - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = OsuHitObject.OBJECT_DIMENSIONS; Child = new SkinnableDrawable(new OsuSkinComponentLookup(OsuSkinComponents.ReverseArrow), _ => new SpriteIcon { diff --git a/osu.Game.Rulesets.Osu/Skinning/Default/RingPiece.cs b/osu.Game.Rulesets.Osu/Skinning/Default/RingPiece.cs index 46d48f62e7..c3bbd89ab6 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Default/RingPiece.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Default/RingPiece.cs @@ -5,7 +5,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Game.Rulesets.Osu.Objects; -using osuTK; using osuTK.Graphics; namespace osu.Game.Rulesets.Osu.Skinning.Default @@ -14,7 +13,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Default { public RingPiece(float thickness = 9) { - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); + Size = OsuHitObject.OBJECT_DIMENSIONS; Anchor = Anchor.Centre; Origin = Anchor.Centre; diff --git a/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyApproachCircle.cs b/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyApproachCircle.cs index cdc61ebd9b..403a14214e 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyApproachCircle.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyApproachCircle.cs @@ -21,7 +21,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy private DrawableHitObject drawableObject { get; set; } = null!; public LegacyApproachCircle() - : base("Gameplay/osu/approachcircle", new Vector2(OsuHitObject.OBJECT_RADIUS * 2)) + : base("Gameplay/osu/approachcircle", OsuHitObject.OBJECT_DIMENSIONS) { } diff --git a/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyMainCirclePiece.cs b/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyMainCirclePiece.cs index 18010cdb2c..8990204931 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyMainCirclePiece.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyMainCirclePiece.cs @@ -14,15 +14,12 @@ using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Skinning; -using osuTK; using osuTK.Graphics; namespace osu.Game.Rulesets.Osu.Skinning.Legacy { public partial class LegacyMainCirclePiece : CompositeDrawable { - private static readonly Vector2 circle_piece_size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2); - public override bool RemoveCompletedTransforms => false; /// @@ -53,7 +50,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy this.priorityLookupPrefix = priorityLookupPrefix; this.hasNumber = hasNumber; - Size = circle_piece_size; + Size = OsuHitObject.OBJECT_DIMENSIONS; } [BackgroundDependencyLoader] @@ -70,7 +67,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy // expected behaviour in this scenario is not showing the overlay, rather than using hitcircleoverlay.png. InternalChildren = new[] { - CircleSprite = new LegacyKiaiFlashingDrawable(() => new Sprite { Texture = skin.GetTexture(circleName)?.WithMaximumSize(circle_piece_size) }) + CircleSprite = new LegacyKiaiFlashingDrawable(() => new Sprite { Texture = skin.GetTexture(circleName)?.WithMaximumSize(OsuHitObject.OBJECT_DIMENSIONS) }) { Anchor = Anchor.Centre, Origin = Anchor.Centre, @@ -79,7 +76,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Child = OverlaySprite = new LegacyKiaiFlashingDrawable(() => skin.GetAnimation(@$"{circleName}overlay", true, true, frameLength: 1000 / 2d, maxSize: circle_piece_size)) + Child = OverlaySprite = new LegacyKiaiFlashingDrawable(() => skin.GetAnimation(@$"{circleName}overlay", true, true, frameLength: 1000 / 2d, maxSize: OsuHitObject.OBJECT_DIMENSIONS)) { Anchor = Anchor.Centre, Origin = Anchor.Centre, diff --git a/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyReverseArrow.cs b/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyReverseArrow.cs index 293df6b3a0..3a80607522 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyReverseArrow.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyReverseArrow.cs @@ -10,7 +10,6 @@ using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Skinning; -using osuTK; using osuTK.Graphics; namespace osu.Game.Rulesets.Osu.Skinning.Legacy @@ -37,7 +36,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy var skin = skinSource.FindProvider(s => s.GetTexture(lookupName) != null); - InternalChild = arrow = (skin?.GetAnimation(lookupName, true, true, maxSize: new Vector2(OsuHitObject.OBJECT_RADIUS * 2)) ?? Empty()); + InternalChild = arrow = (skin?.GetAnimation(lookupName, true, true, maxSize: OsuHitObject.OBJECT_DIMENSIONS) ?? Empty()); textureIsDefaultSkin = skin is ISkinTransformer transformer && transformer.Skin is DefaultLegacySkin; } diff --git a/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacySliderBall.cs b/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacySliderBall.cs index 145a8a50af..c3beb5bc35 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacySliderBall.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Legacy/LegacySliderBall.cs @@ -10,7 +10,6 @@ using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Skinning; -using osuTK; using osuTK.Graphics; namespace osu.Game.Rulesets.Osu.Skinning.Legacy @@ -48,7 +47,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Texture = skin.GetTexture("sliderb-nd")?.WithMaximumSize(new Vector2(OsuHitObject.OBJECT_RADIUS * 2)), + Texture = skin.GetTexture("sliderb-nd")?.WithMaximumSize(OsuHitObject.OBJECT_DIMENSIONS), Colour = new Color4(5, 5, 5, 255), }, LegacyColourCompatibility.ApplyWithDoubledAlpha(animationContent.With(d => @@ -60,7 +59,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Texture = skin.GetTexture("sliderb-spec")?.WithMaximumSize(new Vector2(OsuHitObject.OBJECT_RADIUS * 2)), + Texture = skin.GetTexture("sliderb-spec")?.WithMaximumSize(OsuHitObject.OBJECT_DIMENSIONS), Blending = BlendingParameters.Additive, }, }; diff --git a/osu.Game.Rulesets.Osu/Skinning/Legacy/OsuLegacySkinTransformer.cs b/osu.Game.Rulesets.Osu/Skinning/Legacy/OsuLegacySkinTransformer.cs index 2564dbf335..ea6f6fe6ce 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Legacy/OsuLegacySkinTransformer.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Legacy/OsuLegacySkinTransformer.cs @@ -49,7 +49,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy return null; case OsuSkinComponents.SliderBall: - var sliderBallContent = this.GetAnimation("sliderb", true, true, animationSeparator: "", maxSize: new Vector2(OsuHitObject.OBJECT_RADIUS * 2)); + var sliderBallContent = this.GetAnimation("sliderb", true, true, animationSeparator: "", maxSize: OsuHitObject.OBJECT_DIMENSIONS); // todo: slider ball has a custom frame delay based on velocity // Math.Max((150 / Velocity) * GameBase.SIXTY_FRAME_TIME, GameBase.SIXTY_FRAME_TIME); @@ -139,7 +139,7 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy if (!this.HasFont(LegacyFont.HitCircle)) return null; - return new LegacySpriteText(LegacyFont.HitCircle, new Vector2(OsuHitObject.OBJECT_RADIUS * 2)) + return new LegacySpriteText(LegacyFont.HitCircle, OsuHitObject.OBJECT_DIMENSIONS) { // stable applies a blanket 0.8x scale to hitcircle fonts Scale = new Vector2(0.8f), diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/CursorRippleVisualiser.cs b/osu.Game.Rulesets.Osu/UI/Cursor/CursorRippleVisualiser.cs index 076d97d06a..52486b701a 100644 --- a/osu.Game.Rulesets.Osu/UI/Cursor/CursorRippleVisualiser.cs +++ b/osu.Game.Rulesets.Osu/UI/Cursor/CursorRippleVisualiser.cs @@ -95,7 +95,7 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor { new RingPiece(3) { - Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2), + Size = OsuHitObject.OBJECT_DIMENSIONS, Alpha = 0.1f, } }; From 50adb5f7a7991dcfd84eba98bb28155b65e32175 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 20 Sep 2023 12:54:28 +0900 Subject: [PATCH 378/729] Remove incorrectly merge conflict resolved --- osu.Game/Storyboards/Drawables/DrawableStoryboard.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs b/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs index a11251ed22..352246c533 100644 --- a/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs +++ b/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs @@ -23,8 +23,6 @@ namespace osu.Game.Storyboards.Drawables { public partial class DrawableStoryboard : Container { - public Vector2 AppliedScale { get; private set; } - [Cached(typeof(Storyboard))] public Storyboard Storyboard { get; } From b5e64d933c9d09196c0553d548e5dde0bbec8ed2 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 20 Sep 2023 12:54:36 +0900 Subject: [PATCH 379/729] Apply same fix to `DrawableStoryboardAnimation` --- .../Drawables/DrawableStoryboardAnimation.cs | 43 ++++++++++++------- .../Drawables/DrawableStoryboardSprite.cs | 6 +-- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/osu.Game/Storyboards/Drawables/DrawableStoryboardAnimation.cs b/osu.Game/Storyboards/Drawables/DrawableStoryboardAnimation.cs index 054a50456b..33f7a3c6f2 100644 --- a/osu.Game/Storyboards/Drawables/DrawableStoryboardAnimation.cs +++ b/osu.Game/Storyboards/Drawables/DrawableStoryboardAnimation.cs @@ -94,25 +94,19 @@ namespace osu.Game.Storyboards.Drawables [Resolved] private IBeatSyncProvider beatSyncProvider { get; set; } + [Resolved] + private TextureStore textureStore { get; set; } + [BackgroundDependencyLoader] - private void load(TextureStore textureStore, Storyboard storyboard) + private void load(Storyboard storyboard) { - int frameIndex = 0; - - Texture frameTexture = textureStore.Get(getFramePath(frameIndex)); - - if (frameTexture != null) + if (storyboard.UseSkinSprites) { - // sourcing from storyboard. - for (frameIndex = 0; frameIndex < Animation.FrameCount; frameIndex++) - AddFrame(textureStore.Get(getFramePath(frameIndex)), Animation.FrameDelay); - } - else if (storyboard.UseSkinSprites) - { - // fallback to skin if required. skin.SourceChanged += skinSourceChanged; skinSourceChanged(); } + else + addFramesFromStoryboardSource(); Animation.ApplyTransforms(this); } @@ -135,11 +129,28 @@ namespace osu.Game.Storyboards.Drawables // When reading from a skin, we match stables weird behaviour where `FrameCount` is ignored // and resources are retrieved until the end of the animation. - foreach (var texture in skin.GetTextures(Path.GetFileNameWithoutExtension(Animation.Path)!, default, default, true, string.Empty, out _)) - AddFrame(texture, Animation.FrameDelay); + var skinTextures = skin.GetTextures(Path.GetFileNameWithoutExtension(Animation.Path)!, default, default, true, string.Empty, out _); + + if (skinTextures.Length > 0) + { + foreach (var texture in skinTextures) + AddFrame(texture, Animation.FrameDelay); + } + else + { + addFramesFromStoryboardSource(); + } } - private string getFramePath(int i) => Animation.Path.Replace(".", $"{i}."); + private void addFramesFromStoryboardSource() + { + int frameIndex; + // sourcing from storyboard. + for (frameIndex = 0; frameIndex < Animation.FrameCount; frameIndex++) + AddFrame(textureStore.Get(getFramePath(frameIndex)), Animation.FrameDelay); + + string getFramePath(int i) => Animation.Path.Replace(".", $"{i}."); + } protected override void Dispose(bool isDisposing) { diff --git a/osu.Game/Storyboards/Drawables/DrawableStoryboardSprite.cs b/osu.Game/Storyboards/Drawables/DrawableStoryboardSprite.cs index 14132654d1..ad344b6bd4 100644 --- a/osu.Game/Storyboards/Drawables/DrawableStoryboardSprite.cs +++ b/osu.Game/Storyboards/Drawables/DrawableStoryboardSprite.cs @@ -2,7 +2,6 @@ // See the LICENCE file in the repository root for full licence text. using System; -using System.ComponentModel; using osu.Framework.Allocation; using osu.Framework.Extensions.ObjectExtensions; using osu.Framework.Graphics; @@ -78,9 +77,6 @@ namespace osu.Game.Storyboards.Drawables [Resolved] private ISkinSource skin { get; set; } = null!; - [Resolved] - private Storyboard storyboard { get; set; } = null!; - [Resolved] private TextureStore textureStore { get; set; } = null!; @@ -95,7 +91,7 @@ namespace osu.Game.Storyboards.Drawables } [BackgroundDependencyLoader] - private void load() + private void load(Storyboard storyboard) { if (storyboard.UseSkinSprites) { From bd66285bd47859569618a26eebbf2563d65d9f93 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 20 Sep 2023 12:59:40 +0900 Subject: [PATCH 380/729] Rename parameter on `LegacySpriteText` to better imply the maximum size is per glyph --- osu.Game/Skinning/LegacySpriteText.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game/Skinning/LegacySpriteText.cs b/osu.Game/Skinning/LegacySpriteText.cs index f021a99102..7eb92126fa 100644 --- a/osu.Game/Skinning/LegacySpriteText.cs +++ b/osu.Game/Skinning/LegacySpriteText.cs @@ -13,7 +13,7 @@ namespace osu.Game.Skinning public sealed partial class LegacySpriteText : OsuSpriteText { private readonly LegacyFont font; - private readonly Vector2? maxSize; + private readonly Vector2? maxSizePerGlyph; private LegacyGlyphStore glyphStore = null!; @@ -21,10 +21,10 @@ namespace osu.Game.Skinning protected override char[] FixedWidthExcludeCharacters => new[] { ',', '.', '%', 'x' }; - public LegacySpriteText(LegacyFont font, Vector2? maxSize = null) + public LegacySpriteText(LegacyFont font, Vector2? maxSizePerGlyph = null) { this.font = font; - this.maxSize = maxSize; + this.maxSizePerGlyph = maxSizePerGlyph; Shadow = false; UseFullGlyphHeight = false; @@ -36,7 +36,7 @@ namespace osu.Game.Skinning Font = new FontUsage(skin.GetFontPrefix(font), 1, fixedWidth: true); Spacing = new Vector2(-skin.GetFontOverlap(font), 0); - glyphStore = new LegacyGlyphStore(skin, maxSize); + glyphStore = new LegacyGlyphStore(skin, maxSizePerGlyph); } protected override TextBuilder CreateTextBuilder(ITexturedGlyphLookupStore store) => base.CreateTextBuilder(glyphStore); From 1316403180f1f4f095e71e205221eead5a481912 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 20 Sep 2023 13:02:40 +0900 Subject: [PATCH 381/729] Fix inspection in new test scene --- .../Visual/Gameplay/TestSceneGameplayElementDimensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneGameplayElementDimensions.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneGameplayElementDimensions.cs index 20e6e5658c..ff7cf2a124 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneGameplayElementDimensions.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneGameplayElementDimensions.cs @@ -66,7 +66,7 @@ namespace osu.Game.Tests.Visual.Gameplay return texture; } - public ISkin? FindProvider(Func lookupFunction) => this; + public ISkin FindProvider(Func lookupFunction) => this; public IEnumerable AllSources => new[] { this }; } } From 71ac5cfc792a2aec35720e08f6d02d87e69995be Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 20 Sep 2023 14:14:37 +0900 Subject: [PATCH 382/729] Don't bother binding to friends changes for score display purposes --- osu.Game/Screens/Play/HUD/GameplayLeaderboardScore.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/osu.Game/Screens/Play/HUD/GameplayLeaderboardScore.cs b/osu.Game/Screens/Play/HUD/GameplayLeaderboardScore.cs index 502303e80c..7471955493 100644 --- a/osu.Game/Screens/Play/HUD/GameplayLeaderboardScore.cs +++ b/osu.Game/Screens/Play/HUD/GameplayLeaderboardScore.cs @@ -13,7 +13,6 @@ using osu.Game.Configuration; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osu.Game.Online.API; -using osu.Game.Online.API.Requests.Responses; using osu.Game.Rulesets.Scoring; using osu.Game.Users; using osu.Game.Users.Drawables; @@ -110,7 +109,7 @@ namespace osu.Game.Screens.Play.HUD private IBindable scoreDisplayMode = null!; - private readonly IBindableList apiFriends = new BindableList(); + private bool isFriend; /// /// Creates a new . @@ -317,8 +316,7 @@ namespace osu.Game.Screens.Play.HUD HasQuit.BindValueChanged(_ => updateState()); - apiFriends.BindTo(api.Friends); - apiFriends.BindCollectionChanged((_, _) => updateState()); + isFriend = User != null && api.Friends.Any(u => User.OnlineID == u.Id); } protected override void LoadComplete() @@ -397,7 +395,7 @@ namespace osu.Game.Screens.Play.HUD panelColour = BackgroundColour ?? Color4Extensions.FromHex("ffd966"); textColour = TextColour ?? Color4Extensions.FromHex("2e576b"); } - else if (apiFriends.Any(f => User?.Equals(f) == true)) + else if (isFriend) { panelColour = BackgroundColour ?? Color4Extensions.FromHex("ff549a"); textColour = TextColour ?? Color4.White; From c6cc858967ccc3068aa0b19a7e308451b6e16d97 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 20 Sep 2023 15:27:30 +0900 Subject: [PATCH 383/729] Change implementation of "show speed changes" to require explicit ruleset support --- .../Edit/ScrollingHitObjectComposer.cs | 37 +++++++------------ .../ISupportConstantAlgorithmToggle.cs | 15 ++++++++ 2 files changed, 28 insertions(+), 24 deletions(-) create mode 100644 osu.Game/Rulesets/UI/Scrolling/ISupportConstantAlgorithmToggle.cs diff --git a/osu.Game/Rulesets/Edit/ScrollingHitObjectComposer.cs b/osu.Game/Rulesets/Edit/ScrollingHitObjectComposer.cs index 0340354016..75305a0c20 100644 --- a/osu.Game/Rulesets/Edit/ScrollingHitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/ScrollingHitObjectComposer.cs @@ -6,7 +6,6 @@ using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; -using osu.Game.Configuration; using osu.Game.Graphics.UserInterface; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.UI.Scrolling; @@ -28,34 +27,24 @@ namespace osu.Game.Rulesets.Edit [BackgroundDependencyLoader] private void load() { - if (DrawableRuleset is DrawableScrollingRuleset drawableScrollingRuleset) + if (DrawableRuleset is ISupportConstantAlgorithmToggle toggleRuleset) { - var originalVisualisationMethod = drawableScrollingRuleset.VisualisationMethod; - - if (originalVisualisationMethod != ScrollVisualisationMethod.Constant) + LeftToolbox.Add(new EditorToolboxGroup("playfield") { - LeftToolbox.Add(new EditorToolboxGroup("playfield") + Child = new FillFlowContainer { - Child = new FillFlowContainer + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Direction = FillDirection.Vertical, + Spacing = new Vector2(0, 5), + Children = new[] { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Direction = FillDirection.Vertical, - Spacing = new Vector2(0, 5), - Children = new[] - { - new DrawableTernaryButton(new TernaryButton(showSpeedChanges, "Show speed changes", () => new SpriteIcon { Icon = FontAwesome.Solid.TachometerAlt })) - } - }, - }); + new DrawableTernaryButton(new TernaryButton(showSpeedChanges, "Show speed changes", () => new SpriteIcon { Icon = FontAwesome.Solid.TachometerAlt })) + } + }, + }); - showSpeedChanges.BindValueChanged(state => - { - drawableScrollingRuleset.VisualisationMethod = state.NewValue == TernaryState.True - ? originalVisualisationMethod - : ScrollVisualisationMethod.Constant; - }, true); - } + showSpeedChanges.BindValueChanged(state => toggleRuleset.ShowSpeedChanges.Value = state.NewValue == TernaryState.True, true); } } } diff --git a/osu.Game/Rulesets/UI/Scrolling/ISupportConstantAlgorithmToggle.cs b/osu.Game/Rulesets/UI/Scrolling/ISupportConstantAlgorithmToggle.cs new file mode 100644 index 0000000000..aaa635350e --- /dev/null +++ b/osu.Game/Rulesets/UI/Scrolling/ISupportConstantAlgorithmToggle.cs @@ -0,0 +1,15 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Bindables; + +namespace osu.Game.Rulesets.UI.Scrolling +{ + /// + /// Denotes a which supports toggling constant algorithm for better display in the editor. + /// + public interface ISupportConstantAlgorithmToggle : IDrawableScrollingRuleset + { + public BindableBool ShowSpeedChanges { get; } + } +} From 41a8239e49d87fec622135874bddcf2660ae0000 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 20 Sep 2023 15:27:50 +0900 Subject: [PATCH 384/729] Remvoe null default for mods which can't be null --- osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs | 2 +- osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs | 2 +- osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs | 2 +- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs b/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs index 136a78b343..d74e6194fb 100644 --- a/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs +++ b/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs @@ -141,7 +141,7 @@ namespace osu.Game.Rulesets.Catch.Edit return base.OnPressed(e); } - protected override DrawableRuleset CreateDrawableRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList? mods = null) => + protected override DrawableRuleset CreateDrawableRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList mods) => new DrawableCatchEditorRuleset(ruleset, beatmap, mods) { TimeRangeMultiplier = { BindTarget = timeRangeMultiplier, } diff --git a/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs b/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs index 9bde9485b2..8e61baca81 100644 --- a/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs +++ b/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs @@ -57,7 +57,7 @@ namespace osu.Game.Rulesets.Mania.Edit protected override Playfield PlayfieldAtScreenSpacePosition(Vector2 screenSpacePosition) => Playfield.GetColumnByPosition(screenSpacePosition); - protected override DrawableRuleset CreateDrawableRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList mods = null) + protected override DrawableRuleset CreateDrawableRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList mods) { drawableRuleset = new DrawableManiaEditorRuleset(ruleset, beatmap, mods); diff --git a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs index cff2171cbd..fdc11be42c 100644 --- a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs +++ b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs @@ -37,7 +37,7 @@ namespace osu.Game.Rulesets.Osu.Edit { } - protected override DrawableRuleset CreateDrawableRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList mods = null) + protected override DrawableRuleset CreateDrawableRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList mods) => new DrawableOsuEditorRuleset(ruleset, beatmap, mods); protected override IReadOnlyList CompositionTools => new HitObjectCompositionTool[] diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 295a016c7b..f9a6b5083e 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -307,7 +307,7 @@ namespace osu.Game.Rulesets.Edit /// The loaded beatmap. /// The mods to be applied. /// An editor-relevant . - protected virtual DrawableRuleset CreateDrawableRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList mods = null) + protected virtual DrawableRuleset CreateDrawableRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList mods) => (DrawableRuleset)ruleset.CreateDrawableRulesetWith(beatmap, mods); #region Tool selection logic From cb0226f84356ae0fe991cae3664590b3c6dcc708 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 20 Sep 2023 15:28:13 +0900 Subject: [PATCH 385/729] Implement new interface-based speed change visualisation support on mania/taiko --- .../Edit/DrawableManiaEditorRuleset.cs | 13 ++++++- .../Edit/DrawableTaikoEditorRuleset.cs | 37 +++++++++++++++++++ .../Edit/TaikoHitObjectComposer.cs | 6 +++ .../UI/DrawableTaikoRuleset.cs | 7 +++- 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 osu.Game.Rulesets.Taiko/Edit/DrawableTaikoEditorRuleset.cs diff --git a/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs b/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs index 1741dad5d6..7b019a2bdf 100644 --- a/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs +++ b/osu.Game.Rulesets.Mania/Edit/DrawableManiaEditorRuleset.cs @@ -2,8 +2,10 @@ // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; +using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Game.Beatmaps; +using osu.Game.Configuration; using osu.Game.Rulesets.Mania.UI; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.UI; @@ -12,8 +14,10 @@ using osuTK; namespace osu.Game.Rulesets.Mania.Edit { - public partial class DrawableManiaEditorRuleset : DrawableManiaRuleset + public partial class DrawableManiaEditorRuleset : DrawableManiaRuleset, ISupportConstantAlgorithmToggle { + public BindableBool ShowSpeedChanges { get; set; } = new BindableBool(); + public new IScrollingInfo ScrollingInfo => base.ScrollingInfo; public DrawableManiaEditorRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList? mods) @@ -21,6 +25,13 @@ namespace osu.Game.Rulesets.Mania.Edit { } + protected override void LoadComplete() + { + base.LoadComplete(); + + ShowSpeedChanges.BindValueChanged(showChanges => VisualisationMethod = showChanges.NewValue ? ScrollVisualisationMethod.Sequential : ScrollVisualisationMethod.Constant, true); + } + protected override Playfield CreatePlayfield() => new ManiaEditorPlayfield(Beatmap.Stages) { Anchor = Anchor.Centre, diff --git a/osu.Game.Rulesets.Taiko/Edit/DrawableTaikoEditorRuleset.cs b/osu.Game.Rulesets.Taiko/Edit/DrawableTaikoEditorRuleset.cs new file mode 100644 index 0000000000..963ddec0b3 --- /dev/null +++ b/osu.Game.Rulesets.Taiko/Edit/DrawableTaikoEditorRuleset.cs @@ -0,0 +1,37 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Collections.Generic; +using osu.Framework.Bindables; +using osu.Game.Beatmaps; +using osu.Game.Configuration; +using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.Taiko.UI; +using osu.Game.Rulesets.UI.Scrolling; + +namespace osu.Game.Rulesets.Taiko.Edit +{ + public partial class DrawableTaikoEditorRuleset : DrawableTaikoRuleset, ISupportConstantAlgorithmToggle + { + public BindableBool ShowSpeedChanges { get; set; } = new BindableBool(); + + public DrawableTaikoEditorRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList mods) + : base(ruleset, beatmap, mods) + { + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + ShowSpeedChanges.BindValueChanged(showChanges => VisualisationMethod = showChanges.NewValue ? ScrollVisualisationMethod.Overlapping : ScrollVisualisationMethod.Constant, true); + } + + protected override double ComputeTimeRange() + { + // Adjust when we're using constant algorithm to not be sluggish. + double multiplier = ShowSpeedChanges.Value ? 1 : 4; + return base.ComputeTimeRange() / multiplier; + } + } +} diff --git a/osu.Game.Rulesets.Taiko/Edit/TaikoHitObjectComposer.cs b/osu.Game.Rulesets.Taiko/Edit/TaikoHitObjectComposer.cs index fbad8c7fad..5ae4757b8f 100644 --- a/osu.Game.Rulesets.Taiko/Edit/TaikoHitObjectComposer.cs +++ b/osu.Game.Rulesets.Taiko/Edit/TaikoHitObjectComposer.cs @@ -2,9 +2,12 @@ // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; +using osu.Game.Beatmaps; using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Edit.Tools; +using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Taiko.Objects; +using osu.Game.Rulesets.UI; using osu.Game.Screens.Edit.Compose.Components; namespace osu.Game.Rulesets.Taiko.Edit @@ -25,6 +28,9 @@ namespace osu.Game.Rulesets.Taiko.Edit new SwellCompositionTool() }; + protected override DrawableRuleset CreateDrawableRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList mods) => + new DrawableTaikoEditorRuleset(ruleset, beatmap, mods); + protected override ComposeBlueprintContainer CreateBlueprintContainer() => new TaikoBlueprintContainer(this); } diff --git a/osu.Game.Rulesets.Taiko/UI/DrawableTaikoRuleset.cs b/osu.Game.Rulesets.Taiko/UI/DrawableTaikoRuleset.cs index 979e03f201..2af4c0c2e8 100644 --- a/osu.Game.Rulesets.Taiko/UI/DrawableTaikoRuleset.cs +++ b/osu.Game.Rulesets.Taiko/UI/DrawableTaikoRuleset.cs @@ -64,6 +64,11 @@ namespace osu.Game.Rulesets.Taiko.UI { base.Update(); + TimeRange.Value = ComputeTimeRange(); + } + + protected virtual double ComputeTimeRange() + { // Taiko scrolls at a constant 100px per 1000ms. More notes become visible as the playfield is lengthened. const float scroll_rate = 10; @@ -72,7 +77,7 @@ namespace osu.Game.Rulesets.Taiko.UI // We clamp the ratio to the maximum aspect ratio to keep scroll speed consistent on widths lower than the default. float ratio = Math.Max(DrawSize.X / 768f, TaikoPlayfieldAdjustmentContainer.MAXIMUM_ASPECT); - TimeRange.Value = (Playfield.HitObjectContainer.DrawWidth / ratio) * scroll_rate; + return (Playfield.HitObjectContainer.DrawWidth / ratio) * scroll_rate; } protected override void UpdateAfterChildren() From d7129da8ea708f5485e023a18012940b1d5d3dfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Wed, 20 Sep 2023 12:05:23 +0200 Subject: [PATCH 386/729] Fix `TestSceneDrawableStoryboardSprite` not displaying anything --- .../Visual/Gameplay/TestSceneDrawableStoryboardSprite.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneDrawableStoryboardSprite.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneDrawableStoryboardSprite.cs index d20c7c2f7a..32693c2bb2 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneDrawableStoryboardSprite.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneDrawableStoryboardSprite.cs @@ -180,7 +180,7 @@ namespace osu.Game.Tests.Visual.Gameplay layer.Elements.Clear(); layer.Add(sprite); - return storyboard.CreateDrawable(); + return storyboard.CreateDrawable().With(s => s.RelativeSizeAxes = Axes.Both); } private void assertStoryboardSourced() From f2791d4f3e1c3067d8a2b9fcbab013edcd5eeefb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Wed, 20 Sep 2023 12:22:05 +0200 Subject: [PATCH 387/729] Move comment a bit to fix formatting Would otherwise trigger IDE0055, but that isn't resolveable without an inspection cycle with resharper, so just move in a more sane place. --- osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs b/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs index d74e6194fb..dc3a4416a5 100644 --- a/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs +++ b/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs @@ -25,8 +25,8 @@ using osuTK; namespace osu.Game.Rulesets.Catch.Edit { + // we're also a ScrollingHitObjectComposer candidate, but can't be everything can we? public partial class CatchHitObjectComposer : DistancedHitObjectComposer - // we're also a ScrollingHitObjectComposer candidate, but can't be everything can we? { private const float distance_snap_radius = 50; From bf984388b364ba4a3a35139df08b09fa0aac93c5 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 14 Sep 2023 19:12:55 +0900 Subject: [PATCH 388/729] Update clocks in line with framework changes --- osu.Game/Beatmaps/FramedBeatmapClock.cs | 2 -- osu.Game/Rulesets/UI/FrameStabilityContainer.cs | 2 -- osu.Game/Screens/Edit/EditorClock.cs | 2 -- osu.Game/Screens/Play/GameplayClockContainer.cs | 2 -- 4 files changed, 8 deletions(-) diff --git a/osu.Game/Beatmaps/FramedBeatmapClock.cs b/osu.Game/Beatmaps/FramedBeatmapClock.cs index 9577d1e38b..62484fa12b 100644 --- a/osu.Game/Beatmaps/FramedBeatmapClock.cs +++ b/osu.Game/Beatmaps/FramedBeatmapClock.cs @@ -216,8 +216,6 @@ namespace osu.Game.Beatmaps public double FramesPerSecond => finalClockSource.FramesPerSecond; - public FrameTimeInfo TimeInfo => finalClockSource.TimeInfo; - #endregion protected override void Dispose(bool isDisposing) diff --git a/osu.Game/Rulesets/UI/FrameStabilityContainer.cs b/osu.Game/Rulesets/UI/FrameStabilityContainer.cs index 90cffab714..2af9916a6b 100644 --- a/osu.Game/Rulesets/UI/FrameStabilityContainer.cs +++ b/osu.Game/Rulesets/UI/FrameStabilityContainer.cs @@ -264,8 +264,6 @@ namespace osu.Game.Rulesets.UI public double FramesPerSecond => framedClock.FramesPerSecond; - public FrameTimeInfo TimeInfo => framedClock.TimeInfo; - public double StartTime => parentGameplayClock?.StartTime ?? 0; private readonly AudioAdjustments gameplayAdjustments = new AudioAdjustments(); diff --git a/osu.Game/Screens/Edit/EditorClock.cs b/osu.Game/Screens/Edit/EditorClock.cs index e5e88a04d9..a05a873101 100644 --- a/osu.Game/Screens/Edit/EditorClock.cs +++ b/osu.Game/Screens/Edit/EditorClock.cs @@ -231,8 +231,6 @@ namespace osu.Game.Screens.Edit public double FramesPerSecond => underlyingClock.FramesPerSecond; - public FrameTimeInfo TimeInfo => underlyingClock.TimeInfo; - public void ChangeSource(IClock source) { track.Value = source as Track; diff --git a/osu.Game/Screens/Play/GameplayClockContainer.cs b/osu.Game/Screens/Play/GameplayClockContainer.cs index 20bf6c3829..2478af1dd4 100644 --- a/osu.Game/Screens/Play/GameplayClockContainer.cs +++ b/osu.Game/Screens/Play/GameplayClockContainer.cs @@ -234,7 +234,5 @@ namespace osu.Game.Screens.Play public double ElapsedFrameTime => GameplayClock.ElapsedFrameTime; public double FramesPerSecond => GameplayClock.FramesPerSecond; - - public FrameTimeInfo TimeInfo => GameplayClock.TimeInfo; } } From 8a3d412ffc3374c4ad99cd4b26b00edf77e4cf35 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 21 Sep 2023 11:38:16 +0900 Subject: [PATCH 389/729] Remove mention of no-heated-gameplay-mechanics discussions We're kinda at the point we're allowing this now. --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 792e2d646a..ce9fe4d053 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,6 @@ The future of [osu!](https://osu.ppy.sh) and the beginning of an open era! Curre This project is under constant development, but we aim to keep things in a stable state. Users are encouraged to try it out and keep it installed alongside the stable *osu!* client. It will continue to evolve to the point of eventually replacing the existing stable client as an update. -**IMPORTANT:** Gameplay mechanics (and other features which you may have come to know and love) are in a constant state of flux. Game balance and final quality-of-life passes come at the end of development, preceded by experimentation and changes which may potentially **reduce playability or usability**. This is done in order to allow us to move forward as developers and designers more efficiently. If this offends you, please consider sticking to a [stable release](https://osu.ppy.sh/home/download) of osu!. We are not yet open to heated discussion over game mechanics and will not be using github as a forum for such discussions just yet. - We are accepting bug reports (please report with as much detail as possible and follow the existing issue templates). Feature requests are also welcome, but understand that our focus is on completing the game to feature parity before adding new features. A few resources are available as starting points to getting involved and understanding the project: - Detailed release changelogs are available on the [official osu! site](https://osu.ppy.sh/home/changelog/lazer). From 2954ad78349e126482c02687f98fcf00055314ff Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 21 Sep 2023 11:56:23 +0900 Subject: [PATCH 390/729] Update language across whole readme to read better --- README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ce9fe4d053..a9dac3d6cf 100644 --- a/README.md +++ b/README.md @@ -12,33 +12,35 @@ A free-to-win rhythm game. Rhythm is just a *click* away! -The future of [osu!](https://osu.ppy.sh) and the beginning of an open era! Currently known by and released under the release codename "*lazer*". As in sharper than cutting-edge. +This is the future – and final – iteration of the [osu!](https://osu.ppy.sh) game client and marks the beginning of an open era! Currently known by and released under the release codename "*lazer*". As in sharper than cutting-edge. ## Status -This project is under constant development, but we aim to keep things in a stable state. Users are encouraged to try it out and keep it installed alongside the stable *osu!* client. It will continue to evolve to the point of eventually replacing the existing stable client as an update. +This project is under constant development, but we do our best to keep things in a stable state. Players are encouraged to install from a release alongside their stable *osu!* client. This project will continue to evolve until we eventually reach the point where most users prefer it over the previous "osu!stable" release. -We are accepting bug reports (please report with as much detail as possible and follow the existing issue templates). Feature requests are also welcome, but understand that our focus is on completing the game to feature parity before adding new features. A few resources are available as starting points to getting involved and understanding the project: +A few resources are available as starting points to getting involved and understanding the project: - Detailed release changelogs are available on the [official osu! site](https://osu.ppy.sh/home/changelog/lazer). - You can learn more about our approach to [project management](https://github.com/ppy/osu/wiki/Project-management). ## Running osu! -If you are looking to install or test osu! without setting up a development environment, you can consume our [releases](https://github.com/ppy/osu/releases). You can also generally download a version for your current device from the [osu! site](https://osu.ppy.sh/home/download). Failing that, you may use the links below to download the latest version for your operating system of choice: +If you are just looking to give the game a whirl, you can grab the latest release for your platform: -**Latest release:** +### Latest release: | [Windows 8.1+ (x64)](https://github.com/ppy/osu/releases/latest/download/install.exe) | macOS 10.15+ ([Intel](https://github.com/ppy/osu/releases/latest/download/osu.app.Intel.zip), [Apple Silicon](https://github.com/ppy/osu/releases/latest/download/osu.app.Apple.Silicon.zip)) | [Linux (x64)](https://github.com/ppy/osu/releases/latest/download/osu.AppImage) | [iOS 13.4+](https://osu.ppy.sh/home/testflight) | [Android 5+](https://github.com/ppy/osu/releases/latest/download/sh.ppy.osulazer.apk) | | ------------- | ------------- | ------------- | ------------- | ------------- | -- The iOS testflight link may fill up (Apple has a hard limit of 10,000 users). We reset it occasionally when this happens. Please do not ask about this. Check back regularly for link resets or follow [peppy](https://twitter.com/ppy) on twitter for announcements of link resets. +You can also generally download a version for your current device from the [osu! site](https://osu.ppy.sh/home/download) If your platform is not listed above, there is still a chance you can manually build it by following the instructions below. +**For iOS/iPadOS users**: The iOS testflight link fills up very fast (Apple has a hard limit of 10,000 users). We reset it occasionally. Please do not ask about this. Check back regularly for link resets or follow [peppy](https://twitter.com/ppy) on twitter for announcements. Our goal is to get the game on mobile app stores in early 2024. + ## Developing a custom ruleset -osu! is designed to have extensible modular gameplay modes, called "rulesets". Building one of these allows a developer to harness the power of osu! for their own game style. To get started working on a ruleset, we have some templates available [here](https://github.com/ppy/osu/tree/master/Templates). +osu! is designed to allow user-created gameplay variations, called "rulesets". Building one of these allows a developer to harness the power of the osu! beatmap library, game engine, and general UX for a new style of gameplay. To get started working on a ruleset, we have some templates available [here](https://github.com/ppy/osu/tree/master/Templates). You can see some examples of custom rulesets by visiting the [custom ruleset directory](https://github.com/ppy/osu/discussions/13096). From c76853c32c6267110657ef7c31c81f58e47d7191 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 21 Sep 2023 11:56:32 +0900 Subject: [PATCH 391/729] Add mention of new project --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a9dac3d6cf..2cf3b4bf6b 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ A few resources are available as starting points to getting involved and underst - Detailed release changelogs are available on the [official osu! site](https://osu.ppy.sh/home/changelog/lazer). - You can learn more about our approach to [project management](https://github.com/ppy/osu/wiki/Project-management). +- Track our current efforts [towards full "ranked play" support](https://github.com/orgs/ppy/projects/13?query=is%3Aopen+sort%3Aupdated-desc) ## Running osu! From fc6abae968011aecada1d7f81484b78f2a2b0d64 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 21 Sep 2023 11:56:49 +0900 Subject: [PATCH 392/729] Remove note about `dotnet` CLI tools not working (less relevant post-EF) --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 2cf3b4bf6b..3966a9258a 100644 --- a/README.md +++ b/README.md @@ -84,8 +84,6 @@ If you are not interested in debugging *osu!*, you can add `-c Release` to gain If the build fails, try to restore NuGet packages with `dotnet restore`. -_Due to a historical feature gap between .NET Core and Xamarin, running `dotnet` CLI from the root directory will not work for most commands. This can be resolved by specifying a target `.csproj` or the helper project at `build/Desktop.proj`. Configurations have been provided to work around this issue for all supported IDEs mentioned above._ - ### Testing with resource/framework modifications Sometimes it may be necessary to cross-test changes in [osu-resources](https://github.com/ppy/osu-resources) or [osu-framework](https://github.com/ppy/osu-framework). This can be quickly achieved using included commands: From 9629f49afbd26dcf65674b6cf0a2672e67018920 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 21 Sep 2023 11:57:10 +0900 Subject: [PATCH 393/729] Update build instructions to be more clear about `slnf` files and mention `workload`s --- README.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3966a9258a..6009ff4d59 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,8 @@ You can see some examples of custom rulesets by visiting the [custom ruleset dir ## Developing osu! +### Prerequisites + Please make sure you have the following prerequisites: - A desktop platform with the [.NET 6.0 SDK](https://dotnet.microsoft.com/download) installed. @@ -70,9 +72,19 @@ git pull ### Building -Build configurations for the recommended IDEs (listed above) are included. You should use the provided Build/Run functionality of your IDE to get things going. When testing or building new components, it's highly encouraged you use the `VisualTests` project/configuration. More information on this is provided [below](#contributing). +#### From an IDE -- Visual Studio / Rider users should load the project via one of the platform-specific `.slnf` files, rather than the main `.sln`. This will allow access to template run configurations. +You should load the solution via one of the platform-specific `.slnf` files, rather than the main `.sln`. This will reduce dependencies and hide platforms that you don't care about. Valid `.slnf` files are: + +- `osu.Desktop.slnf` (most common) +- `osu.Android.slnf` +- `osu.iOS.slnf` + +Run configurations for the recommended IDEs (listed above) are included. You should use the provided Build/Run functionality of your IDE to get things going. When testing or building new components, it's highly encouraged you use the `VisualTests` project/configuration. More information on this is provided [below](#contributing). + +To build for mobile platforms, you will likely need to run `sudo dotnet workload restore` if you haven't done so previously. This will install android/iOS tooling required to complete the build. + +#### From CLI You can also build and run *osu!* from the command-line with a single command: From 262916787ecfde13d2499aa733611a845fa13e13 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 21 Sep 2023 13:27:00 +0900 Subject: [PATCH 394/729] Apply punctuation and terminology fixes Co-authored-by: Joseph Madamba --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6009ff4d59..946a6b03d9 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ A few resources are available as starting points to getting involved and underst - Detailed release changelogs are available on the [official osu! site](https://osu.ppy.sh/home/changelog/lazer). - You can learn more about our approach to [project management](https://github.com/ppy/osu/wiki/Project-management). -- Track our current efforts [towards full "ranked play" support](https://github.com/orgs/ppy/projects/13?query=is%3Aopen+sort%3Aupdated-desc) +- Track our current efforts [towards full "ranked play" support](https://github.com/orgs/ppy/projects/13?query=is%3Aopen+sort%3Aupdated-desc). ## Running osu! @@ -33,7 +33,7 @@ If you are just looking to give the game a whirl, you can grab the latest releas | [Windows 8.1+ (x64)](https://github.com/ppy/osu/releases/latest/download/install.exe) | macOS 10.15+ ([Intel](https://github.com/ppy/osu/releases/latest/download/osu.app.Intel.zip), [Apple Silicon](https://github.com/ppy/osu/releases/latest/download/osu.app.Apple.Silicon.zip)) | [Linux (x64)](https://github.com/ppy/osu/releases/latest/download/osu.AppImage) | [iOS 13.4+](https://osu.ppy.sh/home/testflight) | [Android 5+](https://github.com/ppy/osu/releases/latest/download/sh.ppy.osulazer.apk) | | ------------- | ------------- | ------------- | ------------- | ------------- | -You can also generally download a version for your current device from the [osu! site](https://osu.ppy.sh/home/download) +You can also generally download a version for your current device from the [osu! site](https://osu.ppy.sh/home/download). If your platform is not listed above, there is still a chance you can manually build it by following the instructions below. @@ -80,9 +80,9 @@ You should load the solution via one of the platform-specific `.slnf` files, rat - `osu.Android.slnf` - `osu.iOS.slnf` -Run configurations for the recommended IDEs (listed above) are included. You should use the provided Build/Run functionality of your IDE to get things going. When testing or building new components, it's highly encouraged you use the `VisualTests` project/configuration. More information on this is provided [below](#contributing). +Run configurations for the recommended IDEs (listed above) are included. You should use the provided Build/Run functionality of your IDE to get things going. When testing or building new components, it's highly encouraged you use the `osu! (Tests)` project/configuration. More information on this is provided [below](#contributing). -To build for mobile platforms, you will likely need to run `sudo dotnet workload restore` if you haven't done so previously. This will install android/iOS tooling required to complete the build. +To build for mobile platforms, you will likely need to run `sudo dotnet workload restore` if you haven't done so previously. This will install Android/iOS tooling required to complete the build. #### From CLI From 0eab4c5364d23e3bb996894ae3fd58b4842f0914 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 21 Sep 2023 14:47:55 +0900 Subject: [PATCH 395/729] Reword sentence with multiple `and`s MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bartłomiej Dach --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 946a6b03d9..f7a4936e50 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ A free-to-win rhythm game. Rhythm is just a *click* away! -This is the future – and final – iteration of the [osu!](https://osu.ppy.sh) game client and marks the beginning of an open era! Currently known by and released under the release codename "*lazer*". As in sharper than cutting-edge. +This is the future – and final – iteration of the [osu!](https://osu.ppy.sh) game client which marks the beginning of an open era! Currently known by and released under the release codename "*lazer*". As in sharper than cutting-edge. ## Status From 8ef0ef09db1381df7fc0bf0f65701d4ca2ca8a1c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 21 Sep 2023 14:59:37 +0900 Subject: [PATCH 396/729] Reword release build disclaimer --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f7a4936e50..d5dc0723af 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ You can also build and run *osu!* from the command-line with a single command: dotnet run --project osu.Desktop ``` -If you are not interested in debugging *osu!*, you can add `-c Release` to gain performance. In this case, you must replace `Debug` with `Release` in any commands mentioned in this document. +When running locally to do any kind of performance testing, make sure to add `-c Release` to the build command, as the overhead of running with the default `Debug` configuration can be large (especially when testing with local framework modifications as below). If the build fails, try to restore NuGet packages with `dotnet restore`. From c4fc4199d190b6bff29d10c65341b9c7a011fca9 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Thu, 21 Sep 2023 19:02:31 +0300 Subject: [PATCH 397/729] Use correct maximum size for droplets --- osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyDropletPiece.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyDropletPiece.cs b/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyDropletPiece.cs index 581259a9c4..c6c0839fba 100644 --- a/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyDropletPiece.cs +++ b/osu.Game.Rulesets.Catch/Skinning/Legacy/LegacyDropletPiece.cs @@ -9,7 +9,7 @@ namespace osu.Game.Rulesets.Catch.Skinning.Legacy { public partial class LegacyDropletPiece : LegacyCatchHitObjectPiece { - private static readonly Vector2 droplet_max_size = new Vector2(100); + private static readonly Vector2 droplet_max_size = new Vector2(82, 103); public LegacyDropletPiece() { From ad86bf2d56cb85e5bd4b84e74a92d1ed63aaf578 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Thu, 21 Sep 2023 19:03:08 +0300 Subject: [PATCH 398/729] Revert redundant size limitations Already handled by the sprites themselves being resized. --- osu.Game.Rulesets.Taiko/Skinning/Legacy/LegacyDrumRoll.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Taiko/Skinning/Legacy/LegacyDrumRoll.cs b/osu.Game.Rulesets.Taiko/Skinning/Legacy/LegacyDrumRoll.cs index 83f05fe6ec..5543a31ec9 100644 --- a/osu.Game.Rulesets.Taiko/Skinning/Legacy/LegacyDrumRoll.cs +++ b/osu.Game.Rulesets.Taiko/Skinning/Legacy/LegacyDrumRoll.cs @@ -9,7 +9,6 @@ using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Textures; using osu.Game.Graphics; using osu.Game.Skinning; -using osuTK; using osuTK.Graphics; namespace osu.Game.Rulesets.Taiko.Skinning.Legacy @@ -48,13 +47,13 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy Anchor = Anchor.CentreRight, Origin = Anchor.CentreLeft, RelativeSizeAxes = Axes.Both, - Texture = skin.GetTexture("taiko-roll-end", WrapMode.ClampToEdge, WrapMode.ClampToEdge)?.WithMaximumSize(new Vector2(128, 256)), + Texture = skin.GetTexture("taiko-roll-end", WrapMode.ClampToEdge, WrapMode.ClampToEdge), FillMode = FillMode.Fit, }, body = new Sprite { RelativeSizeAxes = Axes.Both, - Texture = skin.GetTexture("taiko-roll-middle", WrapMode.ClampToEdge, WrapMode.ClampToEdge)?.WithMaximumSize(new Vector2(2, 256)), + Texture = skin.GetTexture("taiko-roll-middle", WrapMode.ClampToEdge, WrapMode.ClampToEdge), }, headCircle = new LegacyCirclePiece { From 9af4e75dfc5dd5cdfd5e70c227d1a48e2747205c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 22 Sep 2023 01:24:24 +0900 Subject: [PATCH 399/729] Disable clipboard export for song select textbox In combination with https://github.com/ppy/osu-framework/pull/5997, closes https://github.com/ppy/osu/issues/24867 --- osu.Game/Screens/Select/FilterControl.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/Screens/Select/FilterControl.cs b/osu.Game/Screens/Select/FilterControl.cs index 38520a85b7..614c9bd7ec 100644 --- a/osu.Game/Screens/Select/FilterControl.cs +++ b/osu.Game/Screens/Select/FilterControl.cs @@ -254,6 +254,8 @@ namespace osu.Game.Screens.Select public OsuSpriteText FilterText { get; private set; } + protected override bool AllowClipboardExport => false; + public FilterControlTextBox() { Height += filter_text_size; From f1258a396367d4ccec91977c34f40ca13cb4dd6a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 22 Sep 2023 01:26:38 +0900 Subject: [PATCH 400/729] Update framework --- osu.Android.props | 2 +- osu.Game/osu.Game.csproj | 2 +- osu.iOS.props | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Android.props b/osu.Android.props index 10cee77b09..20b0f220a3 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -10,7 +10,7 @@ true - + System.Net.Sockets.SocketException (11001): No such host is known. 2023-10-06 03:24:17 [verbose]: at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken) ``` Closes https://github.com/ppy/osu/issues/24890 (again). --- osu.Game/Online/API/OAuth.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/osu.Game/Online/API/OAuth.cs b/osu.Game/Online/API/OAuth.cs index 1f26ab5458..485274f349 100644 --- a/osu.Game/Online/API/OAuth.cs +++ b/osu.Game/Online/API/OAuth.cs @@ -6,6 +6,7 @@ using System; using System.Diagnostics; using System.Net.Http; +using System.Net.Sockets; using Newtonsoft.Json; using osu.Framework.Bindables; @@ -99,6 +100,11 @@ namespace osu.Game.Online.API return true; } } + catch (SocketException) + { + // Network failure. + return false; + } catch (HttpRequestException) { // Network failure. @@ -106,7 +112,7 @@ namespace osu.Game.Online.API } catch { - // Force a full re-reauthentication. + // Force a full re-authentication. Token.Value = null; return false; } From db5178e45306ce9df560b047a563b3e075a75ff6 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 6 Oct 2023 16:52:00 +0900 Subject: [PATCH 560/729] Change `ArgonHealthDisplay` to be relative sized for now --- .../Gameplay/TestSceneArgonHealthDisplay.cs | 2 - .../Screens/Play/HUD/ArgonHealthDisplay.cs | 68 ++++++++++++++----- 2 files changed, 50 insertions(+), 20 deletions(-) diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneArgonHealthDisplay.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneArgonHealthDisplay.cs index 06a7763711..8261a1729e 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneArgonHealthDisplay.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneArgonHealthDisplay.cs @@ -12,7 +12,6 @@ using osu.Game.Rulesets.Osu.Judgements; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Scoring; using osu.Game.Screens.Play.HUD; -using osuTK; using osuTK.Graphics; namespace osu.Game.Tests.Visual.Gameplay @@ -41,7 +40,6 @@ namespace osu.Game.Tests.Visual.Gameplay { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Scale = new Vector2(2f), }, }; }); diff --git a/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs b/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs index 62a4b958c2..ad4b407692 100644 --- a/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs +++ b/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs @@ -5,14 +5,17 @@ using System; using System.Collections.Generic; using System.Linq; using osu.Framework.Allocation; +using osu.Framework.Bindables; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Lines; using osu.Framework.Graphics.Shapes; +using osu.Framework.Layout; using osu.Framework.Threading; using osu.Framework.Utils; +using osu.Game.Configuration; using osu.Game.Graphics; using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Objects; @@ -27,6 +30,23 @@ namespace osu.Game.Screens.Play.HUD { public bool UsesFixedAnchor { get; set; } + [SettingSource("Bar height")] + public BindableFloat BarHeight { get; } = new BindableFloat + { + Default = 32, + MinValue = 0, + MaxValue = 64, + Precision = 1 + }; + + [SettingSource("Bar length")] + public BindableFloat BarLength { get; } = new BindableFloat(1) + { + MinValue = 0.2f, + MaxValue = 1, + Precision = 0.01f, + }; + private BarPath mainBar = null!; /// @@ -76,10 +96,13 @@ namespace osu.Game.Screens.Play.HUD } } + private const float left_line_width = 50f; + [BackgroundDependencyLoader] private void load() { - AutoSizeAxes = Axes.Both; + RelativeSizeAxes = Axes.X; + AutoSizeAxes = Axes.Y; InternalChild = new FillFlowContainer { @@ -91,7 +114,7 @@ namespace osu.Game.Screens.Play.HUD new Circle { Margin = new MarginPadding { Top = 8.5f, Left = -2 }, - Size = new Vector2(50f, 3f), + Size = new Vector2(left_line_width, 3f), }, new Container { @@ -127,8 +150,6 @@ namespace osu.Game.Screens.Play.HUD } }, }; - - updatePath(); } protected override void LoadComplete() @@ -144,6 +165,18 @@ namespace osu.Game.Screens.Play.HUD if (resetMissBarDelegate == null) this.TransformTo(nameof(GlowBarValue), v.NewValue, 300, Easing.OutQuint); }, true); + + BarLength.BindValueChanged(l => Width = l.NewValue, true); + BarHeight.BindValueChanged(_ => updatePath()); + updatePath(); + } + + protected override bool OnInvalidate(Invalidation invalidation, InvalidationSource source) + { + if ((invalidation & Invalidation.DrawSize) > 0) + updatePath(); + + return base.OnInvalidate(invalidation, source); } protected override void Update() @@ -214,25 +247,24 @@ namespace osu.Game.Screens.Play.HUD private void updatePath() { - const float curve_start = 280; - const float curve_end = 310; + float barLength = DrawWidth - left_line_width - 24; + float curveStart = barLength - 70; + float curveEnd = barLength - 40; + const float curve_smoothness = 10; - const float bar_length = 350; - const float bar_verticality = 32.5f; - - Vector2 diagonalDir = (new Vector2(curve_end, bar_verticality) - new Vector2(curve_start, 0)).Normalized(); + Vector2 diagonalDir = (new Vector2(curveEnd, BarHeight.Value) - new Vector2(curveStart, 0)).Normalized(); barPath = new SliderPath(new[] { new PathControlPoint(new Vector2(0, 0), PathType.Linear), - new PathControlPoint(new Vector2(curve_start - curve_smoothness, 0), PathType.Bezier), - new PathControlPoint(new Vector2(curve_start, 0)), - new PathControlPoint(new Vector2(curve_start, 0) + diagonalDir * curve_smoothness, PathType.Linear), - new PathControlPoint(new Vector2(curve_end, bar_verticality) - diagonalDir * curve_smoothness, PathType.Bezier), - new PathControlPoint(new Vector2(curve_end, bar_verticality)), - new PathControlPoint(new Vector2(curve_end + curve_smoothness, bar_verticality), PathType.Linear), - new PathControlPoint(new Vector2(bar_length, bar_verticality)), + new PathControlPoint(new Vector2(curveStart - curve_smoothness, 0), PathType.Bezier), + new PathControlPoint(new Vector2(curveStart, 0)), + new PathControlPoint(new Vector2(curveStart, 0) + diagonalDir * curve_smoothness, PathType.Linear), + new PathControlPoint(new Vector2(curveEnd, BarHeight.Value) - diagonalDir * curve_smoothness, PathType.Bezier), + new PathControlPoint(new Vector2(curveEnd, BarHeight.Value)), + new PathControlPoint(new Vector2(curveEnd + curve_smoothness, BarHeight.Value), PathType.Linear), + new PathControlPoint(new Vector2(barLength, BarHeight.Value)), }); List vertices = new List(); @@ -267,7 +299,7 @@ namespace osu.Game.Screens.Play.HUD { protected override Color4 ColourAt(float position) { - if (position <= 0.128f) + if (position <= 0.16f) return Color4.White.Opacity(0.8f); return Interpolation.ValueAt(position, From f40e910c51da3f4ad5779b854941ffb5b8e53a23 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 6 Oct 2023 18:56:31 +0900 Subject: [PATCH 561/729] Remove left line from health display --- .../Screens/Play/HUD/ArgonHealthDisplay.cs | 67 +++++++------------ 1 file changed, 26 insertions(+), 41 deletions(-) diff --git a/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs b/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs index ad4b407692..67f21a1c83 100644 --- a/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs +++ b/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs @@ -11,7 +11,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Lines; -using osu.Framework.Graphics.Shapes; using osu.Framework.Layout; using osu.Framework.Threading; using osu.Framework.Utils; @@ -96,7 +95,7 @@ namespace osu.Game.Screens.Play.HUD } } - private const float left_line_width = 50f; + private const float main_path_radius = 10f; [BackgroundDependencyLoader] private void load() @@ -104,51 +103,37 @@ namespace osu.Game.Screens.Play.HUD RelativeSizeAxes = Axes.X; AutoSizeAxes = Axes.Y; - InternalChild = new FillFlowContainer + InternalChild = new Container { AutoSizeAxes = Axes.Both, - Direction = FillDirection.Horizontal, - Spacing = new Vector2(4f, 0f), Children = new Drawable[] { - new Circle + background = new BackgroundPath { - Margin = new MarginPadding { Top = 8.5f, Left = -2 }, - Size = new Vector2(left_line_width, 3f), + PathRadius = main_path_radius, }, - new Container + glowBar = new BarPath { - AutoSizeAxes = Axes.Both, - Children = new Drawable[] - { - background = new BackgroundPath - { - PathRadius = 10f, - }, - glowBar = new BarPath - { - BarColour = Color4.White, - GlowColour = OsuColour.Gray(0.5f), - Blending = BlendingParameters.Additive, - Colour = ColourInfo.GradientHorizontal(Color4.White.Opacity(0.8f), Color4.White), - PathRadius = 40f, - // Kinda hacky, but results in correct positioning with increased path radius. - Margin = new MarginPadding(-30f), - GlowPortion = 0.9f, - }, - mainBar = new BarPath - { - AutoSizeAxes = Axes.None, - RelativeSizeAxes = Axes.Both, - Blending = BlendingParameters.Additive, - BarColour = main_bar_colour, - GlowColour = main_bar_glow_colour, - PathRadius = 10f, - GlowPortion = 0.6f, - }, - } - } - }, + BarColour = Color4.White, + GlowColour = OsuColour.Gray(0.5f), + Blending = BlendingParameters.Additive, + Colour = ColourInfo.GradientHorizontal(Color4.White.Opacity(0.8f), Color4.White), + PathRadius = 40f, + // Kinda hacky, but results in correct positioning with increased path radius. + Margin = new MarginPadding(-30f), + GlowPortion = 0.9f, + }, + mainBar = new BarPath + { + AutoSizeAxes = Axes.None, + RelativeSizeAxes = Axes.Both, + Blending = BlendingParameters.Additive, + BarColour = main_bar_colour, + GlowColour = main_bar_glow_colour, + PathRadius = main_path_radius, + GlowPortion = 0.6f, + }, + } }; } @@ -247,7 +232,7 @@ namespace osu.Game.Screens.Play.HUD private void updatePath() { - float barLength = DrawWidth - left_line_width - 24; + float barLength = DrawWidth - main_path_radius * 2; float curveStart = barLength - 70; float curveEnd = barLength - 40; From 71be3c8f8b783716d4bcb619d36e253b1ad79315 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 6 Oct 2023 18:56:16 +0900 Subject: [PATCH 562/729] Add ability to adjust health bar settings in test scene --- .../Gameplay/TestSceneArgonHealthDisplay.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneArgonHealthDisplay.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneArgonHealthDisplay.cs index 8261a1729e..7bad623d7f 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneArgonHealthDisplay.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneArgonHealthDisplay.cs @@ -3,6 +3,7 @@ using NUnit.Framework; using osu.Framework.Allocation; +using osu.Framework.Extensions.ObjectExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Shapes; using osu.Framework.Testing; @@ -21,6 +22,8 @@ namespace osu.Game.Tests.Visual.Gameplay [Cached(typeof(HealthProcessor))] private HealthProcessor healthProcessor = new DrainingHealthProcessor(0); + private ArgonHealthDisplay healthDisplay = null!; + [SetUpSteps] public void SetUpSteps() { @@ -36,13 +39,25 @@ namespace osu.Game.Tests.Visual.Gameplay RelativeSizeAxes = Axes.Both, Colour = Color4.Gray, }, - new ArgonHealthDisplay + healthDisplay = new ArgonHealthDisplay { Anchor = Anchor.Centre, Origin = Anchor.Centre, }, }; }); + + AddSliderStep("Width", 0, 1f, 1f, val => + { + if (healthDisplay.IsNotNull()) + healthDisplay.BarLength.Value = val; + }); + + AddSliderStep("Height", 0, 64, 0, val => + { + if (healthDisplay.IsNotNull()) + healthDisplay.BarHeight.Value = val; + }); } [Test] From 3f2a00d90d2a967147e33e273dab24779fb03747 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 6 Oct 2023 18:46:50 +0900 Subject: [PATCH 563/729] Add argon health display to default skin layout --- osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs | 5 ++--- osu.Game/Skinning/ArgonSkin.cs | 10 +++++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs b/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs index 67f21a1c83..755eaeaf33 100644 --- a/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs +++ b/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs @@ -30,16 +30,15 @@ namespace osu.Game.Screens.Play.HUD public bool UsesFixedAnchor { get; set; } [SettingSource("Bar height")] - public BindableFloat BarHeight { get; } = new BindableFloat + public BindableFloat BarHeight { get; } = new BindableFloat(20) { - Default = 32, MinValue = 0, MaxValue = 64, Precision = 1 }; [SettingSource("Bar length")] - public BindableFloat BarLength { get; } = new BindableFloat(1) + public BindableFloat BarLength { get; } = new BindableFloat(0.98f) { MinValue = 0.2f, MaxValue = 1, diff --git a/osu.Game/Skinning/ArgonSkin.cs b/osu.Game/Skinning/ArgonSkin.cs index 6e17458082..d530efbfdd 100644 --- a/osu.Game/Skinning/ArgonSkin.cs +++ b/osu.Game/Skinning/ArgonSkin.cs @@ -109,6 +109,7 @@ namespace osu.Game.Skinning case SkinComponentsContainerLookup.TargetArea.MainHUDComponents: var skinnableTargetWrapper = new DefaultSkinComponentsContainer(container => { + var health = container.OfType().FirstOrDefault(); var score = container.OfType().FirstOrDefault(); var accuracy = container.OfType().FirstOrDefault(); var combo = container.OfType().FirstOrDefault(); @@ -128,6 +129,13 @@ namespace osu.Game.Skinning score.Position = new Vector2(0, vertical_offset); + if (health != null) + { + health.Origin = Anchor.TopCentre; + health.Anchor = Anchor.TopCentre; + health.Y = 5; + } + if (ppCounter != null) { ppCounter.Y = score.Position.Y + ppCounter.ScreenSpaceDeltaToParentSpace(score.ScreenSpaceDrawQuad.Size).Y - 4; @@ -191,7 +199,7 @@ namespace osu.Game.Skinning new DefaultComboCounter(), new DefaultScoreCounter(), new DefaultAccuracyCounter(), - new DefaultHealthDisplay(), + new ArgonHealthDisplay(), new ArgonSongProgress(), new ArgonKeyCounterDisplay(), new BarHitErrorMeter(), From d87ab9c82dad1081c6a060ea8b6e401bbd29cdee Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 6 Oct 2023 19:34:38 +0900 Subject: [PATCH 564/729] Adjust transition time based on miss/hit --- osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs b/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs index 755eaeaf33..7af7fd9487 100644 --- a/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs +++ b/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs @@ -145,9 +145,11 @@ namespace osu.Game.Screens.Play.HUD if (v.NewValue >= GlowBarValue) finishMissDisplay(); - this.TransformTo(nameof(HealthBarValue), v.NewValue, 300, Easing.OutQuint); + double time = v.NewValue > GlowBarValue ? 500 : 250; + + this.TransformTo(nameof(HealthBarValue), v.NewValue, time, Easing.OutQuint); if (resetMissBarDelegate == null) - this.TransformTo(nameof(GlowBarValue), v.NewValue, 300, Easing.OutQuint); + this.TransformTo(nameof(GlowBarValue), v.NewValue, time, Easing.OutQuint); }, true); BarLength.BindValueChanged(l => Width = l.NewValue, true); From 8e5b2e78e58842721478fbf5dd7fdd7c7a1f66ad Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 6 Oct 2023 21:01:23 +0900 Subject: [PATCH 565/729] Fix variable clash --- osu.Game/Screens/OnlinePlay/FooterButtonFreeMods.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/OnlinePlay/FooterButtonFreeMods.cs b/osu.Game/Screens/OnlinePlay/FooterButtonFreeMods.cs index 54cd36d05b..dd6536cf26 100644 --- a/osu.Game/Screens/OnlinePlay/FooterButtonFreeMods.cs +++ b/osu.Game/Screens/OnlinePlay/FooterButtonFreeMods.cs @@ -117,17 +117,17 @@ namespace osu.Game.Screens.OnlinePlay private void updateModDisplay() { - int current = Current.Value.Count; + int currentCount = Current.Value.Count; - if (current == allAvailableAndValidMods.Count()) + if (currentCount == allAvailableAndValidMods.Count()) { count.Text = "all"; count.FadeColour(colours.Gray2, 200, Easing.OutQuint); circle.FadeColour(colours.Yellow, 200, Easing.OutQuint); } - else if (current > 0) + else if (currentCount > 0) { - count.Text = $"{current} mods"; + count.Text = $"{currentCount} mods"; count.FadeColour(colours.Gray2, 200, Easing.OutQuint); circle.FadeColour(colours.YellowDark, 200, Easing.OutQuint); } From 10ce5705ce67acb920f2f4f0d6b30e91178df5d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Fri, 6 Oct 2023 14:11:41 +0200 Subject: [PATCH 566/729] Update framework --- osu.Android.props | 2 +- osu.Game/osu.Game.csproj | 2 +- osu.iOS.props | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Android.props b/osu.Android.props index bc95e96a7b..b3feccbbc0 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -10,7 +10,7 @@ true - +