mirror of
https://github.com/ppy/osu.git
synced 2025-01-13 12:53:11 +08:00
Add basic legacy combo counter and updating positioning logic
This commit is contained in:
parent
6eb3176776
commit
2fce064e32
@ -24,7 +24,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
};
|
};
|
||||||
Add(score);
|
Add(score);
|
||||||
|
|
||||||
ComboCounter comboCounter = new StandardComboCounter
|
ComboCounter comboCounter = new LegacyComboCounter
|
||||||
{
|
{
|
||||||
Origin = Anchor.BottomLeft,
|
Origin = Anchor.BottomLeft,
|
||||||
Anchor = Anchor.BottomLeft,
|
Anchor = Anchor.BottomLeft,
|
||||||
|
@ -9,9 +9,9 @@ using osu.Game.Graphics.Sprites;
|
|||||||
|
|
||||||
namespace osu.Game.Screens.Play.HUD
|
namespace osu.Game.Screens.Play.HUD
|
||||||
{
|
{
|
||||||
public abstract class ComboCounter : Container
|
public abstract class ComboCounter : Container, IComboCounter
|
||||||
{
|
{
|
||||||
public BindableInt Current = new BindableInt
|
public Bindable<int> Current { get; } = new BindableInt
|
||||||
{
|
{
|
||||||
MinValue = 0,
|
MinValue = 0,
|
||||||
};
|
};
|
||||||
|
@ -4,26 +4,46 @@
|
|||||||
using System;
|
using System;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
using osu.Game.Screens.Play.HUD;
|
using osu.Game.Graphics.UserInterface;
|
||||||
|
using osuTK;
|
||||||
|
|
||||||
namespace osu.Game.Graphics.UserInterface
|
namespace osu.Game.Screens.Play.HUD
|
||||||
{
|
{
|
||||||
/// <summary>
|
public class DefaultComboCounter : RollingCounter<int>, IComboCounter
|
||||||
/// Used as an accuracy counter. Represented visually as a percentage.
|
|
||||||
/// </summary>
|
|
||||||
public class SimpleComboCounter : RollingCounter<int>, IComboCounter
|
|
||||||
{
|
{
|
||||||
|
private readonly Vector2 offset = new Vector2(20, 5);
|
||||||
|
|
||||||
protected override double RollingDuration => 750;
|
protected override double RollingDuration => 750;
|
||||||
|
|
||||||
public SimpleComboCounter()
|
[Resolved(canBeNull: true)]
|
||||||
|
private HUDOverlay hud { get; set; }
|
||||||
|
|
||||||
|
public DefaultComboCounter()
|
||||||
{
|
{
|
||||||
Current.Value = DisplayedCount = 0;
|
Current.Value = DisplayedCount = 0;
|
||||||
|
|
||||||
|
Anchor = Anchor.TopCentre;
|
||||||
|
Origin = Anchor.TopLeft;
|
||||||
|
|
||||||
|
Position = offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(OsuColour colours) => Colour = colours.BlueLighter;
|
private void load(OsuColour colours) => Colour = colours.BlueLighter;
|
||||||
|
|
||||||
|
protected override void Update()
|
||||||
|
{
|
||||||
|
base.Update();
|
||||||
|
|
||||||
|
if (hud != null)
|
||||||
|
{
|
||||||
|
// for now align with the score counter. eventually this will be user customisable.
|
||||||
|
Position += ToLocalSpace(hud.ScoreCounter.ScreenSpaceDrawQuad.TopRight) + offset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override string FormatCount(int count)
|
protected override string FormatCount(int count)
|
||||||
{
|
{
|
||||||
return $@"{count}x";
|
return $@"{count}x";
|
@ -9,7 +9,7 @@ namespace osu.Game.Screens.Play.HUD
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Uses the 'x' symbol and has a pop-out effect while rolling over.
|
/// Uses the 'x' symbol and has a pop-out effect while rolling over.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class StandardComboCounter : ComboCounter
|
public class LegacyComboCounter : ComboCounter
|
||||||
{
|
{
|
||||||
protected uint ScheduledPopOutCurrentId;
|
protected uint ScheduledPopOutCurrentId;
|
||||||
|
|
||||||
@ -18,6 +18,14 @@ namespace osu.Game.Screens.Play.HUD
|
|||||||
|
|
||||||
public new Vector2 PopOutScale = new Vector2(1.6f);
|
public new Vector2 PopOutScale = new Vector2(1.6f);
|
||||||
|
|
||||||
|
public LegacyComboCounter()
|
||||||
|
{
|
||||||
|
Anchor = Anchor.BottomLeft;
|
||||||
|
Origin = Anchor.BottomLeft;
|
||||||
|
|
||||||
|
Margin = new MarginPadding { Top = 5, Left = 20 };
|
||||||
|
}
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
@ -3,9 +3,7 @@
|
|||||||
|
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Game.Graphics.UserInterface;
|
|
||||||
using osu.Game.Skinning;
|
using osu.Game.Skinning;
|
||||||
using osuTK.Graphics;
|
|
||||||
|
|
||||||
namespace osu.Game.Screens.Play.HUD
|
namespace osu.Game.Screens.Play.HUD
|
||||||
{
|
{
|
||||||
@ -21,39 +19,14 @@ namespace osu.Game.Screens.Play.HUD
|
|||||||
|
|
||||||
protected override void SkinChanged(ISkinSource skin, bool allowFallback)
|
protected override void SkinChanged(ISkinSource skin, bool allowFallback)
|
||||||
{
|
{
|
||||||
// todo: unnecessary?
|
|
||||||
if (skinnedCounter != null)
|
|
||||||
{
|
|
||||||
Current.UnbindFrom(skinnedCounter.Current);
|
|
||||||
}
|
|
||||||
|
|
||||||
base.SkinChanged(skin, allowFallback);
|
base.SkinChanged(skin, allowFallback);
|
||||||
|
|
||||||
// temporary layout code, will eventually be replaced by the skin layout system.
|
|
||||||
if (Drawable is SimpleComboCounter)
|
|
||||||
{
|
|
||||||
Drawable.BypassAutoSizeAxes = Axes.X;
|
|
||||||
Drawable.Anchor = Anchor.TopRight;
|
|
||||||
Drawable.Origin = Anchor.TopLeft;
|
|
||||||
Drawable.Margin = new MarginPadding { Top = 5, Left = 20 };
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Drawable.BypassAutoSizeAxes = Axes.X;
|
|
||||||
Drawable.Anchor = Anchor.BottomLeft;
|
|
||||||
Drawable.Origin = Anchor.BottomLeft;
|
|
||||||
Drawable.Margin = new MarginPadding { Top = 5, Left = 20 };
|
|
||||||
}
|
|
||||||
|
|
||||||
skinnedCounter = (IComboCounter)Drawable;
|
skinnedCounter = (IComboCounter)Drawable;
|
||||||
|
skinnedCounter.Current.BindTo(Current);
|
||||||
Current.BindTo(skinnedCounter.Current);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Drawable createDefault(ISkinComponent skinComponent) => new SimpleComboCounter();
|
private static Drawable createDefault(ISkinComponent skinComponent) => new DefaultComboCounter();
|
||||||
|
|
||||||
public Bindable<int> Current { get; } = new Bindable<int>();
|
public Bindable<int> Current { get; } = new Bindable<int>();
|
||||||
|
|
||||||
public void UpdateCombo(int combo, Color4? hitObjectColour = null) => Current.Value = combo;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ using osuTK.Input;
|
|||||||
|
|
||||||
namespace osu.Game.Screens.Play
|
namespace osu.Game.Screens.Play
|
||||||
{
|
{
|
||||||
|
[Cached]
|
||||||
public class HUDOverlay : Container
|
public class HUDOverlay : Container
|
||||||
{
|
{
|
||||||
private const float fade_duration = 400;
|
private const float fade_duration = 400;
|
||||||
@ -104,7 +105,6 @@ namespace osu.Game.Screens.Play
|
|||||||
{
|
{
|
||||||
AccuracyCounter = CreateAccuracyCounter(),
|
AccuracyCounter = CreateAccuracyCounter(),
|
||||||
ScoreCounter = CreateScoreCounter(),
|
ScoreCounter = CreateScoreCounter(),
|
||||||
ComboCounter = CreateComboCounter(),
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
ComboCounter = CreateComboCounter(),
|
ComboCounter = CreateComboCounter(),
|
||||||
|
@ -18,6 +18,7 @@ using osu.Game.Audio;
|
|||||||
using osu.Game.Beatmaps.Formats;
|
using osu.Game.Beatmaps.Formats;
|
||||||
using osu.Game.IO;
|
using osu.Game.IO;
|
||||||
using osu.Game.Rulesets.Scoring;
|
using osu.Game.Rulesets.Scoring;
|
||||||
|
using osu.Game.Screens.Play.HUD;
|
||||||
using osuTK.Graphics;
|
using osuTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.Skinning
|
namespace osu.Game.Skinning
|
||||||
@ -327,6 +328,17 @@ namespace osu.Game.Skinning
|
|||||||
{
|
{
|
||||||
switch (component)
|
switch (component)
|
||||||
{
|
{
|
||||||
|
case HUDSkinComponent hudComponent:
|
||||||
|
{
|
||||||
|
switch (hudComponent.Component)
|
||||||
|
{
|
||||||
|
case HUDSkinComponents.ComboCounter:
|
||||||
|
return new LegacyComboCounter();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
case GameplaySkinComponent<HitResult> resultComponent:
|
case GameplaySkinComponent<HitResult> resultComponent:
|
||||||
switch (resultComponent.Component)
|
switch (resultComponent.Component)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user