mirror of
https://github.com/ppy/osu.git
synced 2024-12-05 10:23:20 +08:00
Move StackLeniency
out of BeatmapInfo
This commit is contained in:
parent
4339e2dc4a
commit
0a4560a03e
@ -83,10 +83,7 @@ namespace osu.Game.Rulesets.Osu.Tests.Mods
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
BeatmapInfo =
|
StackLeniency = 0,
|
||||||
{
|
|
||||||
StackLeniency = 0,
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
ReplayFrames = new List<ReplayFrame>
|
ReplayFrames = new List<ReplayFrame>
|
||||||
{
|
{
|
||||||
|
@ -74,12 +74,12 @@ namespace osu.Game.Rulesets.Osu.Tests.Mods
|
|||||||
{
|
{
|
||||||
BeatmapInfo = new BeatmapInfo
|
BeatmapInfo = new BeatmapInfo
|
||||||
{
|
{
|
||||||
StackLeniency = 0,
|
|
||||||
Difficulty = new BeatmapDifficulty
|
Difficulty = new BeatmapDifficulty
|
||||||
{
|
{
|
||||||
ApproachRate = 8.5f
|
ApproachRate = 8.5f
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
StackLeniency = 0,
|
||||||
ControlPointInfo = controlPointInfo
|
ControlPointInfo = controlPointInfo
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -465,7 +465,7 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
private void performTest(List<ReplayFrame> frames, Beatmap<OsuHitObject> beatmap)
|
private void performTest(List<ReplayFrame> frames, Beatmap<OsuHitObject> beatmap)
|
||||||
{
|
{
|
||||||
beatmap.BeatmapInfo.Ruleset = new OsuRuleset().RulesetInfo;
|
beatmap.BeatmapInfo.Ruleset = new OsuRuleset().RulesetInfo;
|
||||||
beatmap.BeatmapInfo.StackLeniency = 0;
|
beatmap.StackLeniency = 0;
|
||||||
beatmap.BeatmapInfo.Difficulty = new BeatmapDifficulty
|
beatmap.BeatmapInfo.Difficulty = new BeatmapDifficulty
|
||||||
{
|
{
|
||||||
SliderMultiplier = 4,
|
SliderMultiplier = 4,
|
||||||
|
@ -51,13 +51,13 @@ namespace osu.Game.Rulesets.Osu.Beatmaps
|
|||||||
h.StackHeight = 0;
|
h.StackHeight = 0;
|
||||||
|
|
||||||
if (Beatmap.BeatmapInfo.BeatmapVersion >= 6)
|
if (Beatmap.BeatmapInfo.BeatmapVersion >= 6)
|
||||||
applyStacking(Beatmap.BeatmapInfo, hitObjects, 0, hitObjects.Count - 1);
|
applyStacking(Beatmap, hitObjects, 0, hitObjects.Count - 1);
|
||||||
else
|
else
|
||||||
applyStackingOld(Beatmap.BeatmapInfo, hitObjects);
|
applyStackingOld(Beatmap, hitObjects);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyStacking(BeatmapInfo beatmapInfo, List<OsuHitObject> hitObjects, int startIndex, int endIndex)
|
private void applyStacking(IBeatmap beatmap, List<OsuHitObject> hitObjects, int startIndex, int endIndex)
|
||||||
{
|
{
|
||||||
ArgumentOutOfRangeException.ThrowIfGreaterThan(startIndex, endIndex);
|
ArgumentOutOfRangeException.ThrowIfGreaterThan(startIndex, endIndex);
|
||||||
ArgumentOutOfRangeException.ThrowIfNegative(startIndex);
|
ArgumentOutOfRangeException.ThrowIfNegative(startIndex);
|
||||||
@ -82,7 +82,7 @@ namespace osu.Game.Rulesets.Osu.Beatmaps
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
double endTime = stackBaseObject.GetEndTime();
|
double endTime = stackBaseObject.GetEndTime();
|
||||||
double stackThreshold = objectN.TimePreempt * beatmapInfo.StackLeniency;
|
double stackThreshold = objectN.TimePreempt * beatmap.StackLeniency;
|
||||||
|
|
||||||
if (objectN.StartTime - endTime > stackThreshold)
|
if (objectN.StartTime - endTime > stackThreshold)
|
||||||
// We are no longer within stacking range of the next object.
|
// We are no longer within stacking range of the next object.
|
||||||
@ -127,7 +127,7 @@ namespace osu.Game.Rulesets.Osu.Beatmaps
|
|||||||
OsuHitObject objectI = hitObjects[i];
|
OsuHitObject objectI = hitObjects[i];
|
||||||
if (objectI.StackHeight != 0 || objectI is Spinner) continue;
|
if (objectI.StackHeight != 0 || objectI is Spinner) continue;
|
||||||
|
|
||||||
double stackThreshold = objectI.TimePreempt * beatmapInfo.StackLeniency;
|
double stackThreshold = objectI.TimePreempt * beatmap.StackLeniency;
|
||||||
|
|
||||||
/* If this object is a hitcircle, then we enter this "special" case.
|
/* If this object is a hitcircle, then we enter this "special" case.
|
||||||
* It either ends with a stack of hitcircles only, or a stack of hitcircles that are underneath a slider.
|
* It either ends with a stack of hitcircles only, or a stack of hitcircles that are underneath a slider.
|
||||||
@ -209,7 +209,7 @@ namespace osu.Game.Rulesets.Osu.Beatmaps
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyStackingOld(BeatmapInfo beatmapInfo, List<OsuHitObject> hitObjects)
|
private void applyStackingOld(IBeatmap beatmap, List<OsuHitObject> hitObjects)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < hitObjects.Count; i++)
|
for (int i = 0; i < hitObjects.Count; i++)
|
||||||
{
|
{
|
||||||
@ -223,7 +223,7 @@ namespace osu.Game.Rulesets.Osu.Beatmaps
|
|||||||
|
|
||||||
for (int j = i + 1; j < hitObjects.Count; j++)
|
for (int j = i + 1; j < hitObjects.Count; j++)
|
||||||
{
|
{
|
||||||
double stackThreshold = hitObjects[i].TimePreempt * beatmapInfo.StackLeniency;
|
double stackThreshold = hitObjects[i].TimePreempt * beatmap.StackLeniency;
|
||||||
|
|
||||||
if (hitObjects[j].StartTime - stackThreshold > startTime)
|
if (hitObjects[j].StartTime - stackThreshold > startTime)
|
||||||
break;
|
break;
|
||||||
|
@ -28,7 +28,7 @@ namespace osu.Game.Rulesets.Osu.Edit.Setup
|
|||||||
{
|
{
|
||||||
Label = "Stack Leniency",
|
Label = "Stack Leniency",
|
||||||
Description = "In play mode, osu! automatically stacks notes which occur at the same location. Increasing this value means it is more likely to snap notes of further time-distance.",
|
Description = "In play mode, osu! automatically stacks notes which occur at the same location. Increasing this value means it is more likely to snap notes of further time-distance.",
|
||||||
Current = new BindableFloat(Beatmap.BeatmapInfo.StackLeniency)
|
Current = new BindableFloat(Beatmap.StackLeniency)
|
||||||
{
|
{
|
||||||
Default = 0.7f,
|
Default = 0.7f,
|
||||||
MinValue = 0,
|
MinValue = 0,
|
||||||
@ -48,7 +48,7 @@ namespace osu.Game.Rulesets.Osu.Edit.Setup
|
|||||||
|
|
||||||
private void updateBeatmap()
|
private void updateBeatmap()
|
||||||
{
|
{
|
||||||
Beatmap.BeatmapInfo.StackLeniency = stackLeniency.Current.Value;
|
Beatmap.StackLeniency = stackLeniency.Current.Value;
|
||||||
Beatmap.UpdateAllHitObjects();
|
Beatmap.UpdateAllHitObjects();
|
||||||
Beatmap.SaveState();
|
Beatmap.SaveState();
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ namespace osu.Game.Tests.Beatmaps.Formats
|
|||||||
Assert.AreEqual("03. Renatus - Soleily 192kbps.mp3", metadata.AudioFile);
|
Assert.AreEqual("03. Renatus - Soleily 192kbps.mp3", metadata.AudioFile);
|
||||||
Assert.AreEqual(0, beatmap.AudioLeadIn);
|
Assert.AreEqual(0, beatmap.AudioLeadIn);
|
||||||
Assert.AreEqual(164471, metadata.PreviewTime);
|
Assert.AreEqual(164471, metadata.PreviewTime);
|
||||||
Assert.AreEqual(0.7f, beatmapInfo.StackLeniency);
|
Assert.AreEqual(0.7f, beatmap.StackLeniency);
|
||||||
Assert.IsTrue(beatmapInfo.Ruleset.OnlineID == 0);
|
Assert.IsTrue(beatmapInfo.Ruleset.OnlineID == 0);
|
||||||
Assert.IsFalse(beatmapInfo.LetterboxInBreaks);
|
Assert.IsFalse(beatmapInfo.LetterboxInBreaks);
|
||||||
Assert.IsFalse(beatmapInfo.SpecialStyle);
|
Assert.IsFalse(beatmapInfo.SpecialStyle);
|
||||||
@ -951,7 +951,7 @@ namespace osu.Game.Tests.Beatmaps.Formats
|
|||||||
Assert.Multiple(() =>
|
Assert.Multiple(() =>
|
||||||
{
|
{
|
||||||
Assert.That(decoded.AudioLeadIn, Is.EqualTo(0));
|
Assert.That(decoded.AudioLeadIn, Is.EqualTo(0));
|
||||||
Assert.That(decoded.BeatmapInfo.StackLeniency, Is.EqualTo(0.7f));
|
Assert.That(decoded.StackLeniency, Is.EqualTo(0.7f));
|
||||||
Assert.That(decoded.BeatmapInfo.SpecialStyle, Is.False);
|
Assert.That(decoded.BeatmapInfo.SpecialStyle, Is.False);
|
||||||
Assert.That(decoded.BeatmapInfo.LetterboxInBreaks, Is.False);
|
Assert.That(decoded.BeatmapInfo.LetterboxInBreaks, Is.False);
|
||||||
Assert.That(decoded.BeatmapInfo.WidescreenStoryboard, Is.False);
|
Assert.That(decoded.BeatmapInfo.WidescreenStoryboard, Is.False);
|
||||||
|
@ -52,7 +52,7 @@ namespace osu.Game.Tests.Beatmaps.Formats
|
|||||||
var beatmap = decodeAsJson(normal);
|
var beatmap = decodeAsJson(normal);
|
||||||
var beatmapInfo = beatmap.BeatmapInfo;
|
var beatmapInfo = beatmap.BeatmapInfo;
|
||||||
Assert.AreEqual(0, beatmap.AudioLeadIn);
|
Assert.AreEqual(0, beatmap.AudioLeadIn);
|
||||||
Assert.AreEqual(0.7f, beatmapInfo.StackLeniency);
|
Assert.AreEqual(0.7f, beatmap.StackLeniency);
|
||||||
Assert.AreEqual(false, beatmapInfo.SpecialStyle);
|
Assert.AreEqual(false, beatmapInfo.SpecialStyle);
|
||||||
Assert.IsTrue(beatmapInfo.Ruleset.OnlineID == 0);
|
Assert.IsTrue(beatmapInfo.Ruleset.OnlineID == 0);
|
||||||
Assert.AreEqual(false, beatmapInfo.LetterboxInBreaks);
|
Assert.AreEqual(false, beatmapInfo.LetterboxInBreaks);
|
||||||
|
@ -116,6 +116,8 @@ namespace osu.Game.Beatmaps
|
|||||||
|
|
||||||
public double AudioLeadIn { get; set; }
|
public double AudioLeadIn { get; set; }
|
||||||
|
|
||||||
|
public float StackLeniency { get; set; } = 0.7f;
|
||||||
|
|
||||||
IBeatmap IBeatmap.Clone() => Clone();
|
IBeatmap IBeatmap.Clone() => Clone();
|
||||||
|
|
||||||
public Beatmap<T> Clone() => (Beatmap<T>)MemberwiseClone();
|
public Beatmap<T> Clone() => (Beatmap<T>)MemberwiseClone();
|
||||||
|
@ -68,6 +68,7 @@ namespace osu.Game.Beatmaps
|
|||||||
beatmap.Breaks = original.Breaks;
|
beatmap.Breaks = original.Breaks;
|
||||||
beatmap.UnhandledEventLines = original.UnhandledEventLines;
|
beatmap.UnhandledEventLines = original.UnhandledEventLines;
|
||||||
beatmap.AudioLeadIn = original.AudioLeadIn;
|
beatmap.AudioLeadIn = original.AudioLeadIn;
|
||||||
|
beatmap.StackLeniency = original.StackLeniency;
|
||||||
|
|
||||||
return beatmap;
|
return beatmap;
|
||||||
}
|
}
|
||||||
|
@ -414,7 +414,6 @@ namespace osu.Game.Beatmaps
|
|||||||
Hash = hash,
|
Hash = hash,
|
||||||
DifficultyName = decodedInfo.DifficultyName,
|
DifficultyName = decodedInfo.DifficultyName,
|
||||||
OnlineID = decodedInfo.OnlineID,
|
OnlineID = decodedInfo.OnlineID,
|
||||||
StackLeniency = decodedInfo.StackLeniency,
|
|
||||||
SpecialStyle = decodedInfo.SpecialStyle,
|
SpecialStyle = decodedInfo.SpecialStyle,
|
||||||
LetterboxInBreaks = decodedInfo.LetterboxInBreaks,
|
LetterboxInBreaks = decodedInfo.LetterboxInBreaks,
|
||||||
WidescreenStoryboard = decodedInfo.WidescreenStoryboard,
|
WidescreenStoryboard = decodedInfo.WidescreenStoryboard,
|
||||||
|
@ -138,8 +138,6 @@ namespace osu.Game.Beatmaps
|
|||||||
|
|
||||||
#region Properties we may not want persisted (but also maybe no harm?)
|
#region Properties we may not want persisted (but also maybe no harm?)
|
||||||
|
|
||||||
public float StackLeniency { get; set; } = 0.7f;
|
|
||||||
|
|
||||||
public bool SpecialStyle { get; set; }
|
public bool SpecialStyle { get; set; }
|
||||||
|
|
||||||
public bool LetterboxInBreaks { get; set; }
|
public bool LetterboxInBreaks { get; set; }
|
||||||
|
@ -255,7 +255,7 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case @"StackLeniency":
|
case @"StackLeniency":
|
||||||
beatmap.BeatmapInfo.StackLeniency = Parsing.ParseFloat(pair.Value);
|
beatmap.StackLeniency = Parsing.ParseFloat(pair.Value);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case @"Mode":
|
case @"Mode":
|
||||||
|
@ -84,7 +84,7 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
writer.WriteLine(FormattableString.Invariant($"Countdown: {(int)beatmap.BeatmapInfo.Countdown}"));
|
writer.WriteLine(FormattableString.Invariant($"Countdown: {(int)beatmap.BeatmapInfo.Countdown}"));
|
||||||
writer.WriteLine(FormattableString.Invariant(
|
writer.WriteLine(FormattableString.Invariant(
|
||||||
$"SampleSet: {toLegacySampleBank(((beatmap.ControlPointInfo as LegacyControlPointInfo)?.SamplePoints.FirstOrDefault() ?? SampleControlPoint.DEFAULT).SampleBank)}"));
|
$"SampleSet: {toLegacySampleBank(((beatmap.ControlPointInfo as LegacyControlPointInfo)?.SamplePoints.FirstOrDefault() ?? SampleControlPoint.DEFAULT).SampleBank)}"));
|
||||||
writer.WriteLine(FormattableString.Invariant($"StackLeniency: {beatmap.BeatmapInfo.StackLeniency}"));
|
writer.WriteLine(FormattableString.Invariant($"StackLeniency: {beatmap.StackLeniency}"));
|
||||||
writer.WriteLine(FormattableString.Invariant($"Mode: {onlineRulesetID}"));
|
writer.WriteLine(FormattableString.Invariant($"Mode: {onlineRulesetID}"));
|
||||||
writer.WriteLine(FormattableString.Invariant($"LetterboxInBreaks: {(beatmap.BeatmapInfo.LetterboxInBreaks ? '1' : '0')}"));
|
writer.WriteLine(FormattableString.Invariant($"LetterboxInBreaks: {(beatmap.BeatmapInfo.LetterboxInBreaks ? '1' : '0')}"));
|
||||||
// if (beatmap.BeatmapInfo.UseSkinSprites)
|
// if (beatmap.BeatmapInfo.UseSkinSprites)
|
||||||
|
@ -70,6 +70,8 @@ namespace osu.Game.Beatmaps
|
|||||||
|
|
||||||
double AudioLeadIn { get; internal set; }
|
double AudioLeadIn { get; internal set; }
|
||||||
|
|
||||||
|
float StackLeniency { get; internal set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a shallow-clone of this beatmap and returns it.
|
/// Creates a shallow-clone of this beatmap and returns it.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -343,6 +343,12 @@ namespace osu.Game.Rulesets.Difficulty
|
|||||||
set => baseBeatmap.AudioLeadIn = value;
|
set => baseBeatmap.AudioLeadIn = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float StackLeniency
|
||||||
|
{
|
||||||
|
get => baseBeatmap.StackLeniency;
|
||||||
|
set => baseBeatmap.StackLeniency = value;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -190,6 +190,12 @@ namespace osu.Game.Screens.Edit
|
|||||||
set => PlayableBeatmap.AudioLeadIn = value;
|
set => PlayableBeatmap.AudioLeadIn = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float StackLeniency
|
||||||
|
{
|
||||||
|
get => PlayableBeatmap.StackLeniency;
|
||||||
|
set => PlayableBeatmap.StackLeniency = value;
|
||||||
|
}
|
||||||
|
|
||||||
public IBeatmap Clone() => (EditorBeatmap)MemberwiseClone();
|
public IBeatmap Clone() => (EditorBeatmap)MemberwiseClone();
|
||||||
|
|
||||||
private IList mutableHitObjects => (IList)PlayableBeatmap.HitObjects;
|
private IList mutableHitObjects => (IList)PlayableBeatmap.HitObjects;
|
||||||
|
Loading…
Reference in New Issue
Block a user