Beispiel #1
0
        private void onNewResult(DrawableHitObject judgedObject, JudgementResult result)
        {
            DrawableRushHitObject rushJudgedObject = (DrawableRushHitObject)judgedObject;
            RushJudgementResult   rushResult       = (RushJudgementResult)result;

            PlayerSprite.HandleResult(rushJudgedObject, result);

            // Display hit explosions for objects that allow it.
            if (result.IsHit && rushJudgedObject.DisplayExplosion)
            {
                Drawable explosion = rushJudgedObject switch
                {
                    DrawableStarSheetHead head => sheetExplosionPool.Get(s => s.Apply(head)),
                    DrawableStarSheetTail tail => sheetExplosionPool.Get(s => s.Apply(tail)),
                    DrawableHeart heart => heartExplosionPool.Get(h => h.Apply(heart)),
                    _ => explosionPool.Get(h => h.Apply(rushJudgedObject)),
                };

                if (rushJudgedObject is IDrawableLanedHit laned)
                {
                    playfieldForLane(laned.Lane).AddExplosion(explosion);
                }
            }

            // Display health point difference if the judgement result implies it.
            var pointDifference = rushResult.Judgement.HealthPointIncreaseFor(rushResult);

            if (pointDifference != 0)
            {
                overPlayerEffectsContainer.Add(healthTextPool.Get(h => h.Apply(pointDifference)));
            }

            // Display judgement results in a drawable for objects that allow it.
            if (rushJudgedObject.DisplayResult)
            {
                DrawableRushJudgement judgementDrawable = judgementPool.Get(j => j.Apply(result, judgedObject));
                LanedHitLane          judgementLane     = LanedHitLane.Air;

                // TODO: showing judgements based on the judged object suggests that
                //       this may want to be inside the object class as well.
                switch (rushJudgedObject.HitObject)
                {
                case Sawblade sawblade:
                    judgementLane = sawblade.Lane.Opposite();
                    break;

                case LanedHit lanedHit:
                    judgementLane = lanedHit.Lane;
                    break;

                case MiniBoss _:
                    break;
                }

                playfieldForLane(judgementLane).AddJudgement(judgementDrawable);
            }
        }
Beispiel #2
0
 public void Apply(DrawableHeart drawableHeart)
 {
     Anchor = drawableHeart.LaneAnchor;
     Size   = drawableHeart.Size;
 }