1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-14 04:43:22 +08:00

Simplify and rename SkinnableTargetComponentsContainer

This commit is contained in:
Dean Herbert 2023-02-15 17:24:34 +09:00
parent 24961d1ac0
commit 8bbd00822c
8 changed files with 24 additions and 30 deletions

View File

@ -4,6 +4,7 @@
using System.Linq; using System.Linq;
using osu.Framework.Bindables; using osu.Framework.Bindables;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Game.Skinning; using osu.Game.Skinning;
using osuTK.Graphics; using osuTK.Graphics;
@ -32,7 +33,7 @@ namespace osu.Game.Rulesets.Catch.Skinning.Legacy
switch (targetComponent.Lookup) switch (targetComponent.Lookup)
{ {
case GlobalSkinComponentLookup.LookupType.MainHUDComponents: case GlobalSkinComponentLookup.LookupType.MainHUDComponents:
var components = base.GetDrawableComponent(lookup) as SkinnableTargetComponentsContainer; var components = base.GetDrawableComponent(lookup) as Container;
if (providesComboCounter && components != null) if (providesComboCounter && components != null)
{ {

View File

@ -58,14 +58,14 @@ namespace osu.Game.Tests.Visual.Gameplay
protected bool AssertComponentsFromExpectedSource(GlobalSkinComponentLookup.LookupType target, ISkin expectedSource) protected bool AssertComponentsFromExpectedSource(GlobalSkinComponentLookup.LookupType target, ISkin expectedSource)
{ {
var actualComponentsContainer = Player.ChildrenOfType<SkinnableTargetContainer>().First(s => s.Target == target) var actualComponentsContainer = Player.ChildrenOfType<SkinnableTargetContainer>().First(s => s.Target == target)
.ChildrenOfType<SkinnableTargetComponentsContainer>().SingleOrDefault(); .ChildrenOfType<Container>().SingleOrDefault();
if (actualComponentsContainer == null) if (actualComponentsContainer == null)
return false; return false;
var actualInfo = actualComponentsContainer.CreateSkinnableInfo(); var actualInfo = actualComponentsContainer.CreateSkinnableInfo();
var expectedComponentsContainer = (SkinnableTargetComponentsContainer)expectedSource.GetDrawableComponent(new GlobalSkinComponentLookup(target)); var expectedComponentsContainer = (DefaultSkinComponentsContainer)expectedSource.GetDrawableComponent(new GlobalSkinComponentLookup(target));
if (expectedComponentsContainer == null) if (expectedComponentsContainer == null)
return false; return false;

View File

@ -94,7 +94,7 @@ namespace osu.Game.Skinning
switch (globalLookup.Lookup) switch (globalLookup.Lookup)
{ {
case GlobalSkinComponentLookup.LookupType.SongSelect: case GlobalSkinComponentLookup.LookupType.SongSelect:
var songSelectComponents = new SkinnableTargetComponentsContainer(_ => var songSelectComponents = new DefaultSkinComponentsContainer(_ =>
{ {
// do stuff when we need to. // do stuff when we need to.
}); });
@ -102,7 +102,7 @@ namespace osu.Game.Skinning
return songSelectComponents; return songSelectComponents;
case GlobalSkinComponentLookup.LookupType.MainHUDComponents: case GlobalSkinComponentLookup.LookupType.MainHUDComponents:
var skinnableTargetWrapper = new SkinnableTargetComponentsContainer(container => var skinnableTargetWrapper = new DefaultSkinComponentsContainer(container =>
{ {
var score = container.OfType<DefaultScoreCounter>().FirstOrDefault(); var score = container.OfType<DefaultScoreCounter>().FirstOrDefault();
var accuracy = container.OfType<DefaultAccuracyCounter>().FirstOrDefault(); var accuracy = container.OfType<DefaultAccuracyCounter>().FirstOrDefault();

View File

@ -2,39 +2,28 @@
// 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; using System;
using Newtonsoft.Json;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
namespace osu.Game.Skinning namespace osu.Game.Skinning
{ {
/// <summary> /// <summary>
/// A container which groups the components of a <see cref="SkinnableTargetContainer"/> into a single object. /// A container which can be used to specify default skin components layouts.
/// Optionally also applies a default layout to the components. /// Handles applying a default layout to the components.
/// </summary> /// </summary>
[Serializable] public partial class DefaultSkinComponentsContainer : Container
public partial class SkinnableTargetComponentsContainer : Container, ISkinnableDrawable
{ {
public bool IsEditable => false;
public bool UsesFixedAnchor { get; set; }
private readonly Action<Container>? applyDefaults; private readonly Action<Container>? applyDefaults;
/// <summary> /// <summary>
/// Construct a wrapper with defaults that should be applied once. /// Construct a wrapper with defaults that should be applied once.
/// </summary> /// </summary>
/// <param name="applyDefaults">A function to apply the default layout.</param> /// <param name="applyDefaults">A function to apply the default layout.</param>
public SkinnableTargetComponentsContainer(Action<Container> applyDefaults) public DefaultSkinComponentsContainer(Action<Container> applyDefaults)
: this()
{
this.applyDefaults = applyDefaults;
}
[JsonConstructor]
public SkinnableTargetComponentsContainer()
{ {
RelativeSizeAxes = Axes.Both; RelativeSizeAxes = Axes.Both;
this.applyDefaults = applyDefaults;
} }
protected override void LoadComplete() protected override void LoadComplete()

View File

@ -347,7 +347,7 @@ namespace osu.Game.Skinning
switch (target.Lookup) switch (target.Lookup)
{ {
case GlobalSkinComponentLookup.LookupType.MainHUDComponents: case GlobalSkinComponentLookup.LookupType.MainHUDComponents:
var skinnableTargetWrapper = new SkinnableTargetComponentsContainer(container => var skinnableTargetWrapper = new DefaultSkinComponentsContainer(container =>
{ {
var score = container.OfType<LegacyScoreCounter>().FirstOrDefault(); var score = container.OfType<LegacyScoreCounter>().FirstOrDefault();
var accuracy = container.OfType<GameplayAccuracyCounter>().FirstOrDefault(); var accuracy = container.OfType<GameplayAccuracyCounter>().FirstOrDefault();

View File

@ -11,6 +11,7 @@ using Newtonsoft.Json;
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;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.Textures;
using osu.Framework.IO.Stores; using osu.Framework.IO.Stores;
using osu.Framework.Logging; using osu.Framework.Logging;
@ -174,8 +175,9 @@ namespace osu.Game.Skinning
foreach (var i in skinnableInfo) foreach (var i in skinnableInfo)
components.Add(i.CreateInstance()); components.Add(i.CreateInstance());
return new SkinnableTargetComponentsContainer return new Container
{ {
RelativeSizeAxes = Axes.Both,
Children = components, Children = components,
}; };
} }

View File

@ -7,13 +7,14 @@ using System.Linq;
using System.Threading; using System.Threading;
using osu.Framework.Bindables; using osu.Framework.Bindables;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Game.Screens.Play.HUD; using osu.Game.Screens.Play.HUD;
namespace osu.Game.Skinning namespace osu.Game.Skinning
{ {
public partial class SkinnableTargetContainer : SkinReloadableDrawable, ISkinnableTarget public partial class SkinnableTargetContainer : SkinReloadableDrawable, ISkinnableTarget
{ {
private SkinnableTargetComponentsContainer? content; private Container? content;
public GlobalSkinComponentLookup.LookupType Target { get; } public GlobalSkinComponentLookup.LookupType Target { get; }
@ -39,15 +40,16 @@ namespace osu.Game.Skinning
foreach (var i in skinnableInfo) foreach (var i in skinnableInfo)
drawables.Add(i.CreateInstance()); drawables.Add(i.CreateInstance());
Reload(new SkinnableTargetComponentsContainer Reload(new Container
{ {
RelativeSizeAxes = Axes.Both,
Children = drawables, Children = drawables,
}); });
} }
public void Reload() => Reload(CurrentSkin.GetDrawableComponent(new GlobalSkinComponentLookup(Target)) as SkinnableTargetComponentsContainer); public void Reload() => Reload(CurrentSkin.GetDrawableComponent(new GlobalSkinComponentLookup(Target)) as Container);
public void Reload(SkinnableTargetComponentsContainer? componentsContainer) public void Reload(Container? componentsContainer)
{ {
ClearInternal(); ClearInternal();
components.Clear(); components.Clear();

View File

@ -72,7 +72,7 @@ namespace osu.Game.Skinning
switch (target.Lookup) switch (target.Lookup)
{ {
case GlobalSkinComponentLookup.LookupType.SongSelect: case GlobalSkinComponentLookup.LookupType.SongSelect:
var songSelectComponents = new SkinnableTargetComponentsContainer(_ => var songSelectComponents = new DefaultSkinComponentsContainer(_ =>
{ {
// do stuff when we need to. // do stuff when we need to.
}); });
@ -80,7 +80,7 @@ namespace osu.Game.Skinning
return songSelectComponents; return songSelectComponents;
case GlobalSkinComponentLookup.LookupType.MainHUDComponents: case GlobalSkinComponentLookup.LookupType.MainHUDComponents:
var skinnableTargetWrapper = new SkinnableTargetComponentsContainer(container => var skinnableTargetWrapper = new DefaultSkinComponentsContainer(container =>
{ {
var score = container.OfType<DefaultScoreCounter>().FirstOrDefault(); var score = container.OfType<DefaultScoreCounter>().FirstOrDefault();
var accuracy = container.OfType<DefaultAccuracyCounter>().FirstOrDefault(); var accuracy = container.OfType<DefaultAccuracyCounter>().FirstOrDefault();