1
0
mirror of https://github.com/ppy/osu synced 2025-02-21 04:57:11 +00:00

Ensure samples & sample points are carried over during conversion

This commit is contained in:
Bartłomiej Dach 2021-11-11 21:43:06 +01:00
parent d9494d405e
commit 0cd3f98598
No known key found for this signature in database
GPG Key ID: BCECCD4FA41F6497
2 changed files with 12 additions and 3 deletions
osu.Game.Rulesets.Osu.Tests/Editor
osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders

View File

@ -66,7 +66,7 @@ namespace osu.Game.Rulesets.Osu.Tests.Editor
} }
[Test] [Test]
public void TestConversionPreservesNewCombo() public void TestConversionPreservesSliderProperties()
{ {
Slider slider = null; Slider slider = null;
@ -117,7 +117,9 @@ namespace osu.Game.Rulesets.Osu.Tests.Editor
bool matches(HitCircle circle, double time, Vector2 position, bool startsNewCombo) => bool matches(HitCircle circle, double time, Vector2 position, bool startsNewCombo) =>
Precision.AlmostEquals(circle.StartTime, time, 1) Precision.AlmostEquals(circle.StartTime, time, 1)
&& Precision.AlmostEquals(circle.Position, position, 0.01f) && Precision.AlmostEquals(circle.Position, position, 0.01f)
&& circle.NewCombo == startsNewCombo; && circle.NewCombo == startsNewCombo
&& circle.Samples.SequenceEqual(slider.HeadCircle.Samples)
&& circle.SampleControlPoint.IsRedundant(slider.SampleControlPoint);
} }
private bool sliderRestored(Slider slider) private bool sliderRestored(Slider slider)

View File

@ -12,6 +12,7 @@ using osu.Framework.Graphics.Primitives;
using osu.Framework.Graphics.UserInterface; using osu.Framework.Graphics.UserInterface;
using osu.Framework.Input.Events; using osu.Framework.Input.Events;
using osu.Framework.Utils; using osu.Framework.Utils;
using osu.Game.Beatmaps.ControlPoints;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Edit;
using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects;
@ -268,11 +269,17 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders
while (!Precision.DefinitelyBigger(time, HitObject.GetEndTime(), 1)) while (!Precision.DefinitelyBigger(time, HitObject.GetEndTime(), 1))
{ {
Vector2 position = HitObject.Position + HitObject.Path.PositionAt((time - HitObject.StartTime) / HitObject.Duration); Vector2 position = HitObject.Position + HitObject.Path.PositionAt((time - HitObject.StartTime) / HitObject.Duration);
var samplePoint = (SampleControlPoint)HitObject.SampleControlPoint.DeepClone();
samplePoint.Time = time;
editorBeatmap.Add(new HitCircle editorBeatmap.Add(new HitCircle
{ {
StartTime = time, StartTime = time,
Position = position, Position = position,
NewCombo = i == 0 && HitObject.NewCombo NewCombo = i == 0 && HitObject.NewCombo,
SampleControlPoint = samplePoint,
Samples = HitObject.HeadCircle.Samples.Select(s => s.With()).ToList()
}); });
i += 1; i += 1;