// Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using OpenTK.Graphics; using osu.Framework.Graphics; using osu.Framework.Input.Bindings; using osu.Game.Rulesets.Mania.Judgements; using osu.Game.Rulesets.Mania.Objects.Drawables.Pieces; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Mania.Objects.Drawables { /// /// Visualises a hit object. /// public class DrawableNote : DrawableManiaHitObject, IKeyBindingHandler { protected readonly GlowPiece GlowPiece; private readonly LaneGlowPiece laneGlowPiece; private readonly NotePiece headPiece; public DrawableNote(Note hitObject, ManiaAction action) : base(hitObject, action) { RelativeSizeAxes = Axes.X; AutoSizeAxes = Axes.Y; Children = new Drawable[] { laneGlowPiece = new LaneGlowPiece { Anchor = Anchor.Centre, Origin = Anchor.Centre }, GlowPiece = new GlowPiece(), headPiece = new NotePiece { Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre } }; } public override Color4 AccentColour { get { return base.AccentColour; } set { if (base.AccentColour == value) return; base.AccentColour = value; laneGlowPiece.AccentColour = value; GlowPiece.AccentColour = value; headPiece.AccentColour = value; } } protected override void CheckForJudgements(bool userTriggered, double timeOffset) { if (!userTriggered) { if (!HitObject.HitWindows.CanBeHit(timeOffset)) AddJudgement(new ManiaJudgement { Result = HitResult.Miss }); return; } var result = HitObject.HitWindows.ResultFor(timeOffset); if (result == null) return; AddJudgement(new ManiaJudgement { Result = result.Value }); } protected override void UpdateState(ArmedState state) { switch (state) { case ArmedState.Hit: case ArmedState.Miss: this.FadeOut(100).Expire(); break; } } public virtual bool OnPressed(ManiaAction action) { if (action != Action) return false; return UpdateJudgement(true); } public virtual bool OnReleased(ManiaAction action) => false; } }