mirror of
https://github.com/osukey/osukey.git
synced 2025-07-02 08:49:59 +09:00
Populate new approach rate where required
This commit is contained in:
@ -94,7 +94,7 @@ namespace osu.Game.Rulesets.Mania.UI
|
|||||||
|
|
||||||
// For non-mania beatmap, speed changes should only happen through timing points
|
// For non-mania beatmap, speed changes should only happen through timing points
|
||||||
if (!isForCurrentRuleset)
|
if (!isForCurrentRuleset)
|
||||||
p.DifficultyPoint = new DifficultyControlPoint();
|
p.EffectPoint = new EffectControlPoint();
|
||||||
}
|
}
|
||||||
|
|
||||||
BarLines.ForEach(Playfield.Add);
|
BarLines.ForEach(Playfield.Add);
|
||||||
|
@ -93,9 +93,9 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
|
|
||||||
private IList<MultiplierControlPoint> testControlPoints => new List<MultiplierControlPoint>
|
private IList<MultiplierControlPoint> testControlPoints => new List<MultiplierControlPoint>
|
||||||
{
|
{
|
||||||
new MultiplierControlPoint(time_range) { DifficultyPoint = { SliderVelocity = 1.25 } },
|
new MultiplierControlPoint(time_range) { EffectPoint = { ApproachRate = 1.25 } },
|
||||||
new MultiplierControlPoint(1.5 * time_range) { DifficultyPoint = { SliderVelocity = 1 } },
|
new MultiplierControlPoint(1.5 * time_range) { EffectPoint = { ApproachRate = 1 } },
|
||||||
new MultiplierControlPoint(2 * time_range) { DifficultyPoint = { SliderVelocity = 1.5 } }
|
new MultiplierControlPoint(2 * time_range) { EffectPoint = { ApproachRate = 1.5 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -26,7 +26,7 @@ namespace osu.Game.Beatmaps
|
|||||||
set => approachRate = value;
|
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;
|
public double SliderTickRate { get; set; } = 1;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -387,6 +387,7 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
{
|
{
|
||||||
KiaiMode = kiaiMode,
|
KiaiMode = kiaiMode,
|
||||||
OmitFirstBarLine = omitFirstBarSignature,
|
OmitFirstBarLine = omitFirstBarSignature,
|
||||||
|
ApproachRate = speedMultiplier,
|
||||||
}, timingChange);
|
}, timingChange);
|
||||||
|
|
||||||
addControlPoint(time, new LegacySampleControlPoint
|
addControlPoint(time, new LegacySampleControlPoint
|
||||||
|
@ -184,7 +184,7 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
SampleControlPoint lastRelevantSamplePoint = null;
|
SampleControlPoint lastRelevantSamplePoint = null;
|
||||||
DifficultyControlPoint lastRelevantDifficultyPoint = 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)
|
foreach (var h in beatmap.HitObjects)
|
||||||
{
|
{
|
||||||
var hSamplePoint = h.SampleControlPoint;
|
var hSamplePoint = h.SampleControlPoint;
|
||||||
@ -202,6 +202,8 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
lastRelevantSamplePoint = hSamplePoint;
|
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)
|
foreach (var group in beatmap.ControlPointInfo.Groups)
|
||||||
|
@ -7,7 +7,7 @@ using osu.Game.Beatmaps.ControlPoints;
|
|||||||
namespace osu.Game.Rulesets.Timing
|
namespace osu.Game.Rulesets.Timing
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <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>
|
/// </summary>
|
||||||
public class MultiplierControlPoint : IComparable<MultiplierControlPoint>
|
public class MultiplierControlPoint : IComparable<MultiplierControlPoint>
|
||||||
{
|
{
|
||||||
@ -19,7 +19,7 @@ namespace osu.Game.Rulesets.Timing
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// The aggregate multiplier which this <see cref="MultiplierControlPoint"/> provides.
|
/// The aggregate multiplier which this <see cref="MultiplierControlPoint"/> provides.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double Multiplier => Velocity * DifficultyPoint.SliderVelocity * BaseBeatLength / TimingPoint.BeatLength;
|
public double Multiplier => Velocity * EffectPoint.ApproachRate * BaseBeatLength / TimingPoint.BeatLength;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The base beat length to scale the <see cref="TimingPoint"/> provided multiplier relative to.
|
/// The base beat length to scale the <see cref="TimingPoint"/> provided multiplier relative to.
|
||||||
@ -38,9 +38,9 @@ namespace osu.Game.Rulesets.Timing
|
|||||||
public TimingControlPoint TimingPoint = new TimingControlPoint();
|
public TimingControlPoint TimingPoint = new TimingControlPoint();
|
||||||
|
|
||||||
/// <summary>
|
/// <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>
|
/// </summary>
|
||||||
public DifficultyControlPoint DifficultyPoint = new DifficultyControlPoint();
|
public EffectControlPoint EffectPoint = new EffectControlPoint();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a <see cref="MultiplierControlPoint"/>. This is required for JSON serialization
|
/// Creates a <see cref="MultiplierControlPoint"/>. This is required for JSON serialization
|
||||||
|
@ -139,27 +139,26 @@ namespace osu.Game.Rulesets.UI.Scrolling
|
|||||||
|
|
||||||
// Merge sequences of timing and difficulty control points to create the aggregate "multiplier" control point
|
// Merge sequences of timing and difficulty control points to create the aggregate "multiplier" control point
|
||||||
var lastTimingPoint = new TimingControlPoint();
|
var lastTimingPoint = new TimingControlPoint();
|
||||||
var lastDifficultyPoint = new DifficultyControlPoint();
|
var lastEffectPoint = new EffectControlPoint();
|
||||||
var allPoints = new SortedList<ControlPoint>(Comparer<ControlPoint>.Default);
|
var allPoints = new SortedList<ControlPoint>(Comparer<ControlPoint>.Default);
|
||||||
allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints);
|
|
||||||
|
|
||||||
// TODO: fix
|
allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints);
|
||||||
//allPoints.AddRange(Beatmap.ControlPointInfo.DifficultyPoints);
|
allPoints.AddRange(Beatmap.ControlPointInfo.EffectPoints);
|
||||||
|
|
||||||
// Generate the timing points, making non-timing changes use the previous timing change and vice-versa
|
// Generate the timing points, making non-timing changes use the previous timing change and vice-versa
|
||||||
var timingChanges = allPoints.Select(c =>
|
var timingChanges = allPoints.Select(c =>
|
||||||
{
|
{
|
||||||
if (c is TimingControlPoint timingPoint)
|
if (c is TimingControlPoint timingPoint)
|
||||||
lastTimingPoint = timingPoint;
|
lastTimingPoint = timingPoint;
|
||||||
else if (c is DifficultyControlPoint difficultyPoint)
|
else if (c is EffectControlPoint difficultyPoint)
|
||||||
lastDifficultyPoint = difficultyPoint;
|
lastEffectPoint = difficultyPoint;
|
||||||
|
|
||||||
return new MultiplierControlPoint(c.Time)
|
return new MultiplierControlPoint(c.Time)
|
||||||
{
|
{
|
||||||
Velocity = Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier,
|
Velocity = Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier,
|
||||||
BaseBeatLength = baseBeatLength,
|
BaseBeatLength = baseBeatLength,
|
||||||
TimingPoint = lastTimingPoint,
|
TimingPoint = lastTimingPoint,
|
||||||
DifficultyPoint = lastDifficultyPoint
|
EffectPoint = lastEffectPoint
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user