1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-11 11:07:52 +08:00

Move spin start time to inside result and switch to standard state handling

This commit is contained in:
Dean Herbert 2021-03-11 12:58:15 +09:00
parent 4e8bcc9265
commit 1591d593e2
3 changed files with 22 additions and 9 deletions

View File

@ -38,6 +38,11 @@ namespace osu.Game.Rulesets.Osu.Judgements
/// </example> /// </example>
public float RateAdjustedRotation; public float RateAdjustedRotation;
/// <summary>
/// Time instant at which the spin was started (the first user input which caused an increase in spin).
/// </summary>
public double? TimeStarted;
/// <summary> /// <summary>
/// Time instant at which the spinner has been completed (the user has executed all required spins). /// Time instant at which the spinner has been completed (the user has executed all required spins).
/// Will be null if all required spins haven't been completed. /// Will be null if all required spins haven't been completed.

View File

@ -109,9 +109,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
base.OnFree(); base.OnFree();
spinningSample.Samples = null; spinningSample.Samples = null;
// the counter handles its own fade in (when spinning begins) so we should only be responsible for resetting it here, for pooling.
SpmCounter.Hide();
} }
protected override void LoadSamples() protected override void LoadSamples()
@ -161,6 +158,17 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
} }
} }
protected override void UpdateStartTimeStateTransforms()
{
base.UpdateStartTimeStateTransforms();
if (Result?.TimeStarted is double startTime)
{
using (BeginAbsoluteSequence(startTime))
fadeInCounter();
}
}
protected override void UpdateHitStateTransforms(ArmedState state) protected override void UpdateHitStateTransforms(ArmedState state)
{ {
base.UpdateHitStateTransforms(state); base.UpdateHitStateTransforms(state);
@ -265,7 +273,10 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
base.UpdateAfterChildren(); base.UpdateAfterChildren();
if (!SpmCounter.IsPresent && RotationTracker.Tracking) if (!SpmCounter.IsPresent && RotationTracker.Tracking)
SpmCounter.FadeIn(HitObject.TimeFadeIn); {
Result.TimeStarted ??= Time.Current;
fadeInCounter();
}
// don't update after end time to avoid the rate display dropping during fade out. // don't update after end time to avoid the rate display dropping during fade out.
// this shouldn't be limited to StartTime as it causes weirdness with the underlying calculation, which is expecting updates during that period. // this shouldn't be limited to StartTime as it causes weirdness with the underlying calculation, which is expecting updates during that period.
@ -275,6 +286,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
updateBonusScore(); updateBonusScore();
} }
private void fadeInCounter() => SpmCounter.FadeIn(HitObject.TimeFadeIn);
private int wholeSpins; private int wholeSpins;
private void updateBonusScore() private void updateBonusScore()

View File

@ -21,11 +21,6 @@ namespace osu.Game.Rulesets.Osu.Skinning.Default
private readonly OsuSpriteText spmText; private readonly OsuSpriteText spmText;
public override void ApplyTransformsAt(double time, bool propagateChildren = false)
{
// handles own fade in state.
}
public SpinnerSpmCounter() public SpinnerSpmCounter()
{ {
Children = new Drawable[] Children = new Drawable[]