mirror of
https://github.com/ppy/osu.git
synced 2025-02-22 18:12:56 +08:00
Move MaximumJudgementOffset to HitObject
We want to access this property for computing lifetime
This commit is contained in:
parent
f7c4199a77
commit
11e1b22bf5
@ -69,8 +69,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private double? releaseTime;
|
private double? releaseTime;
|
||||||
|
|
||||||
public override double MaximumJudgementOffset => Tail.MaximumJudgementOffset;
|
|
||||||
|
|
||||||
public DrawableHoldNote()
|
public DrawableHoldNote()
|
||||||
: this(null)
|
: this(null)
|
||||||
{
|
{
|
||||||
|
@ -15,13 +15,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class DrawableHoldNoteTail : DrawableNote
|
public partial class DrawableHoldNoteTail : DrawableNote
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Lenience of release hit windows. This is to make cases where the hold note release
|
|
||||||
/// is timed alongside presses of other hit objects less awkward.
|
|
||||||
/// Todo: This shouldn't exist for non-LegacyBeatmapDecoder beatmaps
|
|
||||||
/// </summary>
|
|
||||||
private const double release_window_lenience = 1.5;
|
|
||||||
|
|
||||||
protected override ManiaSkinComponents Component => ManiaSkinComponents.HoldNoteTail;
|
protected override ManiaSkinComponents Component => ManiaSkinComponents.HoldNoteTail;
|
||||||
|
|
||||||
protected DrawableHoldNote HoldNote => (DrawableHoldNote)ParentHitObject;
|
protected DrawableHoldNote HoldNote => (DrawableHoldNote)ParentHitObject;
|
||||||
@ -40,14 +33,12 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
|
|||||||
|
|
||||||
public void UpdateResult() => base.UpdateResult(true);
|
public void UpdateResult() => base.UpdateResult(true);
|
||||||
|
|
||||||
public override double MaximumJudgementOffset => base.MaximumJudgementOffset * release_window_lenience;
|
|
||||||
|
|
||||||
protected override void CheckForResult(bool userTriggered, double timeOffset)
|
protected override void CheckForResult(bool userTriggered, double timeOffset)
|
||||||
{
|
{
|
||||||
Debug.Assert(HitObject.HitWindows != null);
|
Debug.Assert(HitObject.HitWindows != null);
|
||||||
|
|
||||||
// Factor in the release lenience
|
// Factor in the release lenience
|
||||||
timeOffset /= release_window_lenience;
|
timeOffset /= TailNote.RELEASE_WINDOW_LENIENCE;
|
||||||
|
|
||||||
if (!userTriggered)
|
if (!userTriggered)
|
||||||
{
|
{
|
||||||
|
@ -81,6 +81,8 @@ namespace osu.Game.Rulesets.Mania.Objects
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public TailNote Tail { get; private set; }
|
public TailNote Tail { get; private set; }
|
||||||
|
|
||||||
|
public override double MaximumJudgementOffset => Tail.MaximumJudgementOffset;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The time between ticks of this hold.
|
/// The time between ticks of this hold.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -10,6 +10,15 @@ namespace osu.Game.Rulesets.Mania.Objects
|
|||||||
{
|
{
|
||||||
public class TailNote : Note
|
public class TailNote : Note
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Lenience of release hit windows. This is to make cases where the hold note release
|
||||||
|
/// is timed alongside presses of other hit objects less awkward.
|
||||||
|
/// Todo: This shouldn't exist for non-LegacyBeatmapDecoder beatmaps
|
||||||
|
/// </summary>
|
||||||
|
public const double RELEASE_WINDOW_LENIENCE = 1.5;
|
||||||
|
|
||||||
public override Judgement CreateJudgement() => new ManiaJudgement();
|
public override Judgement CreateJudgement() => new ManiaJudgement();
|
||||||
|
|
||||||
|
public override double MaximumJudgementOffset => base.MaximumJudgementOffset * RELEASE_WINDOW_LENIENCE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,8 +25,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
Origin = Anchor.Centre;
|
Origin = Anchor.Centre;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override double MaximumJudgementOffset => DrawableSpinner.HitObject.Duration;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Apply a judgement result.
|
/// Apply a judgement result.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -71,8 +71,8 @@ namespace osu.Game.Rulesets.Osu.Objects
|
|||||||
double startTime = StartTime + (float)(i + 1) / totalSpins * Duration;
|
double startTime = StartTime + (float)(i + 1) / totalSpins * Duration;
|
||||||
|
|
||||||
AddNested(i < SpinsRequired
|
AddNested(i < SpinsRequired
|
||||||
? new SpinnerTick { StartTime = startTime }
|
? new SpinnerTick { StartTime = startTime, SpinnerDuration = Duration }
|
||||||
: new SpinnerBonusTick { StartTime = startTime });
|
: new SpinnerBonusTick { StartTime = startTime, SpinnerDuration = Duration });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,10 +11,17 @@ namespace osu.Game.Rulesets.Osu.Objects
|
|||||||
{
|
{
|
||||||
public class SpinnerTick : OsuHitObject
|
public class SpinnerTick : OsuHitObject
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Duration of the <see cref="Spinner"/> containing this spinner tick.
|
||||||
|
/// </summary>
|
||||||
|
public double SpinnerDuration { get; set; }
|
||||||
|
|
||||||
public override Judgement CreateJudgement() => new OsuSpinnerTickJudgement();
|
public override Judgement CreateJudgement() => new OsuSpinnerTickJudgement();
|
||||||
|
|
||||||
protected override HitWindows CreateHitWindows() => HitWindows.Empty;
|
protected override HitWindows CreateHitWindows() => HitWindows.Empty;
|
||||||
|
|
||||||
|
public override double MaximumJudgementOffset => SpinnerDuration;
|
||||||
|
|
||||||
public class OsuSpinnerTickJudgement : OsuJudgement
|
public class OsuSpinnerTickJudgement : OsuJudgement
|
||||||
{
|
{
|
||||||
public override HitResult MaxResult => HitResult.SmallBonus;
|
public override HitResult MaxResult => HitResult.SmallBonus;
|
||||||
|
@ -37,8 +37,6 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables
|
|||||||
|
|
||||||
protected override SkinnableDrawable CreateMainPiece() => new SkinnableDrawable(new TaikoSkinComponentLookup(TaikoSkinComponents.DrumRollTick), _ => new TickPiece());
|
protected override SkinnableDrawable CreateMainPiece() => new SkinnableDrawable(new TaikoSkinComponentLookup(TaikoSkinComponents.DrumRollTick), _ => new TickPiece());
|
||||||
|
|
||||||
public override double MaximumJudgementOffset => HitObject.HitWindow;
|
|
||||||
|
|
||||||
protected override void OnApply()
|
protected override void OnApply()
|
||||||
{
|
{
|
||||||
base.OnApply();
|
base.OnApply();
|
||||||
|
@ -31,6 +31,8 @@ namespace osu.Game.Rulesets.Taiko.Objects
|
|||||||
|
|
||||||
protected override HitWindows CreateHitWindows() => HitWindows.Empty;
|
protected override HitWindows CreateHitWindows() => HitWindows.Empty;
|
||||||
|
|
||||||
|
public override double MaximumJudgementOffset => HitWindow;
|
||||||
|
|
||||||
protected override StrongNestedHitObject CreateStrongNestedHit(double startTime) => new StrongNestedHit { StartTime = startTime };
|
protected override StrongNestedHitObject CreateStrongNestedHit(double startTime) => new StrongNestedHit { StartTime = startTime };
|
||||||
|
|
||||||
public class StrongNestedHit : StrongNestedHitObject
|
public class StrongNestedHit : StrongNestedHitObject
|
||||||
|
@ -651,18 +651,6 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
UpdateResult(false);
|
UpdateResult(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The maximum offset from the end time of <see cref="HitObject"/> at which this <see cref="DrawableHitObject"/> can be judged.
|
|
||||||
/// The time offset of <see cref="Result"/> will be clamped to this value during <see cref="ApplyResult"/>.
|
|
||||||
/// <para>
|
|
||||||
/// Defaults to the miss window of <see cref="HitObject"/>.
|
|
||||||
/// </para>
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// This does not affect the time offset provided to invocations of <see cref="CheckForResult"/>.
|
|
||||||
/// </remarks>
|
|
||||||
public virtual double MaximumJudgementOffset => HitObject.HitWindows?.WindowFor(HitResult.Miss) ?? 0;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Applies the <see cref="Result"/> of this <see cref="DrawableHitObject"/>, notifying responders such as
|
/// Applies the <see cref="Result"/> of this <see cref="DrawableHitObject"/>, notifying responders such as
|
||||||
/// the <see cref="ScoreProcessor"/> of the <see cref="JudgementResult"/>.
|
/// the <see cref="ScoreProcessor"/> of the <see cref="JudgementResult"/>.
|
||||||
@ -684,7 +672,7 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
$"{GetType().ReadableName()} applied an invalid hit result (was: {Result.Type}, expected: [{Result.Judgement.MinResult} ... {Result.Judgement.MaxResult}]).");
|
$"{GetType().ReadableName()} applied an invalid hit result (was: {Result.Type}, expected: [{Result.Judgement.MinResult} ... {Result.Judgement.MaxResult}]).");
|
||||||
}
|
}
|
||||||
|
|
||||||
Result.TimeOffset = Math.Min(MaximumJudgementOffset, Time.Current - HitObject.GetEndTime());
|
Result.TimeOffset = Math.Min(HitObject.MaximumJudgementOffset, Time.Current - HitObject.GetEndTime());
|
||||||
|
|
||||||
if (Result.HasResult)
|
if (Result.HasResult)
|
||||||
updateState(Result.IsHit ? ArmedState.Hit : ArmedState.Miss);
|
updateState(Result.IsHit ? ArmedState.Hit : ArmedState.Miss);
|
||||||
|
@ -200,6 +200,14 @@ namespace osu.Game.Rulesets.Objects
|
|||||||
[NotNull]
|
[NotNull]
|
||||||
protected virtual HitWindows CreateHitWindows() => new HitWindows();
|
protected virtual HitWindows CreateHitWindows() => new HitWindows();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The maximum offset from the end time of <see cref="HitObject"/> at which this <see cref="HitObject"/> can be judged.
|
||||||
|
/// <para>
|
||||||
|
/// Defaults to the miss window.
|
||||||
|
/// </para>
|
||||||
|
/// </summary>
|
||||||
|
public virtual double MaximumJudgementOffset => HitWindows?.WindowFor(HitResult.Miss) ?? 0;
|
||||||
|
|
||||||
public IList<HitSampleInfo> CreateSlidingSamples()
|
public IList<HitSampleInfo> CreateSlidingSamples()
|
||||||
{
|
{
|
||||||
var slidingSamples = new List<HitSampleInfo>();
|
var slidingSamples = new List<HitSampleInfo>();
|
||||||
|
Loading…
Reference in New Issue
Block a user