mirror of https://github.com/ppy/osu
Populate new approach rate where required
This commit is contained in:
parent
d4e5a612ea
commit
d587dc6203
|
@ -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);
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -387,6 +387,7 @@ private void handleTimingPoint(string line)
|
|||
{
|
||||
KiaiMode = kiaiMode,
|
||||
OmitFirstBarLine = omitFirstBarSignature,
|
||||
ApproachRate = speedMultiplier,
|
||||
}, timingChange);
|
||||
|
||||
addControlPoint(time, new LegacySampleControlPoint
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
};
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in New Issue