protected override void CheckJudgement(bool userTriggered) { if (!userTriggered) { if (Judgement.TimeOffset > HitObject.HitWindowFor(OsuScoreResult.Hit50)) { Judgement.Result = HitResult.Miss; } return; } double hitOffset = Math.Abs(Judgement.TimeOffset); OsuJudgementInfo osuJudgement = (OsuJudgementInfo)Judgement; if (hitOffset < HitObject.HitWindowFor(OsuScoreResult.Hit50)) { Judgement.Result = HitResult.Hit; osuJudgement.Score = HitObject.ScoreResultForOffset(hitOffset); } else { Judgement.Result = HitResult.Miss; } }
private HitResult UpdateHitObject(HitObject hitObject, float x, float y, FrameAction action, float time, bool clickUsed) { if (time > hitObject.Time + hitObject.HitWindowFor(HitResult.Hit50)) { return(HitResult.Miss); } if (action == FrameAction.Click && !clickUsed && hitObject.PointInCircle(x, y)) { return(hitObject.GetResultForOffset(time)); } return(HitResult.None); }
protected override void UpdateCurrentState(ArmedState state) { glow.FadeOut(400); switch (state) { case ArmedState.Idle: this.Delay(HitObject.TimePreempt).FadeOut(500); Expire(true); // override lifetime end as FadeIn may have been changed externally, causing out expiration to be too early. LifetimeEnd = HitObject.StartTime + HitObject.HitWindowFor(HitResult.Miss); break; case ArmedState.Miss: ApproachCircle.FadeOut(50); this.FadeOut(100); Expire(); break; case ArmedState.Hit: ApproachCircle.FadeOut(50); const double flash_in = 40; flash.FadeTo(0.8f, flash_in) .Then() .FadeOut(100); explode.FadeIn(flash_in); using (BeginDelayedSequence(flash_in, true)) { //after the flash, we can hide some elements that were behind it ring.FadeOut(); circle.FadeOut(); number.FadeOut(); this.FadeOut(800) .ScaleTo(Scale * 1.5f, 400, Easing.OutQuad); } Expire(); break; } }
protected override void CheckForJudgements(bool userTriggered, double timeOffset) { if (!userTriggered) { if (timeOffset > HitObject.HitWindowFor(HitResult.Meh)) { AddJudgement(new OsuJudgement { Result = HitResult.Miss }); } return; } AddJudgement(new OsuJudgement { Result = HitObject.ScoreResultForOffset(Math.Abs(timeOffset)), PositionOffset = Vector2.Zero //todo: set to correct value }); }
protected override double CalculateImprecision() => _currentHitObject.HitWindowFor(HitResult.Hit300);