Пример #1
0
        protected override void CheckForJudgements(bool userTriggered, double timeOffset)
        {
            if (userTriggered)
            {
                return;
            }

            if (timeOffset < 0)
            {
                return;
            }

            int countHit = NestedHitObjects.Count(o => o.AllJudged);

            if (countHit > HitObject.RequiredGoodHits)
            {
                AddJudgement(new TaikoJudgement {
                    Result = countHit >= HitObject.RequiredGreatHits ? HitResult.Great : HitResult.Good
                });
                if (HitObject.IsStrong)
                {
                    AddJudgement(new TaikoStrongHitJudgement());
                }
            }
            else
            {
                AddJudgement(new TaikoJudgement {
                    Result = HitResult.Miss
                });
            }
        }
Пример #2
0
        protected override void CheckForResult(bool userTriggered, double timeOffset)
        {
            if (userTriggered || Time.Current < slider.EndTime)
            {
                return;
            }

            ApplyResult(r =>
            {
                var judgementsCount = NestedHitObjects.Count();
                var judgementsHit   = NestedHitObjects.Count(h => h.IsHit);

                var hitFraction = (double)judgementsHit / judgementsCount;

                if (hitFraction == 1 && HeadCircle.Result.Type == HitResult.Great)
                {
                    r.Type = HitResult.Great;
                }
                else if (hitFraction >= 0.5 && HeadCircle.Result.Type >= HitResult.Good)
                {
                    r.Type = HitResult.Good;
                }
                else if (hitFraction > 0)
                {
                    r.Type = HitResult.Meh;
                }
                else
                {
                    r.Type = HitResult.Miss;
                }
            });
        }
Пример #3
0
        protected override void CheckForJudgements(bool userTriggered, double timeOffset)
        {
            if (!userTriggered && Time.Current >= slider.EndTime)
            {
                var judgementsCount = NestedHitObjects.Count;
                var judgementsHit   = NestedHitObjects.Count(h => h.IsHit);

                var hitFraction = (double)judgementsHit / judgementsCount;
                if (hitFraction == 1 && HeadCircle.Judgements.Any(j => j.Result == HitResult.Great))
                {
                    AddJudgement(new OsuJudgement {
                        Result = HitResult.Great
                    });
                }
                else if (hitFraction >= 0.5 && HeadCircle.Judgements.Any(j => j.Result >= HitResult.Good))
                {
                    AddJudgement(new OsuJudgement {
                        Result = HitResult.Good
                    });
                }
                else if (hitFraction > 0)
                {
                    AddJudgement(new OsuJudgement {
                        Result = HitResult.Meh
                    });
                }
                else
                {
                    AddJudgement(new OsuJudgement {
                        Result = HitResult.Miss
                    });
                }
            }
        }
        protected override void CheckForResult(bool userTriggered, double timeOffset)
        {
            if (userTriggered)
                return;

            if (timeOffset < 0)
                return;

            int countHit = NestedHitObjects.Count(o => o.IsHit);
            if (countHit >= HitObject.RequiredGoodHits)
                ApplyResult(r => r.Type = countHit >= HitObject.RequiredGreatHits ? HitResult.Great : HitResult.Good);
            else
                ApplyResult(r => r.Type = HitResult.Miss);
        }
Пример #5
0
        protected override void CheckForResult(bool userTriggered, double timeOffset)
        {
            if (userTriggered)
            {
                return;
            }

            if (timeOffset < 0)
            {
                return;
            }

            int countHit = NestedHitObjects.Count(o => o.IsHit);

            if (countHit >= HitObject.RequiredGoodHits)
            {
                ApplyResult(r => r.Type = countHit >= HitObject.RequiredGreatHits ? HitResult.Great : HitResult.Ok);
            }
            else
            {
                ApplyResult(r => r.Type = r.Judgement.MinResult);
            }
        }
Пример #6
0
        protected override void CheckJudgement(bool userTriggered)
        {
            if (userTriggered)
            {
                return;
            }

            if (Judgement.TimeOffset < 0)
            {
                return;
            }

            int countHit = NestedHitObjects.Count(o => o.Judgement.Result == HitResult.Hit);

            if (countHit > HitObject.RequiredGoodHits)
            {
                Judgement.Result      = HitResult.Hit;
                Judgement.TaikoResult = countHit >= HitObject.RequiredGreatHits ? TaikoHitResult.Great : TaikoHitResult.Good;
            }
            else
            {
                Judgement.Result = HitResult.Miss;
            }
        }
Пример #7
0
        protected override void CheckForResult(bool userTriggered, double timeOffset)
        {
            if (userTriggered || Time.Current < HitObject.EndTime)
            {
                return;
            }

            // If only the nested hitobjects are judged, then the slider's own judgement is ignored for scoring purposes.
            // But the slider needs to still be judged with a reasonable hit/miss result for visual purposes (hit/miss transforms, etc).
            if (HitObject.OnlyJudgeNestedObjects)
            {
                ApplyResult(r => r.Type = NestedHitObjects.Any(h => h.Result.IsHit) ? r.Judgement.MaxResult : r.Judgement.MinResult);
                return;
            }

            // Otherwise, if this slider also needs to be judged, apply judgement proportionally to the number of nested hitobjects hit. This is the classic osu!stable scoring.
            ApplyResult(r =>
            {
                int totalTicks = NestedHitObjects.Count;
                int hitTicks   = NestedHitObjects.Count(h => h.IsHit);

                if (hitTicks == totalTicks)
                {
                    r.Type = HitResult.Great;
                }
                else if (hitTicks == 0)
                {
                    r.Type = HitResult.Miss;
                }
                else
                {
                    double hitFraction = (double)hitTicks / totalTicks;
                    r.Type             = hitFraction >= 0.5 ? HitResult.Ok : HitResult.Meh;
                }
            });
        }