예제 #1
0
        protected override void CheckForResult(bool userTriggered, double timeOffset)
        {
            if (userTriggered)
            {
                DrawableMiniBossTick nextTick = null;

                foreach (var t in ticks)
                {
                    if (!t.IsHit)
                    {
                        nextTick = t;
                        break;
                    }
                }

                nextTick?.TriggerResult(HitResult.Great);

                var numHits    = ticks.Count(r => r.IsHit);
                var completion = (float)numHits / HitObject.RequiredHits;

                normalAnimation.Hide();
                hitAnimation.Show();
                hitAnimation.ScaleTo(base_sprite_scale + Math.Min(target_sprite_scale - base_sprite_scale, (target_sprite_scale - base_sprite_scale) * completion), 260, Easing.OutQuint);

                // TODO: update bonus score somehow?

                if (HitObject.HitWindows.CanBeHit(timeOffset))
                {
                    OnAttacked(this, timeOffset);
                }
            }
            else
            {
                if (timeOffset < 0)
                {
                    return;
                }

                int numHits = 0;

                foreach (var tick in ticks)
                {
                    if (tick.IsHit)
                    {
                        numHits++;
                        continue;
                    }

                    tick.TriggerResult(HitResult.Miss);
                }

                var hitResult = numHits == HitObject.RequiredHits
                    ? HitResult.Great
                    : numHits > HitObject.RequiredHits / 2
                        ? HitResult.Good
                        : HitResult.Miss;

                ApplyResult(r => r.Type = hitResult);
            }
        }
예제 #2
0
        protected override void CheckForResult(bool userTriggered, double timeOffset)
        {
            if (Time.Current < HitObject.StartTime || AllJudged)
            {
                return;
            }

            if (userTriggered && timeOffset < 0)
            {
                var nextTick = ticks.FirstOrDefault(t => !t.IsHit);
                nextTick?.TriggerResult(HitResult.Perfect);

                var numHits    = ticks.Count(r => r.IsHit);
                var completion = (float)numHits / HitObject.RequiredHits;

                normalAnimation.Hide();
                hitAnimation.Show();
                hitAnimation.ScaleTo(base_sprite_scale + Math.Min(target_sprite_scale - base_sprite_scale, (target_sprite_scale - base_sprite_scale) * completion), 260, Easing.OutQuint);

                OnAttacked(this, timeOffset);
            }
            else if (!userTriggered && timeOffset >= 0)
            {
                int numHits = 0;

                foreach (var tick in ticks)
                {
                    if (tick.IsHit)
                    {
                        numHits++;
                        continue;
                    }

                    tick.TriggerResult(HitResult.Miss);
                }

                var hitResult = numHits == HitObject.RequiredHits
                    ? HitResult.Perfect
                    : numHits > HitObject.RequiredHits / 2
                        ? HitResult.Great
                        : HitResult.Miss;

                ApplyResult(r => r.Type = hitResult);
            }
        }