mirror of
https://github.com/osukey/osukey.git
synced 2025-08-06 16:13:57 +09:00
Revert to first approach
This commit is contained in:
@ -57,6 +57,29 @@ namespace osu.Game.Rulesets.Taiko.Beatmaps
|
|||||||
|
|
||||||
Beatmap<TaikoHitObject> converted = base.ConvertBeatmap(original, cancellationToken);
|
Beatmap<TaikoHitObject> converted = base.ConvertBeatmap(original, cancellationToken);
|
||||||
|
|
||||||
|
if (original.BeatmapInfo.Ruleset.OnlineID == 0)
|
||||||
|
{
|
||||||
|
// Post processing step to transform standard slider velocity changes into scroll speed changes
|
||||||
|
double lastScrollSpeed = 1;
|
||||||
|
|
||||||
|
foreach (HitObject hitObject in original.HitObjects)
|
||||||
|
{
|
||||||
|
double nextScrollSpeed = hitObject.DifficultyControlPoint.SliderVelocity;
|
||||||
|
|
||||||
|
if (!Precision.AlmostEquals(lastScrollSpeed, nextScrollSpeed))
|
||||||
|
{
|
||||||
|
EffectControlPoint currentControlPoint = converted.ControlPointInfo.EffectPointAt(hitObject.StartTime);
|
||||||
|
|
||||||
|
if (Precision.AlmostEquals(currentControlPoint.Time, hitObject.StartTime))
|
||||||
|
currentControlPoint.ScrollSpeed = nextScrollSpeed;
|
||||||
|
else
|
||||||
|
converted.ControlPointInfo.Add(hitObject.StartTime, new EffectControlPoint { ScrollSpeed = nextScrollSpeed });
|
||||||
|
|
||||||
|
lastScrollSpeed = nextScrollSpeed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (original.BeatmapInfo.Ruleset.OnlineID == 3)
|
if (original.BeatmapInfo.Ruleset.OnlineID == 3)
|
||||||
{
|
{
|
||||||
// Post processing step to transform mania hit objects with the same start time into strong hits
|
// Post processing step to transform mania hit objects with the same start time into strong hits
|
||||||
|
@ -175,7 +175,7 @@ namespace osu.Game.Tests.Beatmaps.Formats
|
|||||||
Assert.AreEqual(4, controlPoints.TimingPoints.Count);
|
Assert.AreEqual(4, controlPoints.TimingPoints.Count);
|
||||||
Assert.AreEqual(5, controlPoints.DifficultyPoints.Count);
|
Assert.AreEqual(5, controlPoints.DifficultyPoints.Count);
|
||||||
Assert.AreEqual(34, controlPoints.SamplePoints.Count);
|
Assert.AreEqual(34, controlPoints.SamplePoints.Count);
|
||||||
Assert.AreEqual(13, controlPoints.EffectPoints.Count);
|
Assert.AreEqual(8, controlPoints.EffectPoints.Count);
|
||||||
|
|
||||||
var timingPoint = controlPoints.TimingPointAt(0);
|
var timingPoint = controlPoints.TimingPointAt(0);
|
||||||
Assert.AreEqual(956, timingPoint.Time);
|
Assert.AreEqual(956, timingPoint.Time);
|
||||||
|
@ -67,8 +67,8 @@ namespace osu.Game.Tests.Visual.Editing
|
|||||||
InputManager.Click(MouseButton.Left);
|
InputManager.Click(MouseButton.Left);
|
||||||
});
|
});
|
||||||
|
|
||||||
AddUntilStep("Selection changed", () => timingScreen.SelectedGroup.Value.Time == 37560);
|
AddUntilStep("Selection changed", () => timingScreen.SelectedGroup.Value.Time == 54670);
|
||||||
AddUntilStep("Ensure seeked to correct time", () => EditorClock.CurrentTimeAccurate == 37560);
|
AddUntilStep("Ensure seeked to correct time", () => EditorClock.CurrentTimeAccurate == 54670);
|
||||||
|
|
||||||
AddStep("Seek to just before next point", () => EditorClock.Seek(69000));
|
AddStep("Seek to just before next point", () => EditorClock.Seek(69000));
|
||||||
AddStep("Start clock", () => EditorClock.Start());
|
AddStep("Start clock", () => EditorClock.Start());
|
||||||
@ -85,8 +85,8 @@ namespace osu.Game.Tests.Visual.Editing
|
|||||||
InputManager.Click(MouseButton.Left);
|
InputManager.Click(MouseButton.Left);
|
||||||
});
|
});
|
||||||
|
|
||||||
AddUntilStep("Selection changed", () => timingScreen.SelectedGroup.Value.Time == 37560);
|
AddUntilStep("Selection changed", () => timingScreen.SelectedGroup.Value.Time == 54670);
|
||||||
AddUntilStep("Ensure seeked to correct time", () => EditorClock.CurrentTimeAccurate == 37560);
|
AddUntilStep("Ensure seeked to correct time", () => EditorClock.CurrentTimeAccurate == 54670);
|
||||||
|
|
||||||
AddStep("Seek to later", () => EditorClock.Seek(80000));
|
AddStep("Seek to later", () => EditorClock.Seek(80000));
|
||||||
AddUntilStep("Selection changed", () => timingScreen.SelectedGroup.Value.Time == 69670);
|
AddUntilStep("Selection changed", () => timingScreen.SelectedGroup.Value.Time == 69670);
|
||||||
|
@ -448,9 +448,14 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
{
|
{
|
||||||
KiaiMode = kiaiMode,
|
KiaiMode = kiaiMode,
|
||||||
OmitFirstBarLine = omitFirstBarSignature,
|
OmitFirstBarLine = omitFirstBarSignature,
|
||||||
ScrollSpeed = speedMultiplier,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int onlineRulesetID = beatmap.BeatmapInfo.Ruleset.OnlineID;
|
||||||
|
|
||||||
|
// osu!taiko and osu!mania use effect points rather than difficulty points for scroll speed adjustments.
|
||||||
|
if (onlineRulesetID == 1 || onlineRulesetID == 3)
|
||||||
|
effectPoint.ScrollSpeed = speedMultiplier;
|
||||||
|
|
||||||
addControlPoint(time, effectPoint, timingChange);
|
addControlPoint(time, effectPoint, timingChange);
|
||||||
|
|
||||||
addControlPoint(time, new LegacySampleControlPoint
|
addControlPoint(time, new LegacySampleControlPoint
|
||||||
|
@ -10,7 +10,6 @@ using System.IO;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using osu.Framework.Utils;
|
|
||||||
using osu.Game.Audio;
|
using osu.Game.Audio;
|
||||||
using osu.Game.Beatmaps.ControlPoints;
|
using osu.Game.Beatmaps.ControlPoints;
|
||||||
using osu.Game.Beatmaps.Legacy;
|
using osu.Game.Beatmaps.Legacy;
|
||||||
@ -186,17 +185,17 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
SampleControlPoint lastRelevantSamplePoint = null;
|
SampleControlPoint lastRelevantSamplePoint = null;
|
||||||
DifficultyControlPoint lastRelevantDifficultyPoint = null;
|
DifficultyControlPoint lastRelevantDifficultyPoint = null;
|
||||||
|
|
||||||
|
// In osu!taiko and osu!mania, a scroll speed is stored as "slider velocity" in legacy formats.
|
||||||
|
// In that case, a scrolling speed change is a global effect and per-hit object difficulty control points are ignored.
|
||||||
|
bool scrollSpeedEncodedAsSliderVelocity = onlineRulesetID == 1 || onlineRulesetID == 3;
|
||||||
|
|
||||||
// iterate over hitobjects and pull out all required sample and difficulty changes
|
// iterate over hitobjects and pull out all required sample and difficulty changes
|
||||||
extractDifficultyControlPoints(beatmap.HitObjects);
|
extractDifficultyControlPoints(beatmap.HitObjects);
|
||||||
extractSampleControlPoints(beatmap.HitObjects);
|
extractSampleControlPoints(beatmap.HitObjects);
|
||||||
|
|
||||||
foreach (var point in legacyControlPoints.EffectPoints)
|
if (scrollSpeedEncodedAsSliderVelocity)
|
||||||
{
|
{
|
||||||
DifficultyControlPoint difficultyPoint = legacyControlPoints.DifficultyPointAt(point.Time);
|
foreach (var point in legacyControlPoints.EffectPoints)
|
||||||
|
|
||||||
if (Precision.AlmostEquals(difficultyPoint.SliderVelocity, point.ScrollSpeed, acceptableDifference: point.ScrollSpeedBindable.Precision))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
legacyControlPoints.Add(point.Time, new DifficultyControlPoint { SliderVelocity = point.ScrollSpeed });
|
legacyControlPoints.Add(point.Time, new DifficultyControlPoint { SliderVelocity = point.ScrollSpeed });
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,6 +244,9 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
|
|
||||||
IEnumerable<DifficultyControlPoint> collectDifficultyControlPoints(IEnumerable<HitObject> hitObjects)
|
IEnumerable<DifficultyControlPoint> collectDifficultyControlPoints(IEnumerable<HitObject> hitObjects)
|
||||||
{
|
{
|
||||||
|
if (scrollSpeedEncodedAsSliderVelocity)
|
||||||
|
yield break;
|
||||||
|
|
||||||
foreach (var hitObject in hitObjects)
|
foreach (var hitObject in hitObjects)
|
||||||
yield return hitObject.DifficultyControlPoint;
|
yield return hitObject.DifficultyControlPoint;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user