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); } }
public void Apply(DrawableHeart drawableHeart) { Anchor = drawableHeart.LaneAnchor; Size = drawableHeart.Size; }