Populate new approach rate where required

This commit is contained in:
Dean Herbert 2021-09-01 18:19:25 +09:00
parent d4e5a612ea
commit d587dc6203
7 changed files with 19 additions and 17 deletions

View File

@ -94,7 +94,7 @@ private void load()
// For non-mania beatmap, speed changes should only happen through timing points
if (!isForCurrentRuleset)
p.DifficultyPoint = new DifficultyControlPoint();
p.EffectPoint = new EffectControlPoint();
}
BarLines.ForEach(Playfield.Add);

View File

@ -93,9 +93,9 @@ private void setUpHitObjects() => AddStep("set up hit objects", () =>
private IList<MultiplierControlPoint> testControlPoints => new List<MultiplierControlPoint>
{
new MultiplierControlPoint(time_range) { DifficultyPoint = { SliderVelocity = 1.25 } },
new MultiplierControlPoint(1.5 * time_range) { DifficultyPoint = { SliderVelocity = 1 } },
new MultiplierControlPoint(2 * time_range) { DifficultyPoint = { SliderVelocity = 1.5 } }
new MultiplierControlPoint(time_range) { EffectPoint = { ApproachRate = 1.25 } },
new MultiplierControlPoint(1.5 * time_range) { EffectPoint = { ApproachRate = 1 } },
new MultiplierControlPoint(2 * time_range) { EffectPoint = { ApproachRate = 1.5 } }
};
[Test]

View File

@ -26,7 +26,7 @@ public float ApproachRate
set => approachRate = value;
}
public double SliderMultiplier { get; set; } = 1;
public double SliderMultiplier { get; set; } = 1; // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA this needs to be renamed or removed or something.
public double SliderTickRate { get; set; } = 1;
/// <summary>

View File

@ -387,6 +387,7 @@ private void handleTimingPoint(string line)
{
KiaiMode = kiaiMode,
OmitFirstBarLine = omitFirstBarSignature,
ApproachRate = speedMultiplier,
}, timingChange);
addControlPoint(time, new LegacySampleControlPoint

View File

@ -184,7 +184,7 @@ private void handleControlPoints(TextWriter writer)
SampleControlPoint lastRelevantSamplePoint = null;
DifficultyControlPoint lastRelevantDifficultyPoint = null;
// iterate over hitobjects and pull out all required sample changes
// iterate over hitobjects and pull out all required sample and difficulty changes
foreach (var h in beatmap.HitObjects)
{
var hSamplePoint = h.SampleControlPoint;
@ -202,6 +202,8 @@ private void handleControlPoints(TextWriter writer)
lastRelevantSamplePoint = hSamplePoint;
}
}
// TODO: we need to pull out approach rate from EffectControlPoint and shove it in with difficulty points where necessary...
}
foreach (var group in beatmap.ControlPointInfo.Groups)

View File

@ -7,7 +7,7 @@
namespace osu.Game.Rulesets.Timing
{
/// <summary>
/// A control point which adds an aggregated multiplier based on the provided <see cref="TimingPoint"/>'s BeatLength and <see cref="DifficultyPoint"/>'s SpeedMultiplier.
/// A control point which adds an aggregated multiplier based on the provided <see cref="TimingPoint"/>'s BeatLength and <see cref="EffectPoint"/>'s SpeedMultiplier.
/// </summary>
public class MultiplierControlPoint : IComparable<MultiplierControlPoint>
{
@ -19,7 +19,7 @@ public class MultiplierControlPoint : IComparable<MultiplierControlPoint>
/// <summary>
/// The aggregate multiplier which this <see cref="MultiplierControlPoint"/> provides.
/// </summary>
public double Multiplier => Velocity * DifficultyPoint.SliderVelocity * BaseBeatLength / TimingPoint.BeatLength;
public double Multiplier => Velocity * EffectPoint.ApproachRate * BaseBeatLength / TimingPoint.BeatLength;
/// <summary>
/// The base beat length to scale the <see cref="TimingPoint"/> provided multiplier relative to.
@ -38,9 +38,9 @@ public class MultiplierControlPoint : IComparable<MultiplierControlPoint>
public TimingControlPoint TimingPoint = new TimingControlPoint();
/// <summary>
/// The <see cref="DifficultyControlPoint"/> that provides additional difficulty information for this <see cref="MultiplierControlPoint"/>.
/// The <see cref="EffectControlPoint"/> that provides additional difficulty information for this <see cref="MultiplierControlPoint"/>.
/// </summary>
public DifficultyControlPoint DifficultyPoint = new DifficultyControlPoint();
public EffectControlPoint EffectPoint = new EffectControlPoint();
/// <summary>
/// Creates a <see cref="MultiplierControlPoint"/>. This is required for JSON serialization

View File

@ -139,27 +139,26 @@ private void load()
// Merge sequences of timing and difficulty control points to create the aggregate "multiplier" control point
var lastTimingPoint = new TimingControlPoint();
var lastDifficultyPoint = new DifficultyControlPoint();
var lastEffectPoint = new EffectControlPoint();
var allPoints = new SortedList<ControlPoint>(Comparer<ControlPoint>.Default);
allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints);
// TODO: fix
//allPoints.AddRange(Beatmap.ControlPointInfo.DifficultyPoints);
allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints);
allPoints.AddRange(Beatmap.ControlPointInfo.EffectPoints);
// Generate the timing points, making non-timing changes use the previous timing change and vice-versa
var timingChanges = allPoints.Select(c =>
{
if (c is TimingControlPoint timingPoint)
lastTimingPoint = timingPoint;
else if (c is DifficultyControlPoint difficultyPoint)
lastDifficultyPoint = difficultyPoint;
else if (c is EffectControlPoint difficultyPoint)
lastEffectPoint = difficultyPoint;
return new MultiplierControlPoint(c.Time)
{
Velocity = Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier,
BaseBeatLength = baseBeatLength,
TimingPoint = lastTimingPoint,
DifficultyPoint = lastDifficultyPoint
EffectPoint = lastEffectPoint
};
});