mirror of
https://github.com/ppy/osu.git
synced 2025-02-05 08:12:53 +08:00
Move default skin cross-component dependencies out to default specifications
This commit is contained in:
parent
12684de66e
commit
944f09ec98
@ -2,23 +2,13 @@
|
|||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Skinning;
|
using osu.Game.Skinning;
|
||||||
using osuTK;
|
|
||||||
|
|
||||||
namespace osu.Game.Screens.Play.HUD
|
namespace osu.Game.Screens.Play.HUD
|
||||||
{
|
{
|
||||||
public class DefaultAccuracyCounter : GameplayAccuracyCounter, ISkinnableComponent
|
public class DefaultAccuracyCounter : GameplayAccuracyCounter, ISkinnableComponent
|
||||||
{
|
{
|
||||||
private readonly Vector2 offset = new Vector2(-20, 5);
|
|
||||||
|
|
||||||
public DefaultAccuracyCounter()
|
|
||||||
{
|
|
||||||
Origin = Anchor.TopRight;
|
|
||||||
Anchor = Anchor.TopRight;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Resolved(canBeNull: true)]
|
[Resolved(canBeNull: true)]
|
||||||
private HUDOverlay hud { get; set; }
|
private HUDOverlay hud { get; set; }
|
||||||
|
|
||||||
@ -27,17 +17,5 @@ namespace osu.Game.Screens.Play.HUD
|
|||||||
{
|
{
|
||||||
Colour = colours.BlueLighter;
|
Colour = colours.BlueLighter;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Update()
|
|
||||||
{
|
|
||||||
base.Update();
|
|
||||||
|
|
||||||
if (hud?.ScoreCounter.Drawable is DefaultScoreCounter score)
|
|
||||||
{
|
|
||||||
// for now align with the score counter. eventually this will be user customisable.
|
|
||||||
Anchor = Anchor.TopLeft;
|
|
||||||
Position = Parent.ToLocalSpace(score.ScreenSpaceDrawQuad.TopLeft) + offset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,14 +9,11 @@ using osu.Game.Graphics.Sprites;
|
|||||||
using osu.Game.Graphics.UserInterface;
|
using osu.Game.Graphics.UserInterface;
|
||||||
using osu.Game.Rulesets.Scoring;
|
using osu.Game.Rulesets.Scoring;
|
||||||
using osu.Game.Skinning;
|
using osu.Game.Skinning;
|
||||||
using osuTK;
|
|
||||||
|
|
||||||
namespace osu.Game.Screens.Play.HUD
|
namespace osu.Game.Screens.Play.HUD
|
||||||
{
|
{
|
||||||
public class DefaultComboCounter : RollingCounter<int>, ISkinnableComponent
|
public class DefaultComboCounter : RollingCounter<int>, ISkinnableComponent
|
||||||
{
|
{
|
||||||
private readonly Vector2 offset = new Vector2(20, 5);
|
|
||||||
|
|
||||||
[Resolved(canBeNull: true)]
|
[Resolved(canBeNull: true)]
|
||||||
private HUDOverlay hud { get; set; }
|
private HUDOverlay hud { get; set; }
|
||||||
|
|
||||||
@ -32,17 +29,6 @@ namespace osu.Game.Screens.Play.HUD
|
|||||||
Current.BindTo(scoreProcessor.Combo);
|
Current.BindTo(scoreProcessor.Combo);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Update()
|
|
||||||
{
|
|
||||||
base.Update();
|
|
||||||
|
|
||||||
if (hud?.ScoreCounter.Drawable is DefaultScoreCounter score)
|
|
||||||
{
|
|
||||||
// for now align with the score counter. eventually this will be user customisable.
|
|
||||||
Position = Parent.ToLocalSpace(score.ScreenSpaceDrawQuad.TopRight) + offset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override string FormatCount(int count)
|
protected override string FormatCount(int count)
|
||||||
{
|
{
|
||||||
return $@"{count}x";
|
return $@"{count}x";
|
||||||
|
@ -35,7 +35,6 @@ namespace osu.Game.Screens.Play
|
|||||||
public float TopScoringElementsHeight { get; private set; }
|
public float TopScoringElementsHeight { get; private set; }
|
||||||
|
|
||||||
public readonly KeyCounterDisplay KeyCounter;
|
public readonly KeyCounterDisplay KeyCounter;
|
||||||
public readonly SkinnableScoreCounter ScoreCounter;
|
|
||||||
public readonly SongProgress Progress;
|
public readonly SongProgress Progress;
|
||||||
public readonly ModDisplay ModDisplay;
|
public readonly ModDisplay ModDisplay;
|
||||||
public readonly HoldForMenuButton HoldToQuit;
|
public readonly HoldForMenuButton HoldToQuit;
|
||||||
@ -102,17 +101,6 @@ namespace osu.Game.Screens.Play
|
|||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
},
|
},
|
||||||
new Container
|
new Container
|
||||||
{
|
|
||||||
RelativeSizeAxes = Axes.Both,
|
|
||||||
Alpha = 0,
|
|
||||||
Children = new Drawable[]
|
|
||||||
{
|
|
||||||
// remaining cross-dependencies need tidying.
|
|
||||||
// kept to ensure non-null, but hidden for testing.
|
|
||||||
ScoreCounter = new SkinnableScoreCounter(),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
new Container
|
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
|
@ -2,11 +2,16 @@
|
|||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using osu.Framework.Audio.Sample;
|
using osu.Framework.Audio.Sample;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.OpenGL.Textures;
|
using osu.Framework.Graphics.OpenGL.Textures;
|
||||||
using osu.Framework.Graphics.Textures;
|
using osu.Framework.Graphics.Textures;
|
||||||
using osu.Game.Audio;
|
using osu.Game.Audio;
|
||||||
|
using osu.Game.Extensions;
|
||||||
|
using osu.Game.Screens.Play.HUD;
|
||||||
|
using osuTK;
|
||||||
using osuTK.Graphics;
|
using osuTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.Skinning
|
namespace osu.Game.Skinning
|
||||||
@ -23,6 +28,65 @@ namespace osu.Game.Skinning
|
|||||||
|
|
||||||
public override ISample GetSample(ISampleInfo sampleInfo) => null;
|
public override ISample GetSample(ISampleInfo sampleInfo) => null;
|
||||||
|
|
||||||
|
public override Drawable GetDrawableComponent(ISkinComponent component)
|
||||||
|
{
|
||||||
|
switch (component)
|
||||||
|
{
|
||||||
|
case SkinnableTargetComponent target:
|
||||||
|
switch (target.Target)
|
||||||
|
{
|
||||||
|
case SkinnableTarget.MainHUDComponents:
|
||||||
|
var skinnableTargetWrapper = new SkinnableTargetWrapper(container =>
|
||||||
|
{
|
||||||
|
var score = container.OfType<DefaultScoreCounter>().FirstOrDefault();
|
||||||
|
var accuracy = container.OfType<DefaultAccuracyCounter>().FirstOrDefault();
|
||||||
|
var combo = container.OfType<DefaultComboCounter>().FirstOrDefault();
|
||||||
|
|
||||||
|
if (score != null)
|
||||||
|
{
|
||||||
|
score.Anchor = Anchor.TopCentre;
|
||||||
|
score.Origin = Anchor.TopCentre;
|
||||||
|
|
||||||
|
// elements default to beneath the health bar
|
||||||
|
const float vertical_offset = 30;
|
||||||
|
|
||||||
|
const float horizontal_padding = 20;
|
||||||
|
|
||||||
|
score.Position = new Vector2(0, vertical_offset);
|
||||||
|
|
||||||
|
if (accuracy != null)
|
||||||
|
{
|
||||||
|
accuracy.Position = new Vector2(-accuracy.ScreenSpaceDeltaToParentSpace(score.ScreenSpaceDrawQuad.Size).X / 2 - horizontal_padding, vertical_offset + 5);
|
||||||
|
accuracy.Origin = Anchor.TopRight;
|
||||||
|
accuracy.Anchor = Anchor.TopCentre;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (combo != null)
|
||||||
|
{
|
||||||
|
combo.Position = new Vector2(accuracy.ScreenSpaceDeltaToParentSpace(score.ScreenSpaceDrawQuad.Size).X / 2 + horizontal_padding, vertical_offset + 5);
|
||||||
|
combo.Anchor = Anchor.TopCentre;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
{
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new DefaultComboCounter(),
|
||||||
|
new DefaultScoreCounter(),
|
||||||
|
new DefaultAccuracyCounter(),
|
||||||
|
new DefaultHealthDisplay(),
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return skinnableTargetWrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return base.GetDrawableComponent(component);
|
||||||
|
}
|
||||||
|
|
||||||
public override IBindable<TValue> GetConfig<TLookup, TValue>(TLookup lookup)
|
public override IBindable<TValue> GetConfig<TLookup, TValue>(TLookup lookup)
|
||||||
{
|
{
|
||||||
switch (lookup)
|
switch (lookup)
|
||||||
|
Loading…
Reference in New Issue
Block a user