private void onNewResult(DrawableHitObject judgedObject, JudgementResult result) { hitPolicy.HandleHit(judgedObject); if (!judgedObject.DisplayResult || !DisplayJudgements.Value) { return; } judgementLayer.Add(poolDictionary[result.Type].Get(doj => doj.Apply(result, judgedObject))); if (judgedObject.HitObject.Kiai && result.Type != HitResult.Miss) { float angle = judgedObject switch { DrawableBeat b => b.HitObject.Angle, DrawableSlider s => s.HitObject.Nodes.Last().Angle, _ => 0 }; var isHardBeat = judgedObject is DrawableHardBeat; switch (effect.Value) { case KiaiType.Turbulent: for (int i = 0; i < (isHardBeat ? RNG.Next(60, 100) : RNG.Next(3, 9)); i++) { SliderParticleEmitter.AddParticle((isHardBeat ? RNG.NextSingle(0, 360) : angle), Inversed, result.Type); } break; case KiaiType.Classic: kiaiExplosionContainer.Add(new KiaiHitExplosion(colour.ForHitResult(judgedObject.Result.Type), judgedObject is DrawableHardBeat, Inversed, judgedObject is DrawableHardBeat ? 32 : 10) { Position = judgedObject is DrawableHardBeat ? Vector2.Zero : Extensions.GetCircularPosition(.5f, angle), Angle = angle, Anchor = Anchor.Centre, Origin = Anchor.Centre }); break; } } }
private void applyInverseToBeat(DrawableBeat beat, ArmedState state, float finalDistance) { var box = beat.Box; var hitObject = beat.HitObject; beat.HitDistance = -beat.HitDistance; if (state == ArmedState.Idle) { box.ClearTransforms(targetMember: "Y"); using (beat.BeginAbsoluteSequence(hitObject.StartTime, false)) { box.MoveToY(-1) .MoveToY(finalDistance, hitObject.TimePreempt); } } }
public BeatSelectionBlueprint(DrawableBeat hitObject) : base(hitObject) { InternalChildren = new Drawable[] { SelectionPiece = new HitPiece(), Distance = new Box { Colour = Color4.Yellow.Opacity(.5f), RelativeSizeAxes = Axes.Y, Height = .5f, Anchor = Anchor.Centre, Origin = Anchor.BottomCentre, RelativePositionAxes = Axes.Both, Width = 5, EdgeSmoothness = Vector2.One } }; }