From eef18eea42e533bf236a04da510220aa40be2ed5 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Sat, 11 Mar 2017 14:17:07 +0900 Subject: [PATCH] General fixes. --- osu.Game/Modes/UI/HUDOverlay.cs | 6 +- osu.Game/Modes/UI/HudOverlay.cs | 77 +++++++++++++++++++++++++ osu.Game/Modes/UI/StandardHUDOverlay.cs | 9 +-- osu.Game/Modes/UI/StandardHudOverlay.cs | 54 +++++++++++++++++ 4 files changed, 135 insertions(+), 11 deletions(-) create mode 100644 osu.Game/Modes/UI/HudOverlay.cs create mode 100644 osu.Game/Modes/UI/StandardHudOverlay.cs diff --git a/osu.Game/Modes/UI/HUDOverlay.cs b/osu.Game/Modes/UI/HUDOverlay.cs index 06776f9163..87cbbb5446 100644 --- a/osu.Game/Modes/UI/HUDOverlay.cs +++ b/osu.Game/Modes/UI/HUDOverlay.cs @@ -7,9 +7,9 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Configuration; using osu.Game.Graphics.UserInterface; +using osu.Game.Modes.Objects; using osu.Game.Screens.Play; using System; -using System.Collections.Generic; namespace osu.Game.Modes.UI { @@ -23,7 +23,7 @@ namespace osu.Game.Modes.UI private Bindable showKeyCounter; - protected abstract KeyCounterCollection CreateKeyCounter(IEnumerable keyCounters); + protected abstract KeyCounterCollection CreateKeyCounter(); protected abstract ComboCounter CreateComboCounter(); protected abstract PercentageCounter CreateAccuracyCounter(); protected abstract ScoreCounter CreateScoreCounter(); @@ -35,7 +35,7 @@ namespace osu.Game.Modes.UI Children = new Drawable[] { - KeyCounter = CreateKeyCounter(ruleset.CreateGameplayKeys()), + KeyCounter = CreateKeyCounter(), ComboCounter = CreateComboCounter(), ScoreCounter = CreateScoreCounter(), AccuracyCounter = CreateAccuracyCounter(), diff --git a/osu.Game/Modes/UI/HudOverlay.cs b/osu.Game/Modes/UI/HudOverlay.cs new file mode 100644 index 0000000000..87cbbb5446 --- /dev/null +++ b/osu.Game/Modes/UI/HudOverlay.cs @@ -0,0 +1,77 @@ +// Copyright (c) 2007-2017 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; +using osu.Framework.Configuration; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Configuration; +using osu.Game.Graphics.UserInterface; +using osu.Game.Modes.Objects; +using osu.Game.Screens.Play; +using System; + +namespace osu.Game.Modes.UI +{ + public abstract class HudOverlay : Container + { + public readonly KeyCounterCollection KeyCounter; + public readonly ComboCounter ComboCounter; + public readonly ScoreCounter ScoreCounter; + public readonly PercentageCounter AccuracyCounter; + public readonly HealthDisplay HealthDisplay; + + private Bindable showKeyCounter; + + protected abstract KeyCounterCollection CreateKeyCounter(); + protected abstract ComboCounter CreateComboCounter(); + protected abstract PercentageCounter CreateAccuracyCounter(); + protected abstract ScoreCounter CreateScoreCounter(); + protected abstract HealthDisplay CreateHealthDisplay(); + + protected HudOverlay(Ruleset ruleset) + { + RelativeSizeAxes = Axes.Both; + + Children = new Drawable[] + { + KeyCounter = CreateKeyCounter(), + ComboCounter = CreateComboCounter(), + ScoreCounter = CreateScoreCounter(), + AccuracyCounter = CreateAccuracyCounter(), + HealthDisplay = CreateHealthDisplay(), + }; + } + + [BackgroundDependencyLoader] + private void load(OsuConfigManager config) + { + showKeyCounter = config.GetBindable(OsuConfig.KeyOverlay); + showKeyCounter.ValueChanged += visibilityChanged; + showKeyCounter.TriggerChange(); + } + + private void visibilityChanged(object sender, EventArgs e) + { + if (showKeyCounter) + KeyCounter.Show(); + else + KeyCounter.Hide(); + } + + public void BindProcessor(ScoreProcessor processor) + { + //bind processor bindables to combocounter, score display etc. + //TODO: these should be bindable binds, not events! + ScoreCounter?.Current.BindTo(processor.TotalScore); + AccuracyCounter?.Current.BindTo(processor.Accuracy); + ComboCounter?.Current.BindTo(processor.Combo); + HealthDisplay?.Current.BindTo(processor.Health); + } + + public void BindHitRenderer(HitRenderer hitRenderer) + { + hitRenderer.InputManager.Add(KeyCounter.GetReceptor()); + } + } +} diff --git a/osu.Game/Modes/UI/StandardHUDOverlay.cs b/osu.Game/Modes/UI/StandardHUDOverlay.cs index 03db6f0bda..f77191adf7 100644 --- a/osu.Game/Modes/UI/StandardHUDOverlay.cs +++ b/osu.Game/Modes/UI/StandardHUDOverlay.cs @@ -6,17 +6,11 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Primitives; using osu.Game.Graphics.UserInterface; using osu.Game.Screens.Play; -using System.Collections.Generic; namespace osu.Game.Modes.UI { public class StandardHudOverlay : HudOverlay { - public StandardHudOverlay(Ruleset ruleset) - : base(ruleset) - { - } - protected override PercentageCounter CreateAccuracyCounter() => new PercentageCounter { Anchor = Anchor.TopCentre, @@ -39,14 +33,13 @@ namespace osu.Game.Modes.UI Margin = new MarginPadding { Top = 20 } }; - protected override KeyCounterCollection CreateKeyCounter(IEnumerable keyCounters) => new KeyCounterCollection + protected override KeyCounterCollection CreateKeyCounter() => new KeyCounterCollection { IsCounting = true, FadeTime = 50, Anchor = Anchor.BottomRight, Origin = Anchor.BottomRight, Margin = new MarginPadding(10), - Children = keyCounters }; protected override ScoreCounter CreateScoreCounter() => new ScoreCounter(6) diff --git a/osu.Game/Modes/UI/StandardHudOverlay.cs b/osu.Game/Modes/UI/StandardHudOverlay.cs new file mode 100644 index 0000000000..f77191adf7 --- /dev/null +++ b/osu.Game/Modes/UI/StandardHudOverlay.cs @@ -0,0 +1,54 @@ +// Copyright (c) 2007-2017 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using OpenTK; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Primitives; +using osu.Game.Graphics.UserInterface; +using osu.Game.Screens.Play; + +namespace osu.Game.Modes.UI +{ + public class StandardHudOverlay : HudOverlay + { + protected override PercentageCounter CreateAccuracyCounter() => new PercentageCounter + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + Position = new Vector2(0, 65), + TextSize = 20, + Margin = new MarginPadding { Right = 5 }, + }; + + protected override ComboCounter CreateComboCounter() => new StandardComboCounter + { + Anchor = Anchor.BottomLeft, + Origin = Anchor.BottomLeft, + }; + + protected override HealthDisplay CreateHealthDisplay() => new StandardHealthDisplay + { + Size = new Vector2(1, 5), + RelativeSizeAxes = Axes.X, + Margin = new MarginPadding { Top = 20 } + }; + + protected override KeyCounterCollection CreateKeyCounter() => new KeyCounterCollection + { + IsCounting = true, + FadeTime = 50, + Anchor = Anchor.BottomRight, + Origin = Anchor.BottomRight, + Margin = new MarginPadding(10), + }; + + protected override ScoreCounter CreateScoreCounter() => new ScoreCounter(6) + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + TextSize = 40, + Position = new Vector2(0, 30), + Margin = new MarginPadding { Right = 5 }, + }; + } +}