// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Osu.Objects; namespace osu.Game.Rulesets.Osu.Judgements { public class OsuSpinnerJudgementResult : OsuJudgementResult { /// <summary> /// The <see cref="Spinner"/>. /// </summary> public Spinner Spinner => (Spinner)HitObject; /// <summary> /// The total rotation performed on the spinner disc, disregarding the spin direction, /// adjusted for the track's playback rate. /// </summary> /// <remarks> /// <para> /// This value is always non-negative and is monotonically increasing with time /// (i.e. will only increase if time is passing forward, but can decrease during rewind). /// </para> /// <para> /// The rotation from each frame is multiplied by the clock's current playback rate. /// The reason this is done is to ensure that spinners give the same score and require the same number of spins /// regardless of whether speed-modifying mods are applied. /// </para> /// </remarks> /// <example> /// Assuming no speed-modifying mods are active, /// if the spinner is spun 360 degrees clockwise and then 360 degrees counter-clockwise, /// this property will return the value of 720 (as opposed to 0). /// If Double Time is active instead (with a speed multiplier of 1.5x), /// in the same scenario the property will return 720 * 1.5 = 1080. /// </example> 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> /// 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. /// </summary> public double? TimeCompleted; public OsuSpinnerJudgementResult(HitObject hitObject, Judgement judgement) : base(hitObject, judgement) { } } }