From 7b051b1aeb03e2b99aff028f45ed47c1bfd5c10f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 14:44:43 +0000 Subject: [PATCH 01/94] Bump NUnit from 3.13.3 to 4.0.1 Bumps [NUnit](https://github.com/nunit/nunit) from 3.13.3 to 4.0.1. - [Release notes](https://github.com/nunit/nunit/releases) - [Changelog](https://github.com/nunit/nunit/blob/master/CHANGES.md) - [Commits](https://github.com/nunit/nunit/compare/v3.13.3...v4.0.1) --- updated-dependencies: - dependency-name: NUnit dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .../osu.Game.Rulesets.Sentakki.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj index d826c593e..065a31c07 100644 --- a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj +++ b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj @@ -12,7 +12,7 @@ - + From f8080d0879e7398af20d679bd0992a16875b899b Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Mon, 22 Jan 2024 11:19:41 +0100 Subject: [PATCH 02/94] Revert "Bump NUnit from 3.13.3 to 4.0.1" --- .../osu.Game.Rulesets.Sentakki.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj index 065a31c07..d826c593e 100644 --- a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj +++ b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj @@ -12,7 +12,7 @@ - + From cc749fa568eb2502306695dc41969eca5f1743a0 Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Mon, 22 Jan 2024 11:29:15 +0100 Subject: [PATCH 03/94] Downgrade test stuff --- .../osu.Game.Rulesets.Sentakki.Tests.csproj | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj index d826c593e..80dbdfa06 100644 --- a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj +++ b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj @@ -10,10 +10,9 @@ osu.Game.Rulesets.Sentakki.Tests - - + - + From 23fca178eec0fd959a76647ce5f71d2909181f63 Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Mon, 22 Jan 2024 11:37:19 +0100 Subject: [PATCH 04/94] Manually bump everything Dependabot is freaking the fuck out, resolve manually --- .../osu.Game.Rulesets.Sentakki.Tests.csproj | 6 +++--- .../osu.Game.Rulesets.Sentakki.csproj | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj index 80dbdfa06..15204b8d6 100644 --- a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj +++ b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj @@ -10,9 +10,9 @@ osu.Game.Rulesets.Sentakki.Tests - - - + + + diff --git a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj index 8cfa71f67..3572b6bfd 100644 --- a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj +++ b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj @@ -9,7 +9,7 @@ osu.Game.Rulesets.Sentakki - + From 1784e931d3b91ae28f692c6bee1d223317f5df00 Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Mon, 22 Jan 2024 11:54:07 +0100 Subject: [PATCH 05/94] Increase the size of a checkpoint node --- .../Objects/Drawables/DrawableSlideCheckpointNode.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpointNode.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpointNode.cs index b5aea6596..0d6d83fee 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpointNode.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpointNode.cs @@ -34,9 +34,9 @@ public DrawableSlideCheckpointNode(SlideCheckpoint.CheckpointNode? node) Anchor = Anchor.Centre; Origin = Anchor.Centre; RelativeSizeAxes = Axes.None; - Size = new Vector2(150); + Size = new Vector2(200); CornerExponent = 2f; - CornerRadius = 75; + CornerRadius = 100; } protected override void OnApply() From 5ef67250b56294ba229492d634c86cf2df1ed2aa Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Fri, 26 Jan 2024 09:11:26 +0100 Subject: [PATCH 06/94] Use Samples instead of NodeSamples in Slides NodeSamples no longer has a purpose now that SlideBodies don't play samples anymore --- .../Beatmaps/Converter/SentakkiBeatmapConverter.Slider.cs | 2 +- .../Beatmaps/SentakkiBeatmapConverterOld.cs | 2 +- osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlide.cs | 4 ++++ osu.Game.Rulesets.Sentakki/Objects/Slide.cs | 4 +--- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki/Beatmaps/Converter/SentakkiBeatmapConverter.Slider.cs b/osu.Game.Rulesets.Sentakki/Beatmaps/Converter/SentakkiBeatmapConverter.Slider.cs index ed27c5e88..ea945faff 100644 --- a/osu.Game.Rulesets.Sentakki/Beatmaps/Converter/SentakkiBeatmapConverter.Slider.cs +++ b/osu.Game.Rulesets.Sentakki/Beatmaps/Converter/SentakkiBeatmapConverter.Slider.cs @@ -73,7 +73,7 @@ private SentakkiHitObject convertSlider(HitObject original) }, Lane = lane.NormalizePath(), StartTime = original.StartTime, - NodeSamples = nodeSamples, + Samples = nodeSamples.FirstOrDefault(), Break = headBreak }; diff --git a/osu.Game.Rulesets.Sentakki/Beatmaps/SentakkiBeatmapConverterOld.cs b/osu.Game.Rulesets.Sentakki/Beatmaps/SentakkiBeatmapConverterOld.cs index 22427c89b..7cec144cc 100644 --- a/osu.Game.Rulesets.Sentakki/Beatmaps/SentakkiBeatmapConverterOld.cs +++ b/osu.Game.Rulesets.Sentakki/Beatmaps/SentakkiBeatmapConverterOld.cs @@ -310,7 +310,7 @@ private SentakkiHitObject createTouchNote(HitObject original) }, Lane = noteLane, StartTime = original.StartTime, - NodeSamples = samples, + Samples = samples.FirstOrDefault(), Break = hasBreakHead }; } diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlide.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlide.cs index 32dffa16d..a0fadbafb 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlide.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlide.cs @@ -44,6 +44,10 @@ private void load() } }); } + protected override void LoadSamples() + { + // The slide parent object doesn't need a sample + } protected override void CheckForResult(bool userTriggered, double timeOffset) { diff --git a/osu.Game.Rulesets.Sentakki/Objects/Slide.cs b/osu.Game.Rulesets.Sentakki/Objects/Slide.cs index c8479a232..00ad08906 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Slide.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Slide.cs @@ -27,8 +27,6 @@ public double Duration set => throw new NotSupportedException(); } - public IList> NodeSamples = new List>(); - public double EndTime => StartTime + Duration; public override Color4 DefaultNoteColour => Color4.Aqua; @@ -45,7 +43,7 @@ protected override void CreateNestedHitObjects(CancellationToken cancellationTok { LaneBindable = { BindTarget = LaneBindable }, StartTime = StartTime, - Samples = NodeSamples.Any() ? NodeSamples.First() : new List(), + Samples = Samples, Break = Break, Ex = Ex }); From 6fc22f60a360845d8a1395683c0b7a950f2f61cd Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Fri, 26 Jan 2024 12:02:52 +0100 Subject: [PATCH 07/94] Proxy all slidebody stars above slide body --- .../Objects/Drawables/DrawableSlideBody.cs | 9 ++++++--- osu.Game.Rulesets.Sentakki/UI/LanedPlayfield.cs | 5 ++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideBody.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideBody.cs index e96b81374..daa1005d2 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideBody.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideBody.cs @@ -18,8 +18,6 @@ namespace osu.Game.Rulesets.Sentakki.Objects.Drawables { public partial class DrawableSlideBody : DrawableSentakkiLanedHitObject { - public override bool RemoveWhenNotAlive => false; - private new DrawableSlide ParentHitObject => (DrawableSlide)base.ParentHitObject; public new SlideBody HitObject => (SlideBody)base.HitObject; @@ -78,7 +76,7 @@ private void load() AddRangeInternal(new Drawable[] { Slidepath = new SlideVisual() { Colour = inactive_color }, - SlideStars = new Container + SlideStars = new ProxyableContainer { Anchor = Anchor.Centre, Origin = Anchor.Centre, @@ -288,5 +286,10 @@ protected override void ClearNestedHitObjects() base.ClearNestedHitObjects(); SlideCheckpoints.Clear(false); } + + private partial class ProxyableContainer : Container where T : Drawable + { + public override bool RemoveWhenNotAlive => false; + } } } diff --git a/osu.Game.Rulesets.Sentakki/UI/LanedPlayfield.cs b/osu.Game.Rulesets.Sentakki/UI/LanedPlayfield.cs index 3d5c1c4bb..04e4b3647 100644 --- a/osu.Game.Rulesets.Sentakki/UI/LanedPlayfield.cs +++ b/osu.Game.Rulesets.Sentakki/UI/LanedPlayfield.cs @@ -17,6 +17,7 @@ public partial class LanedPlayfield : Playfield public readonly List Lanes = new List(); private readonly SortedDrawableProxyContainer slideBodyProxyContainer; + private readonly SortedDrawableProxyContainer slideStarProxyContainer; private readonly SortedDrawableProxyContainer lanedNoteProxyContainer; public readonly LineRenderer HitObjectLineRenderer; @@ -49,6 +50,7 @@ public LanedPlayfield() chevronPool = new DrawablePool(100), HitObjectLineRenderer = new LineRenderer(), slideBodyProxyContainer = new SortedDrawableProxyContainer(), + slideStarProxyContainer = new SortedDrawableProxyContainer(), LanedHitObjectArea = new Container { RelativeSizeAxes = Axes.Both, @@ -87,7 +89,8 @@ private void onHitObjectLoaded(Drawable hitObject) switch (hitObject) { case DrawableSlideBody s: - slideBodyProxyContainer.Add(s.CreateProxy(), s); + slideBodyProxyContainer.Add(s.Slidepath.CreateProxy(), s); + slideStarProxyContainer.Add(s.SlideStars.CreateProxy(), s); break; case DrawableTap t: From d54d1ccf33a4d5f6f3500ca0c3c7553d68444135 Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Fri, 26 Jan 2024 14:52:01 +0100 Subject: [PATCH 08/94] Fix second star disappearing after first use --- .../Objects/Drawables/DrawableSlide.cs | 2 ++ .../Objects/Drawables/DrawableSlideTap.cs | 15 +++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlide.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlide.cs index 32dffa16d..8c3365b3d 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlide.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlide.cs @@ -14,6 +14,8 @@ public partial class DrawableSlide : DrawableSentakkiHitObject public Container SlideBodies = null!; public Container SlideTaps = null!; + public new Slide HitObject => (Slide)base.HitObject; + public DrawableSlide() : this(null) { diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideTap.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideTap.cs index e666825e6..84728ff7a 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideTap.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideTap.cs @@ -8,6 +8,8 @@ public partial class DrawableSlideTap : DrawableTap { protected override Drawable CreateTapRepresentation() => new SlideTapPiece(); + protected new DrawableSlide ParentHitObject => (DrawableSlide)base.ParentHitObject; + public DrawableSlideTap() : this(null) { @@ -18,6 +20,14 @@ public DrawableSlideTap(SlideTap? hitObject) { } + protected override void OnApply() + { + base.OnApply(); + + if (TapVisual is SlideTapPiece note) + note.SecondStar.Alpha = ParentHitObject.HitObject.SlideInfoList.Count > 1 ? 1 : 0; + } + protected override void UpdateInitialTransforms() { base.UpdateInitialTransforms(); @@ -29,10 +39,7 @@ protected override void UpdateInitialTransforms() double spinDuration = baseline_spin_duration * (DrawableSentakkiRuleset?.GameplaySpeed ?? 1); if (ParentHitObject is DrawableSlide slide) - { - spinDuration += ((Slide)slide.HitObject).SlideInfoList.FirstOrDefault()?.Duration ?? 1000; - note.SecondStar.Alpha = slide.SlideBodies.Count > 1 ? 1 : 0; - } + spinDuration += slide.HitObject.SlideInfoList.FirstOrDefault()?.Duration ?? 1000; note.Stars.Spin(spinDuration, RotationDirection.Counterclockwise).Loop(); } From 527badebe9e0d4888843a5a911251eb070f23a2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 09:55:23 +0000 Subject: [PATCH 09/94] Bump ppy.osu.Game from 2024.114.0 to 2024.130.0 Bumps [ppy.osu.Game](https://github.com/ppy/osu) from 2024.114.0 to 2024.130.0. - [Release notes](https://github.com/ppy/osu/releases) - [Commits](https://github.com/ppy/osu/compare/2024.114.0...2024.130.0) --- updated-dependencies: - dependency-name: ppy.osu.Game dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj index 3572b6bfd..1622663d4 100644 --- a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj +++ b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj @@ -9,7 +9,7 @@ osu.Game.Rulesets.Sentakki - + From 4cb804b2179ce234dad951f6031179ec611ea189 Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Tue, 30 Jan 2024 11:07:36 +0100 Subject: [PATCH 10/94] Remove host option stuff in VisualTestRunner --- osu.Game.Rulesets.Sentakki.Tests/VisualTestRunner.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Sentakki.Tests/VisualTestRunner.cs b/osu.Game.Rulesets.Sentakki.Tests/VisualTestRunner.cs index be6a8aca6..ed7e7d86f 100644 --- a/osu.Game.Rulesets.Sentakki.Tests/VisualTestRunner.cs +++ b/osu.Game.Rulesets.Sentakki.Tests/VisualTestRunner.cs @@ -10,7 +10,7 @@ public static class VisualTestRunner [STAThread] public static int Main(string[] args) { - using (DesktopGameHost host = Host.GetSuitableDesktopHost(@"osu", new HostOptions { BindIPC = true })) + using (DesktopGameHost host = Host.GetSuitableDesktopHost(@"osu")) { host.Run(new OsuTestBrowser()); return 0; From ec1e28421683abbb14b872123b152d8f4aaea668 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 12:14:21 +0000 Subject: [PATCH 11/94] Bump ppy.osu.Game from 2024.130.0 to 2024.130.2 Bumps [ppy.osu.Game](https://github.com/ppy/osu) from 2024.130.0 to 2024.130.2. - [Release notes](https://github.com/ppy/osu/releases) - [Commits](https://github.com/ppy/osu/compare/2024.130.0...2024.130.2) --- updated-dependencies: - dependency-name: ppy.osu.Game dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj index 1622663d4..4e4e9bcfe 100644 --- a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj +++ b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj @@ -9,7 +9,7 @@ osu.Game.Rulesets.Sentakki - + From 161993e3e34ee52cd950f891c259da71729bc38b Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Mon, 5 Feb 2024 17:10:53 +0100 Subject: [PATCH 12/94] Don't block subsequent presses to HoldNote --- .../Objects/Drawables/DrawableHold.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs index 31f2ede70..f193a5ab6 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs @@ -71,6 +71,7 @@ protected override void OnFree() base.OnFree(); HoldStartTime = null; TotalHoldTime = 0; + pressedCount = 0; } protected override void UpdateInitialTransforms() @@ -214,6 +215,8 @@ private void endHold() HoldStartTime = null; } + // Tracks how many inputs are pressing on this HitObject currently + private int pressedCount = 0; public bool OnPressed(KeyBindingPressEvent e) { if (AllJudged) @@ -228,7 +231,12 @@ public bool OnPressed(KeyBindingPressEvent e) NoteBody.FadeColour(AccentColour.Value, 50); } - return true; + // Only the first input to this hitobject will be blocked + if (pressedCount++ == 0) + return true; + + // Passthrough excess inputs to later hitobjects in the same lane + return false; } public void OnReleased(KeyBindingReleaseEvent e) @@ -239,7 +247,10 @@ public void OnReleased(KeyBindingReleaseEvent e) if (e.Action != SentakkiAction.Key1 + HitObject.Lane) return; - endHold(); + + // We only release the hold once ALL inputs are released + if (--pressedCount == 0) + endHold(); if (!AllJudged) NoteBody.FadeColour(Color4.Gray, 100); From ab0e6c3b8c90eb51a9b532e107f3078c089c0ee7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 14:51:04 +0000 Subject: [PATCH 13/94] Bump Microsoft.NET.Test.Sdk from 17.8.0 to 17.9.0 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.8.0 to 17.9.0. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.8.0...v17.9.0) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../osu.Game.Rulesets.Sentakki.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj index 15204b8d6..b4d07aad4 100644 --- a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj +++ b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj @@ -10,7 +10,7 @@ osu.Game.Rulesets.Sentakki.Tests - + From 7fe42dd574e4af36c025f9a08efecce1b5ebfdba Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Sat, 17 Feb 2024 19:15:34 +0100 Subject: [PATCH 14/94] Upgrade to .NET 8 --- .vscode/launch.json | 2 +- .../osu.Game.Rulesets.Sentakki.Tests.csproj | 2 +- osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 552db4e7b..fce7e9867 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -7,7 +7,7 @@ "request": "launch", "program": "dotnet", "args": [ - "${workspaceRoot}/osu.Game.Rulesets.Sentakki.Tests/bin/Debug/net6.0/osu.Game.Rulesets.Sentakki.Tests.dll" + "${workspaceRoot}/osu.Game.Rulesets.Sentakki.Tests/bin/Debug/net8.0/osu.Game.Rulesets.Sentakki.Tests.dll" ], "cwd": "${workspaceRoot}", "preLaunchTask": "Build", diff --git a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj index 15204b8d6..ba265a056 100644 --- a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj +++ b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj @@ -19,7 +19,7 @@ WinExe - net6.0 + net8.0 osu.Game.Rulesets.Sentakki.Tests diff --git a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj index 4e4e9bcfe..b8381adfd 100644 --- a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj +++ b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj @@ -2,7 +2,7 @@ sentakki for osu!lazer TAP, HOLD and SLIDE to the beat. - net6.0 + net8.0 Library AnyCPU osu.Game.Rulesets.Sentakki From b7f5d66f096ab3c6524f99802e8fdc98b9fab2fb Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Sat, 17 Feb 2024 20:08:41 +0100 Subject: [PATCH 15/94] Remove excess blank line --- osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs index f193a5ab6..28d1d156b 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs @@ -247,7 +247,6 @@ public void OnReleased(KeyBindingReleaseEvent e) if (e.Action != SentakkiAction.Key1 + HitObject.Lane) return; - // We only release the hold once ALL inputs are released if (--pressedCount == 0) endHold(); From a08a766a430bc8fc33d1fc9418c9390c6ac2e994 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Feb 2024 14:47:16 +0000 Subject: [PATCH 16/94] Bump ppy.osu.Game from 2024.130.2 to 2024.219.0 Bumps [ppy.osu.Game](https://github.com/ppy/osu) from 2024.130.2 to 2024.219.0. - [Release notes](https://github.com/ppy/osu/releases) - [Commits](https://github.com/ppy/osu/compare/2024.130.2...2024.219.0) --- updated-dependencies: - dependency-name: ppy.osu.Game dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj index b8381adfd..6bbd089e2 100644 --- a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj +++ b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj @@ -9,7 +9,7 @@ osu.Game.Rulesets.Sentakki - + From 3ffbb5aad942e2d0ab4c09e46f70cb3dab44abab Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Mon, 19 Feb 2024 16:52:57 +0100 Subject: [PATCH 17/94] Update ApplyResult usages --- .../Judgements/SentakkiJudgementResult.cs | 2 +- .../Drawables/DrawableScoreBonusObject.cs | 11 ++------- .../Drawables/DrawableScorePaddingObject.cs | 17 ++++++++++--- .../Drawables/DrawableSentakkiHitObject.cs | 24 ++++++++++--------- .../DrawableSentakkiLanedHitObject.cs | 7 +++--- .../Drawables/DrawableSlideCheckpoint.cs | 7 +++--- .../Drawables/DrawableSlideCheckpointNode.cs | 9 ++++++- 7 files changed, 46 insertions(+), 31 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki/Judgements/SentakkiJudgementResult.cs b/osu.Game.Rulesets.Sentakki/Judgements/SentakkiJudgementResult.cs index bd0e357c1..b96b37437 100644 --- a/osu.Game.Rulesets.Sentakki/Judgements/SentakkiJudgementResult.cs +++ b/osu.Game.Rulesets.Sentakki/Judgements/SentakkiJudgementResult.cs @@ -20,5 +20,5 @@ public SentakkiJudgementResult(HitObject hitObject, Judgement judgement) : base( } } - public bool Critical { get; private set; } + public bool Critical { get; set; } } diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScoreBonusObject.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScoreBonusObject.cs index 39205d96f..3d4099eed 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScoreBonusObject.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScoreBonusObject.cs @@ -19,19 +19,12 @@ public DrawableScoreBonusObject(ScoreBonusObject? hitObject) public void TriggerResult() { - double timeOffset = Math.Abs(Time.Current - HitObject.StartTime); - - ApplyResult(r => + ApplyResult((r, dho) => { + double timeOffset = Math.Abs(Time.Current - HitObject.StartTime); bool isCrit = r.HitObject.HitWindows.ResultFor(timeOffset) == HitResult.Perfect; r.Type = isCrit ? r.Judgement.MaxResult : r.Judgement.MinResult; }); } - - public new void ApplyResult(Action application) - { - if (!Result.HasResult) - base.ApplyResult(application); - } } } diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScorePaddingObject.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScorePaddingObject.cs index 7ec91a1aa..cd4148264 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScorePaddingObject.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScorePaddingObject.cs @@ -1,6 +1,7 @@ using System; using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.Sentakki.Judgements; namespace osu.Game.Rulesets.Sentakki.Objects.Drawables @@ -19,10 +20,20 @@ public DrawableScorePaddingObject(ScorePaddingObject? hitObject) protected override JudgementResult CreateResult(Judgement judgement) => new SentakkiJudgementResult(HitObject, judgement); - public new void ApplyResult(Action application) + public new void ApplyResult(HitResult result) { - if (!Result.HasResult) - base.ApplyResult(application); + var SentakkiJudgementResult = (SentakkiJudgementResult)Result; + if (result == HitResult.Perfect) + { + SentakkiJudgementResult.Critical = true; + result = Result.Judgement.MaxResult; + } + else + { + SentakkiJudgementResult.Critical = false; + } + + base.ApplyResult(result); } } } diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiHitObject.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiHitObject.cs index bcb4e4dc4..ac6446676 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiHitObject.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiHitObject.cs @@ -57,11 +57,20 @@ protected override void OnApply() protected override JudgementResult CreateResult(Judgement judgement) => new SentakkiJudgementResult(HitObject, judgement); - protected void ApplyResult(HitResult result) + protected new void ApplyResult(HitResult result) { - void resultApplication(JudgementResult r) => ((SentakkiJudgementResult)r).Type = result; - - ApplyResult(resultApplication); + var SentakkiJudgementResult = (SentakkiJudgementResult)Result; + if (result == HitResult.Perfect) + { + SentakkiJudgementResult.Critical = true; + result = Result.Judgement.MaxResult; + } + else + { + SentakkiJudgementResult.Critical = false; + } + + base.ApplyResult(result); } protected override void OnFree() @@ -95,12 +104,5 @@ protected override void UpdateInitialTransforms() } private bool transformResetQueued; - - protected new virtual void ApplyResult(Action application) - { - // Apply judgement to this object - if (!Result.HasResult) - base.ApplyResult(application); - } } } diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiLanedHitObject.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiLanedHitObject.cs index dea2edce0..f19f93b18 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiLanedHitObject.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiLanedHitObject.cs @@ -5,6 +5,7 @@ using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.Sentakki.Configuration; using osu.Game.Rulesets.Sentakki.UI; using osu.Game.Skinning; @@ -105,7 +106,7 @@ protected override void OnFree() breakSample.ClearSamples(); } - protected override void ApplyResult(Action application) + protected new void ApplyResult(HitResult hitResult) { // Judge the scoreBonus foreach (var bonusObject in scoreBonusObjects) @@ -113,9 +114,9 @@ protected override void ApplyResult(Action application) // Also give Break note score padding a judgement for (int i = 0; i < scorePaddingObjects.Count; ++i) - scorePaddingObjects[^(i + 1)].ApplyResult(application); + scorePaddingObjects[^(i + 1)].ApplyResult(hitResult); - base.ApplyResult(application); + base.ApplyResult(hitResult); } } } diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs index 94e72ff98..911a00a3f 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs @@ -5,6 +5,7 @@ using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Sentakki.Objects.Drawables { @@ -78,16 +79,16 @@ protected override void CheckForResult(bool userTriggered, double timeOffset) ApplyResult(Result.Judgement.MaxResult); } - protected override void ApplyResult(Action application) + protected new void ApplyResult(HitResult result) { if (Judged) return; // Make sure remaining nodes are judged foreach (var node in nodes) - node.ApplyResult(application); + node.ApplyResult(result); - base.ApplyResult(application); + base.ApplyResult(result); } // Forcefully miss this node, used when players fail to complete the slide on time. diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpointNode.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpointNode.cs index 0d6d83fee..b9546f99a 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpointNode.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpointNode.cs @@ -3,6 +3,7 @@ using osu.Framework.Graphics; using osu.Framework.Input; using osu.Game.Rulesets.Judgements; +using osu.Game.Rulesets.Scoring; using osuTK; namespace osu.Game.Rulesets.Sentakki.Objects.Drawables @@ -82,6 +83,12 @@ private bool checkForTouchInput() return false; } - public new void ApplyResult(Action application) => base.ApplyResult(application); + public new void ApplyResult(HitResult result) + { + if (Judged) + return; + + base.ApplyResult(result); + } } } From 0d748abb3412262ff364a99aa5631e70427769ca Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Wed, 21 Feb 2024 14:57:45 +0100 Subject: [PATCH 18/94] Fix Holds resetting holdstarttime on every input --- .../Objects/Drawables/DrawableHold.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs index 28d1d156b..63184d050 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs @@ -200,6 +200,9 @@ protected override void ClearNestedHitObjects() private bool beginHoldAt(double timeOffset) { + if (HoldStartTime is not null) + return false; + if (timeOffset < -Head.HitObject.HitWindows.WindowFor(HitResult.Miss)) return false; @@ -225,15 +228,14 @@ public bool OnPressed(KeyBindingPressEvent e) if (e.Action != SentakkiAction.Key1 + HitObject.Lane) return false; + pressedCount++; + if (beginHoldAt(Time.Current - Head.HitObject.StartTime)) { Head.UpdateResult(); NoteBody.FadeColour(AccentColour.Value, 50); - } - - // Only the first input to this hitobject will be blocked - if (pressedCount++ == 0) return true; + } // Passthrough excess inputs to later hitobjects in the same lane return false; From 6c6b454759b31fb274974da9b54d1e37bc4b94bd Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Wed, 21 Feb 2024 17:27:40 +0100 Subject: [PATCH 19/94] Expand lane sensor radius outside the ring --- osu.Game.Rulesets.Sentakki/UI/Lane.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki/UI/Lane.cs b/osu.Game.Rulesets.Sentakki/UI/Lane.cs index f935ce996..c24dae8c8 100644 --- a/osu.Game.Rulesets.Sentakki/UI/Lane.cs +++ b/osu.Game.Rulesets.Sentakki/UI/Lane.cs @@ -65,9 +65,12 @@ private void load() #region Input Handling - private const float receptor_angle_range = 45 * 1.4f; + private const float receptor_angle_range = 45; private const float receptor_angle_range_mid = receptor_angle_range / 2; + private const float receptor_angle_range_inner = receptor_angle_range * 1.4f; + private const float receptor_angle_range_inner_mid = receptor_angle_range_inner / 2; + private SentakkiInputManager sentakkiActionInputManager = null!; internal SentakkiInputManager SentakkiActionInputManager => sentakkiActionInputManager ??= (SentakkiInputManager)GetContainingInputManager(); @@ -78,10 +81,12 @@ public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) var localPos = ToLocalSpace(screenSpacePos); float distance = Vector2.DistanceSquared(Vector2.Zero, localPos); - if (distance is < (200 * 200) or > (400 * 400)) return false; + if (distance is < (200 * 200) or > (600 * 600)) return false; + + float targetAngleRangeMid = distance > 400 ? receptor_angle_range_mid : receptor_angle_range_inner_mid; float angleDelta = SentakkiExtensions.GetDeltaAngle(0, Vector2.Zero.GetDegreesFromPosition(localPos)); - if (Math.Abs(angleDelta) > receptor_angle_range_mid) return false; + if (Math.Abs(angleDelta) > targetAngleRangeMid) return false; return true; } From 2357b8b45f9f18c8b70880a1054837183d335a53 Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Wed, 21 Feb 2024 17:40:38 +0100 Subject: [PATCH 20/94] Increase touch hit region --- osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableTouch.cs | 2 +- .../Objects/Drawables/Pieces/TouchHolds/TouchHoldBody.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableTouch.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableTouch.cs index 14c7a4add..d2b5edaa2 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableTouch.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableTouch.cs @@ -43,7 +43,7 @@ private void load() if (DrawableSentakkiRuleset is not null) AnimationDuration.BindTo(DrawableSentakkiRuleset?.AdjustedTouchAnimDuration); - Size = new Vector2(100); + Size = new Vector2(130); Origin = Anchor.Centre; Anchor = Anchor.Centre; AddRangeInternal(new Drawable[] diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldBody.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldBody.cs index 79d313c87..ec423dd8e 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldBody.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldBody.cs @@ -13,7 +13,7 @@ public partial class TouchHoldBody : CircularContainer public readonly TouchHoldProgressPiece ProgressPiece; private readonly TouchHoldCentrePiece centrePiece; - public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => centrePiece.ReceivePositionalInputAt(screenSpacePos); + public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => ProgressPiece.ReceivePositionalInputAt(screenSpacePos); public TouchHoldBody() { From 65e5a1991a62034cef2de63b7d0fa4e62c58103c Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Wed, 21 Feb 2024 17:41:05 +0100 Subject: [PATCH 21/94] Don't block touch note input propogation on hit --- osu.Game.Rulesets.Sentakki/UI/TouchPlayfield.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki/UI/TouchPlayfield.cs b/osu.Game.Rulesets.Sentakki/UI/TouchPlayfield.cs index a7976b44b..8349b4b60 100644 --- a/osu.Game.Rulesets.Sentakki/UI/TouchPlayfield.cs +++ b/osu.Game.Rulesets.Sentakki/UI/TouchPlayfield.cs @@ -73,8 +73,6 @@ protected override void Update() private void handlePointInput(int pointID, bool hasAction, Vector2? pointerPosition) { - bool continueEventPropogation = true; - foreach (DrawableTouch touch in aliveTouchNotes) { if (hasAction && touch.ReceivePositionalInputAt(pointerPosition!.Value)) @@ -82,8 +80,7 @@ private void handlePointInput(int pointID, bool hasAction, Vector2? pointerPosit if (!touch.PointInteractionState[pointID]) { touch.PointInteractionState[pointID] = true; - if (continueEventPropogation) - continueEventPropogation = !touch.OnNewPointInteraction(); + touch.OnNewPointInteraction(); } } else From e61f7f99a87dbac84175aad4cfdf7c36e4adb059 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Feb 2024 21:54:23 +0000 Subject: [PATCH 22/94] Bump ppy.osu.Game from 2024.219.0 to 2024.221.0 Bumps [ppy.osu.Game](https://github.com/ppy/osu) from 2024.219.0 to 2024.221.0. - [Release notes](https://github.com/ppy/osu/releases) - [Commits](https://github.com/ppy/osu/compare/2024.219.0...2024.221.0) --- updated-dependencies: - dependency-name: ppy.osu.Game dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj index 6bbd089e2..5577b3e68 100644 --- a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj +++ b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj @@ -9,7 +9,7 @@ osu.Game.Rulesets.Sentakki - + From 65586c05f70bb9ae99d17290b0bd0ce66ad6829a Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Wed, 21 Feb 2024 23:01:03 +0100 Subject: [PATCH 23/94] Don't attempt to cast pressedActions --- osu.Game.Rulesets.Sentakki/SentakkiInputManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki/SentakkiInputManager.cs b/osu.Game.Rulesets.Sentakki/SentakkiInputManager.cs index b27b47364..46f0a94ac 100644 --- a/osu.Game.Rulesets.Sentakki/SentakkiInputManager.cs +++ b/osu.Game.Rulesets.Sentakki/SentakkiInputManager.cs @@ -46,7 +46,7 @@ protected override bool Handle(UIEvent e) protected override void PropagateReleased(IEnumerable drawables, InputState state, SentakkiAction released) { int actionCount = 0; - var pressed = (List)PressedActions; + var pressed = PressedActions; for (int i = 0; i < pressed.Count; ++i) { @@ -61,7 +61,7 @@ protected override void PropagateReleased(IEnumerable drawables, Input } } - public SlimReadOnlyListWrapper PressedActions => ((List)KeyBindingContainer.PressedActions).AsSlimReadOnly(); + public SlimReadOnlyListWrapper PressedActions => KeyBindingContainer.PressedActions; // For makeshift virtual input handling public void TriggerPressed(SentakkiAction action) => KeyBindingContainer.TriggerPressed(action); From 78b22d89db1c8583cffa95f95c2021dec34e17b2 Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Thu, 22 Feb 2024 16:29:46 +0100 Subject: [PATCH 24/94] Fix receptor input causing a crash --- .../Mods/SentakkiModRelax.cs | 1 + .../Objects/Drawables/DrawableHold.cs | 6 +++-- .../SentakkiInputManager.cs | 25 ------------------- osu.Game.Rulesets.Sentakki/UI/Lane.cs | 10 ++++++-- 4 files changed, 13 insertions(+), 29 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki/Mods/SentakkiModRelax.cs b/osu.Game.Rulesets.Sentakki/Mods/SentakkiModRelax.cs index 9e4e73b5e..0ade0b6e1 100644 --- a/osu.Game.Rulesets.Sentakki/Mods/SentakkiModRelax.cs +++ b/osu.Game.Rulesets.Sentakki/Mods/SentakkiModRelax.cs @@ -16,6 +16,7 @@ public class SentakkiModRelax : Mod, IApplicableAfterBeatmapConversion public override string Name => "Relax"; public override string Acronym => "RX"; + public override ModType Type => ModType.DifficultyReduction; public override LocalisableString Description => "All notes are EX notes, you've got nothing to prove!"; diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs index 63184d050..603d251fa 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs @@ -250,8 +250,10 @@ public void OnReleased(KeyBindingReleaseEvent e) return; // We only release the hold once ALL inputs are released - if (--pressedCount == 0) - endHold(); + if (--pressedCount != 0) + return; + + endHold(); if (!AllJudged) NoteBody.FadeColour(Color4.Gray, 100); diff --git a/osu.Game.Rulesets.Sentakki/SentakkiInputManager.cs b/osu.Game.Rulesets.Sentakki/SentakkiInputManager.cs index 46f0a94ac..8d22ca8aa 100644 --- a/osu.Game.Rulesets.Sentakki/SentakkiInputManager.cs +++ b/osu.Game.Rulesets.Sentakki/SentakkiInputManager.cs @@ -1,9 +1,5 @@ -using System.Collections.Generic; -using osu.Framework.Extensions.ListExtensions; -using osu.Framework.Graphics; using osu.Framework.Input.Bindings; using osu.Framework.Input.Events; -using osu.Framework.Input.States; using osu.Framework.Lists; using osu.Framework.Localisation; using osu.Game.Rulesets.Sentakki.Localisation; @@ -38,27 +34,6 @@ protected override bool Handle(UIEvent e) return base.Handle(e); } - - // We want the press behavior of SimultaneousBindingMode.All, but we want the release behavior of SimultaneousBindingMode.Unique - // As long as there are more than one input source triggering the action, we manually remove the action from the list once, without propogating the release - // When the final source is released, we let the original handling take over, which would also propogate the release event - // This is so that multiple sources (virtual input/key) can trigger a press, but not release until the last key is released - protected override void PropagateReleased(IEnumerable drawables, InputState state, SentakkiAction released) - { - int actionCount = 0; - var pressed = PressedActions; - - for (int i = 0; i < pressed.Count; ++i) - { - if (pressed[i] == released && ++actionCount > 1) - break; - } - - if (actionCount > 1) - pressed.Remove(released); - else - base.PropagateReleased(drawables, state, released); - } } public SlimReadOnlyListWrapper PressedActions => KeyBindingContainer.PressedActions; diff --git a/osu.Game.Rulesets.Sentakki/UI/Lane.cs b/osu.Game.Rulesets.Sentakki/UI/Lane.cs index c24dae8c8..c69672446 100644 --- a/osu.Game.Rulesets.Sentakki/UI/Lane.cs +++ b/osu.Game.Rulesets.Sentakki/UI/Lane.cs @@ -131,10 +131,16 @@ private void updateInputState() private void handleKeyPress(ValueChangedEvent keys) { if (keys.NewValue < keys.OldValue) - SentakkiActionInputManager.TriggerReleased(SentakkiAction.Key1 + LaneNumber); + for (int i = 0; i < keys.OldValue - keys.NewValue; ++i) + { + SentakkiActionInputManager.TriggerReleased(SentakkiAction.Key1 + LaneNumber); + } if (keys.NewValue > keys.OldValue) - SentakkiActionInputManager.TriggerPressed(SentakkiAction.Key1 + LaneNumber); + for (int i = 0; i < keys.NewValue - keys.OldValue; ++i) + { + SentakkiActionInputManager.TriggerPressed(SentakkiAction.Key1 + LaneNumber); + } } public bool OnPressed(KeyBindingPressEvent e) From 78e00b4c64f66360d01cf3dc30059aa733cad162 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 14:57:23 +0000 Subject: [PATCH 25/94] Bump NUnit from 4.0.1 to 4.1.0 Bumps [NUnit](https://github.com/nunit/nunit) from 4.0.1 to 4.1.0. - [Release notes](https://github.com/nunit/nunit/releases) - [Changelog](https://github.com/nunit/nunit/blob/master/CHANGES.md) - [Commits](https://github.com/nunit/nunit/compare/v4.0.1...4.1.0) --- updated-dependencies: - dependency-name: NUnit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../osu.Game.Rulesets.Sentakki.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj index 4b7c9d3ef..a77a708bb 100644 --- a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj +++ b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj @@ -11,7 +11,7 @@ - + From 5b3791e9afb3cb4f3fe19aa9aed3c4f7192ee083 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 2 Mar 2024 12:43:14 +0000 Subject: [PATCH 26/94] Bump ppy.osu.Game from 2024.221.0 to 2024.302.0 Bumps [ppy.osu.Game](https://github.com/ppy/osu) from 2024.221.0 to 2024.302.0. - [Release notes](https://github.com/ppy/osu/releases) - [Commits](https://github.com/ppy/osu/compare/2024.221.0...2024.302.0) --- updated-dependencies: - dependency-name: ppy.osu.Game dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj index 5577b3e68..6bb9babb0 100644 --- a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj +++ b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj @@ -9,7 +9,7 @@ osu.Game.Rulesets.Sentakki - + From 0e5d320533001775e1479cb6c64da863fc1c5203 Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Sat, 2 Mar 2024 14:50:23 +0100 Subject: [PATCH 27/94] Add back slider order leniency --- .../Objects/Drawables/DrawableSlideCheckpoint.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs index 911a00a3f..bebd1e791 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs @@ -29,7 +29,7 @@ public partial class DrawableSlideCheckpoint : DrawableSentakkiHitObject // All hits can only be done after the slide tap has been judged public bool IsHittable => ParentHitObject.IsHittable && isPreviousNodeHit(); - private bool isPreviousNodeHit() => ThisIndex < 1 || ParentHitObject.SlideCheckpoints[ThisIndex - 1].IsHit; + private bool isPreviousNodeHit() => ThisIndex < 2 || ParentHitObject.SlideCheckpoints[ThisIndex - 2].IsHit; private Container nodes = null!; @@ -84,6 +84,10 @@ protected override void CheckForResult(bool userTriggered, double timeOffset) if (Judged) return; + // The previous node may not be judged due to slider hit order leniency allowing players to skip up to one node + if (ThisIndex > 0) + ParentHitObject.SlideCheckpoints[ThisIndex - 1].ApplyResult(result); + // Make sure remaining nodes are judged foreach (var node in nodes) node.ApplyResult(result); From 3f34efb21fbd5f0aa2c599404a4156ac1b1c3349 Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Sat, 2 Mar 2024 15:07:04 +0100 Subject: [PATCH 28/94] Add ability to enable strict slide order in HR --- .../Mods/SentakkiModHardRock.cs | 15 ++++++++++++++- .../Objects/Drawables/DrawableSlideCheckpoint.cs | 6 +++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki/Mods/SentakkiModHardRock.cs b/osu.Game.Rulesets.Sentakki/Mods/SentakkiModHardRock.cs index 13d1a90f9..a8448d704 100644 --- a/osu.Game.Rulesets.Sentakki/Mods/SentakkiModHardRock.cs +++ b/osu.Game.Rulesets.Sentakki/Mods/SentakkiModHardRock.cs @@ -4,13 +4,15 @@ using osu.Game.Configuration; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.Sentakki.Localisation.Mods; +using osu.Game.Rulesets.Sentakki.Objects.Drawables; using osu.Game.Rulesets.Sentakki.Scoring; namespace osu.Game.Rulesets.Sentakki.Mods { - public class SentakkiModHardRock : ModHardRock, IApplicableToHitObject + public class SentakkiModHardRock : ModHardRock, IApplicableToHitObject, IApplicableToDrawableHitObject { public override double ScoreMultiplier => 1; @@ -28,6 +30,9 @@ public override void ApplyToDifficulty(BeatmapDifficulty difficulty) [SettingSource(typeof(SentakkiModHardRockStrings), nameof(SentakkiModHardRockStrings.MinimumResult), nameof(SentakkiModHardRockStrings.MinimumResultDescription))] public Bindable MinimumValidResult { get; } = new Bindable(SentakkiHitResult.Good); + [SettingSource("Enable strict slider tracking")] + public Bindable StrictSliderTracking { get; } = new Bindable(false); + public void ApplyToHitObject(HitObject hitObject) { // Nested HitObjects should get the same treatment @@ -41,6 +46,14 @@ public void ApplyToHitObject(HitObject hitObject) shw.JudgementMode = JudgementMode.Value; } + public void ApplyToDrawableHitObject(DrawableHitObject drawable) + { + if (drawable is not DrawableSlideCheckpoint slideCheckpoint) + return; + + slideCheckpoint.StrictSliderTracking = StrictSliderTracking.Value; + } + public enum SentakkiHitResult { Good = 3, diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs index bebd1e791..526fe1a3c 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs @@ -29,7 +29,11 @@ public partial class DrawableSlideCheckpoint : DrawableSentakkiHitObject // All hits can only be done after the slide tap has been judged public bool IsHittable => ParentHitObject.IsHittable && isPreviousNodeHit(); - private bool isPreviousNodeHit() => ThisIndex < 2 || ParentHitObject.SlideCheckpoints[ThisIndex - 2].IsHit; + public bool StrictSliderTracking { get; set; } + + private int trackingLookBehindDistance => StrictSliderTracking ? 1 : 2; + + private bool isPreviousNodeHit() => ThisIndex < trackingLookBehindDistance || ParentHitObject.SlideCheckpoints[ThisIndex - trackingLookBehindDistance].IsHit; private Container nodes = null!; From 624dc3dc36b22a7e7348b11ed0a0b8aacd4f15c4 Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Sat, 2 Mar 2024 15:12:40 +0100 Subject: [PATCH 29/94] Avoid div-by-zero in LiveCounter --- osu.Game.Rulesets.Sentakki/UI/Components/LiveCounter.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Sentakki/UI/Components/LiveCounter.cs b/osu.Game.Rulesets.Sentakki/UI/Components/LiveCounter.cs index c846afbb7..823fe3283 100644 --- a/osu.Game.Rulesets.Sentakki/UI/Components/LiveCounter.cs +++ b/osu.Game.Rulesets.Sentakki/UI/Components/LiveCounter.cs @@ -75,7 +75,12 @@ protected override void OnNewBeat(int beatIndex, TimingControlPoint timingPoint, float panicDurationMultiplier = 1 * MathF.Pow(0.75f, panicLevel); float beatMagnitude = 0.1f + (0.05f * panicLevel); - if (beatIndex % (int)(timingPoint.TimeSignature.Numerator * Math.Max(panicDurationMultiplier, 0.5f)) == 0) + int heartbeatFreq = (int)(timingPoint.TimeSignature.Numerator * Math.Max(panicDurationMultiplier, 0.5f)); + + if (heartbeatFreq == 0) + return; + + if (beatIndex % heartbeatFreq == 0) { this.ScaleTo(1 + beatMagnitude, 200 * panicDurationMultiplier) .Then().ScaleTo(1, 120 * panicDurationMultiplier) From 0d38d3fff0045446a80ca969442bcb2e69520e93 Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Sat, 2 Mar 2024 20:33:24 +0100 Subject: [PATCH 30/94] Fix MinimumHitResult being invalid --- osu.Game.Rulesets.Sentakki/Scoring/SentakkiHitWindows.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Sentakki/Scoring/SentakkiHitWindows.cs b/osu.Game.Rulesets.Sentakki/Scoring/SentakkiHitWindows.cs index b6b185e3f..95ee0d551 100644 --- a/osu.Game.Rulesets.Sentakki/Scoring/SentakkiHitWindows.cs +++ b/osu.Game.Rulesets.Sentakki/Scoring/SentakkiHitWindows.cs @@ -6,7 +6,7 @@ public abstract class SentakkiHitWindows : HitWindows { protected const double timing_unit = 1000 / 60.0; // A single frame - public HitResult MinimumHitResult = HitResult.None; + public HitResult MinimumHitResult = HitResult.Miss; private SentakkiJudgementMode judgementMode = SentakkiJudgementMode.Normal; public SentakkiJudgementMode JudgementMode From 75dcf26313fa30778f839ce9fc152607c019b1ea Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Sun, 3 Mar 2024 20:04:06 +0100 Subject: [PATCH 31/94] Update README.md --- README.md | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 73f338b6b..49ba35ab1 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ ![sentakki](assets/logov3.png) -# sentakki - +--- [![.NET Core](https://github.com/LumpBloom7/sentakki/workflows/.NET%20Core/badge.svg)](https://github.com/LumpBloom7/sentakki/actions?query=workflow%3A%22.NET+Core%22) [![CodeFactor](https://www.codefactor.io/repository/github/lumpbloom7/sentakki/badge)](https://www.codefactor.io/repository/github/lumpbloom7/sentakki) [![Crowdin](https://badges.crowdin.net/sentakki/localized.svg)](https://crowdin.com/project/sentakki) @@ -9,12 +8,23 @@ [![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/E1E01N56M) -An attempt to recreate Sega's maimai within osu!lazer, while making it more flexible. +sentakki is a recreation of maimaiDX for use within osu, taking advantage of the longevity and the osu ecosystem for features such as multiplayer, beatmap listing, and leaderboards. ## Status All the essential note types have been implemented. Features like editor is being developed on the side, since lazer doesn't support third party ruleset editors yet. PP/diff calc haven't been given considered yet, and it is currently open to ideas. +## Demo videos + +These charts have been ported from maimaiDX, but conversions of osu!std charts are also supported. +||| +|:---:|:---:| +|