From 450e7016bcbf2e778910f6114da6688140d3cbd5 Mon Sep 17 00:00:00 2001 From: Arthur Araujo Date: Sat, 30 Mar 2024 21:23:05 -0300 Subject: [PATCH] Bind `StackHeight` changes to visual update methods --- .../TestScenePathControlPointVisualiser.cs | 48 +++++++++++++++++++ .../PathControlPointConnectionPiece.cs | 2 + .../Components/PathControlPointPiece.cs | 2 + 3 files changed, 52 insertions(+) diff --git a/osu.Game.Rulesets.Osu.Tests/Editor/TestScenePathControlPointVisualiser.cs b/osu.Game.Rulesets.Osu.Tests/Editor/TestScenePathControlPointVisualiser.cs index 2b53554ed1..0c12e6fb21 100644 --- a/osu.Game.Rulesets.Osu.Tests/Editor/TestScenePathControlPointVisualiser.cs +++ b/osu.Game.Rulesets.Osu.Tests/Editor/TestScenePathControlPointVisualiser.cs @@ -172,6 +172,54 @@ namespace osu.Game.Rulesets.Osu.Tests.Editor assertControlPointPathType(4, null); } + [Test] + public void TestStackingUpdatesPointsPosition() + { + createVisualiser(true); + + Vector2[] points = [ + new Vector2(200), + new Vector2(300), + new Vector2(500, 300), + new Vector2(700, 200), + new Vector2(500, 100) + ]; + + foreach (var point in points) addControlPointStep(point); + + AddStep("apply stacking", () => slider.StackHeightBindable.Value += 1); + + for (int i = 0; i < points.Length; i++) + addAssertPointPositionChanged(points, i); + } + + [Test] + public void TestStackingUpdatesConnectionPosition() + { + createVisualiser(true); + + Vector2 connectionPosition = default!; + + addControlPointStep(connectionPosition = new Vector2(300)); + addControlPointStep(new Vector2(600)); + + // Apply a big number in stacking so the person running the test can clearly see if it fails + AddStep("apply stacking", () => slider.StackHeightBindable.Value += 10); + + AddAssert($"Connection at {connectionPosition} changed", + () => visualiser.Connections[0].Position, + () => !Is.EqualTo(connectionPosition) + ); + } + + private void addAssertPointPositionChanged(Vector2[] points, int index) + { + AddAssert($"Point at {points.ElementAt(index)} changed", + () => visualiser.Pieces[index].Position, + () => !Is.EqualTo(points.ElementAt(index)) + ); + } + private void createVisualiser(bool allowSelection) => AddStep("create visualiser", () => Child = visualiser = new PathControlPointVisualiser(slider, allowSelection) { Anchor = Anchor.Centre, diff --git a/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/Components/PathControlPointConnectionPiece.cs b/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/Components/PathControlPointConnectionPiece.cs index 7e7d653dbd..56dc16dd95 100644 --- a/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/Components/PathControlPointConnectionPiece.cs +++ b/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/Components/PathControlPointConnectionPiece.cs @@ -56,6 +56,8 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components pathVersion = hitObject.Path.Version.GetBoundCopy(); pathVersion.BindValueChanged(_ => Scheduler.AddOnce(updateConnectingPath)); + hitObject.StackHeightBindable.BindValueChanged(_ => updateConnectingPath()); + updateConnectingPath(); } diff --git a/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/Components/PathControlPointPiece.cs b/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/Components/PathControlPointPiece.cs index e741d67e3b..ee306fb6d7 100644 --- a/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/Components/PathControlPointPiece.cs +++ b/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/Components/PathControlPointPiece.cs @@ -105,6 +105,8 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components hitObjectScale = hitObject.ScaleBindable.GetBoundCopy(); hitObjectScale.BindValueChanged(_ => updateMarkerDisplay()); + hitObject.StackHeightBindable.BindValueChanged(_ => updateMarkerDisplay()); + IsSelected.BindValueChanged(_ => updateMarkerDisplay()); updateMarkerDisplay();