From 23ee2cbf3cdef6cb840b6bd80e3ab653ad594786 Mon Sep 17 00:00:00 2001 From: Derrick Timmermans Date: Tue, 30 Apr 2024 11:47:17 +0200 Subject: [PATCH] Fix sample playback position issues Slides and touch note samples where leaning to the left due to a math error on my part. Slides were also not even using the correct position for determining the position --- .../Objects/Drawables/DrawableSentakkiHitObject.cs | 2 +- .../Objects/Drawables/DrawableSlideBody.cs | 2 +- .../Objects/Drawables/DrawableSlideCheckpoint.cs | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiHitObject.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiHitObject.cs index ac6446676..fae189dfd 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiHitObject.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiHitObject.cs @@ -25,7 +25,7 @@ public bool Auto // Used for the animation update protected readonly Bindable AnimationDuration = new Bindable(1000); - protected override float SamplePlaybackPosition => Position.X / (SentakkiPlayfield.INTERSECTDISTANCE * 2); + protected override float SamplePlaybackPosition => (Position.X / (SentakkiPlayfield.INTERSECTDISTANCE * 2)) + 0.5f; public DrawableSentakkiHitObject() : this(null) diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideBody.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideBody.cs index daa1005d2..7b3565ed1 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideBody.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideBody.cs @@ -18,7 +18,7 @@ namespace osu.Game.Rulesets.Sentakki.Objects.Drawables { public partial class DrawableSlideBody : DrawableSentakkiLanedHitObject { - private new DrawableSlide ParentHitObject => (DrawableSlide)base.ParentHitObject; + public new DrawableSlide ParentHitObject => (DrawableSlide)base.ParentHitObject; public new SlideBody HitObject => (SlideBody)base.HitObject; // This slide body can only be interacted with iff the slidetap associated with this slide is judged diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs index 526fe1a3c..e75525a1b 100644 --- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs +++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs @@ -6,6 +6,7 @@ using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Scoring; +using osu.Game.Rulesets.Sentakki.UI; namespace osu.Game.Rulesets.Sentakki.Objects.Drawables { @@ -20,6 +21,7 @@ public partial class DrawableSlideCheckpoint : DrawableSentakkiHitObject public override bool DisplayResult => false; private new DrawableSlideBody ParentHitObject => (DrawableSlideBody)base.ParentHitObject; + private int slideOriginLane => ParentHitObject.ParentHitObject.HitObject.Lane; // Used to determine the node order public int ThisIndex; @@ -37,6 +39,8 @@ public partial class DrawableSlideCheckpoint : DrawableSentakkiHitObject private Container nodes = null!; + protected override float SamplePlaybackPosition => (SentakkiExtensions.GetPositionAlongLane(SentakkiPlayfield.INTERSECTDISTANCE, slideOriginLane).X / (SentakkiPlayfield.INTERSECTDISTANCE * 2)) + .5f; + public DrawableSlideCheckpoint() : this(null) { @@ -70,7 +74,7 @@ protected override void OnApply() protected override void CheckForResult(bool userTriggered, double timeOffset) { - // Counting hit notes manually to avoid LINQ alloc overhead + // Counting hit notes manually to avoid LINQ alloc overhead int hitNotes = 0; foreach (var node in nodes)