using OpenTK.Input; using System.Collections.Generic; using osu.Game.Modes.Taiko.Judgements; using System; using osu.Game.Modes.Objects.Drawables; using osu.Framework.Input; namespace osu.Game.Modes.Taiko.Objects.Drawable { public class DrawableDrumRollTick : DrawableTaikoHitObject { /// /// A list of keys which this HitObject will accept. These are the standard Taiko keys for now. /// These should be moved to bindings later. /// private List validKeys = new List(new[] { Key.D, Key.F, Key.J, Key.K }); public DrawableDrumRollTick(DrumRollTick tick) : base(tick) { } protected override TaikoJudgementInfo CreateJudgementInfo() => new TaikoDrumRollTickJudgementInfo(); protected override void CheckJudgement(bool userTriggered) { if (!userTriggered) { if (Judgement.TimeOffset > HitObject.TickTimeDistance / 2) Judgement.Result = Modes.Objects.Drawables.HitResult.Miss; return; } if (Math.Abs(Judgement.TimeOffset) < HitObject.TickTimeDistance / 2) { Judgement.Result = HitResult.Hit; Judgement.Score = TaikoScoreResult.Great; } } protected override void Update() { // Drum roll ticks shouldn't move } protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) { if (args.Repeat) return false; if (Judgement.Result.HasValue) return false; if (!validKeys.Contains(args.Key)) return false; return UpdateJudgement(true); } } }