1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-26 12:45:09 +08:00

Completely ignore spinners from note lock

This commit is contained in:
smoogipoo 2020-03-30 17:00:53 +09:00
parent 744f6c3ca7
commit 796976db3c

View File

@ -90,7 +90,14 @@ namespace osu.Game.Rulesets.Osu.UI
private bool checkHittable(DrawableOsuHitObject osuHitObject)
{
var lastObject = HitObjectContainer.AliveObjects.GetPrevious(osuHitObject);
DrawableHitObject lastObject = osuHitObject;
// Get the last hitobject that contributes to note lock
while ((lastObject = HitObjectContainer.AliveObjects.GetPrevious(lastObject)) != null)
{
if (contributesToNoteLock(lastObject.HitObject))
break;
}
// If there is no previous object alive, allow the hit.
if (lastObject == null)
@ -166,10 +173,19 @@ namespace osu.Game.Rulesets.Osu.UI
}
/// <summary>
/// Whether a <see cref="HitObject"/> can be missed and causes other hitobjects to be missed during notelock.
/// Whether a <see cref="HitObject"/> is contributes to note lock.
/// Future contributing <see cref="HitObject"/>s will not be hittable until the start time of the last contributing <see cref="HitObject"/> is reached.
/// </summary>
/// <param name="hitObject">The <see cref="HitObject"/> to test.</param>
/// <returns>Whether <paramref name="hitObject"/> contributes to notelock misses.</returns>
/// <returns>Whether <paramref name="hitObject"/> causes note lock.</returns>
private bool contributesToNoteLock(HitObject hitObject)
=> hitObject is HitCircle || hitObject is Slider;
/// <summary>
/// Whether a <see cref="HitObject"/> can be missed and causes other <see cref="HitObject"/>s to be missed when hit out-of-order during note lock.
/// </summary>
/// <param name="hitObject">The <see cref="HitObject"/> to test.</param>
/// <returns>Whether <paramref name="hitObject"/> contributes to note lock misses.</returns>
private bool causesNoteLockMisses(HitObject hitObject)
=> hitObject is HitCircle && !(hitObject is SliderTailCircle);