// Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Framework.Extensions.Color4Extensions; using OpenTK.Graphics; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; 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 { private readonly NotePiece headPiece; public DrawableNote(Note hitObject, ManiaAction action) : base(hitObject, action) { RelativeSizeAxes = Axes.X; AutoSizeAxes = Axes.Y; CornerRadius = 5; Masking = true; InternalChildren = new Drawable[] { headPiece = new NotePiece { Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre } }; } public override Color4 AccentColour { get { return base.AccentColour; } set { base.AccentColour = value; headPiece.AccentColour = AccentColour; EdgeEffect = new EdgeEffectParameters { Type = EdgeEffectType.Glow, Colour = AccentColour.Lighten(1f).Opacity(0.6f), Radius = 10, }; } } 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 == HitResult.None) return; AddJudgement(new ManiaJudgement { Result = result }); } 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; } }