mirror of
https://github.com/ppy/osu.git
synced 2025-03-06 13:47:21 +08:00
Merge remote-tracking branch 'origin/master' into background-beat
This commit is contained in:
commit
ec8726e163
@ -1,4 +1,4 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
// 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 NUnit.Framework;
|
using NUnit.Framework;
|
||||||
@ -82,9 +82,9 @@ namespace osu.Game.Rulesets.Catch.Tests
|
|||||||
remove { }
|
remove { }
|
||||||
}
|
}
|
||||||
|
|
||||||
public Drawable GetDrawableComponent(string componentName)
|
public Drawable GetDrawableComponent(ISkinComponent component)
|
||||||
{
|
{
|
||||||
switch (componentName)
|
switch (component.LookupName)
|
||||||
{
|
{
|
||||||
case "Play/Catch/fruit-catcher-idle":
|
case "Play/Catch/fruit-catcher-idle":
|
||||||
return new CatcherCustomSkin();
|
return new CatcherCustomSkin();
|
||||||
|
@ -27,6 +27,8 @@ namespace osu.Game.Rulesets.Catch
|
|||||||
public override IBeatmapConverter CreateBeatmapConverter(IBeatmap beatmap) => new CatchBeatmapConverter(beatmap);
|
public override IBeatmapConverter CreateBeatmapConverter(IBeatmap beatmap) => new CatchBeatmapConverter(beatmap);
|
||||||
public override IBeatmapProcessor CreateBeatmapProcessor(IBeatmap beatmap) => new CatchBeatmapProcessor(beatmap);
|
public override IBeatmapProcessor CreateBeatmapProcessor(IBeatmap beatmap) => new CatchBeatmapProcessor(beatmap);
|
||||||
|
|
||||||
|
public const string SHORT_NAME = "fruits";
|
||||||
|
|
||||||
public override IEnumerable<KeyBinding> GetDefaultKeyBindings(int variant = 0) => new[]
|
public override IEnumerable<KeyBinding> GetDefaultKeyBindings(int variant = 0) => new[]
|
||||||
{
|
{
|
||||||
new KeyBinding(InputKey.Z, CatchAction.MoveLeft),
|
new KeyBinding(InputKey.Z, CatchAction.MoveLeft),
|
||||||
@ -117,7 +119,7 @@ namespace osu.Game.Rulesets.Catch
|
|||||||
|
|
||||||
public override string Description => "osu!catch";
|
public override string Description => "osu!catch";
|
||||||
|
|
||||||
public override string ShortName => "fruits";
|
public override string ShortName => SHORT_NAME;
|
||||||
|
|
||||||
public override Drawable CreateIcon() => new SpriteIcon { Icon = OsuIcon.RulesetCatch };
|
public override Drawable CreateIcon() => new SpriteIcon { Icon = OsuIcon.RulesetCatch };
|
||||||
|
|
||||||
|
19
osu.Game.Rulesets.Catch/CatchSkinComponent.cs
Normal file
19
osu.Game.Rulesets.Catch/CatchSkinComponent.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using osu.Game.Skinning;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Catch
|
||||||
|
{
|
||||||
|
public class CatchSkinComponent : PlaySkinComponent<CatchSkinComponents>
|
||||||
|
{
|
||||||
|
public CatchSkinComponent(CatchSkinComponents component)
|
||||||
|
: base(component)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override string RulesetPrefix => CatchRuleset.SHORT_NAME;
|
||||||
|
|
||||||
|
protected override string ComponentName => Component.ToString().ToLower();
|
||||||
|
}
|
||||||
|
}
|
10
osu.Game.Rulesets.Catch/CatchSkinComponents.cs
Normal file
10
osu.Game.Rulesets.Catch/CatchSkinComponents.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Catch
|
||||||
|
{
|
||||||
|
public enum CatchSkinComponents
|
||||||
|
{
|
||||||
|
Catcher
|
||||||
|
}
|
||||||
|
}
|
@ -22,7 +22,7 @@ namespace osu.Game.Rulesets.Catch.UI
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
{
|
{
|
||||||
InternalChild = new SkinnableSprite(@"Play/Catch/fruit-catcher-idle")
|
InternalChild = new SkinnableSprite(new CatchSkinComponent(CatchSkinComponents.Catcher))
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Anchor = Anchor.TopCentre,
|
Anchor = Anchor.TopCentre,
|
||||||
|
@ -35,6 +35,8 @@ namespace osu.Game.Rulesets.Mania
|
|||||||
public override IBeatmapConverter CreateBeatmapConverter(IBeatmap beatmap) => new ManiaBeatmapConverter(beatmap);
|
public override IBeatmapConverter CreateBeatmapConverter(IBeatmap beatmap) => new ManiaBeatmapConverter(beatmap);
|
||||||
public override PerformanceCalculator CreatePerformanceCalculator(WorkingBeatmap beatmap, ScoreInfo score) => new ManiaPerformanceCalculator(this, beatmap, score);
|
public override PerformanceCalculator CreatePerformanceCalculator(WorkingBeatmap beatmap, ScoreInfo score) => new ManiaPerformanceCalculator(this, beatmap, score);
|
||||||
|
|
||||||
|
public const string SHORT_NAME = "mania";
|
||||||
|
|
||||||
public override HitObjectComposer CreateHitObjectComposer() => new ManiaHitObjectComposer(this);
|
public override HitObjectComposer CreateHitObjectComposer() => new ManiaHitObjectComposer(this);
|
||||||
|
|
||||||
public override IEnumerable<Mod> ConvertLegacyMods(LegacyMods mods)
|
public override IEnumerable<Mod> ConvertLegacyMods(LegacyMods mods)
|
||||||
@ -163,7 +165,7 @@ namespace osu.Game.Rulesets.Mania
|
|||||||
|
|
||||||
public override string Description => "osu!mania";
|
public override string Description => "osu!mania";
|
||||||
|
|
||||||
public override string ShortName => "mania";
|
public override string ShortName => SHORT_NAME;
|
||||||
|
|
||||||
public override Drawable CreateIcon() => new SpriteIcon { Icon = OsuIcon.RulesetMania };
|
public override Drawable CreateIcon() => new SpriteIcon { Icon = OsuIcon.RulesetMania };
|
||||||
|
|
||||||
|
19
osu.Game.Rulesets.Mania/ManiaSkinComponent.cs
Normal file
19
osu.Game.Rulesets.Mania/ManiaSkinComponent.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using osu.Game.Skinning;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Mania
|
||||||
|
{
|
||||||
|
public class ManiaSkinComponent : PlaySkinComponent<ManiaSkinComponents>
|
||||||
|
{
|
||||||
|
public ManiaSkinComponent(ManiaSkinComponents component)
|
||||||
|
: base(component)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override string RulesetPrefix => ManiaRuleset.SHORT_NAME;
|
||||||
|
|
||||||
|
protected override string ComponentName => Component.ToString().ToLower();
|
||||||
|
}
|
||||||
|
}
|
9
osu.Game.Rulesets.Mania/ManiaSkinComponents.cs
Normal file
9
osu.Game.Rulesets.Mania/ManiaSkinComponents.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Mania
|
||||||
|
{
|
||||||
|
public enum ManiaSkinComponents
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -119,7 +119,7 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
this.identifier = identifier;
|
this.identifier = identifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Drawable GetDrawableComponent(string componentName)
|
public Drawable GetDrawableComponent(ISkinComponent component)
|
||||||
{
|
{
|
||||||
if (!enabled) return null;
|
if (!enabled) return null;
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Connections
|
|||||||
{
|
{
|
||||||
Origin = Anchor.Centre;
|
Origin = Anchor.Centre;
|
||||||
|
|
||||||
Child = new SkinnableDrawable("Play/osu/followpoint", _ => new Container
|
Child = new SkinnableDrawable(new OsuSkinComponent(OsuSkinComponents.FollowPoint), _ => new Container
|
||||||
{
|
{
|
||||||
Masking = true,
|
Masking = true,
|
||||||
AutoSizeAxes = Axes.Both,
|
AutoSizeAxes = Axes.Both,
|
||||||
|
@ -58,7 +58,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mainContent = new SkinnableDrawable("Play/osu/hitcircle", _ => new MainCirclePiece(HitObject.IndexInCurrentCombo)),
|
mainContent = new SkinnableDrawable(new OsuSkinComponent(OsuSkinComponents.HitCircle), _ => new MainCirclePiece(HitObject.IndexInCurrentCombo)),
|
||||||
ApproachCircle = new ApproachCircle
|
ApproachCircle = new ApproachCircle
|
||||||
{
|
{
|
||||||
Alpha = 0,
|
Alpha = 0,
|
||||||
|
@ -35,7 +35,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
Blending = BlendingParameters.Additive;
|
Blending = BlendingParameters.Additive;
|
||||||
Origin = Anchor.Centre;
|
Origin = Anchor.Centre;
|
||||||
|
|
||||||
InternalChild = scaleContainer = new SkinnableDrawable("Play/osu/reversearrow", _ => new SpriteIcon
|
InternalChild = scaleContainer = new SkinnableDrawable(new OsuSkinComponent(OsuSkinComponents.ReverseArrow), _ => new SpriteIcon
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Icon = FontAwesome.Solid.ChevronRight,
|
Icon = FontAwesome.Solid.ChevronRight,
|
||||||
|
@ -32,7 +32,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2);
|
Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2);
|
||||||
Origin = Anchor.Centre;
|
Origin = Anchor.Centre;
|
||||||
|
|
||||||
InternalChild = scaleContainer = new SkinnableDrawable("Play/osu/sliderscorepoint", _ => new CircularContainer
|
InternalChild = scaleContainer = new SkinnableDrawable(new OsuSkinComponent(OsuSkinComponents.SliderScorePoint), _ => new CircularContainer
|
||||||
{
|
{
|
||||||
Masking = true,
|
Masking = true,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
|
@ -31,13 +31,13 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
private class SkinnableApproachCircle : SkinnableSprite
|
private class SkinnableApproachCircle : SkinnableSprite
|
||||||
{
|
{
|
||||||
public SkinnableApproachCircle()
|
public SkinnableApproachCircle()
|
||||||
: base("Play/osu/approachcircle")
|
: base(new OsuSkinComponent(OsuSkinComponents.ApproachCircle))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Drawable CreateDefault(string name)
|
protected override Drawable CreateDefault(ISkinComponent component)
|
||||||
{
|
{
|
||||||
var drawable = base.CreateDefault(name);
|
var drawable = base.CreateDefault(component);
|
||||||
|
|
||||||
// account for the sprite being used for the default approach circle being taken from stable,
|
// account for the sprite being used for the default approach circle being taken from stable,
|
||||||
// when hitcircles have 5px padding on each size. this should be removed if we update the sprite.
|
// when hitcircles have 5px padding on each size. this should be removed if we update the sprite.
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Game.Skinning;
|
|
||||||
using osuTK;
|
using osuTK;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
||||||
@ -20,12 +19,12 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
Blending = BlendingParameters.Additive;
|
Blending = BlendingParameters.Additive;
|
||||||
Alpha = 0;
|
Alpha = 0;
|
||||||
|
|
||||||
Child = new SkinnableDrawable("Play/osu/hitcircle-explode", _ => new TrianglesPiece
|
Child = new TrianglesPiece
|
||||||
{
|
{
|
||||||
Blending = BlendingParameters.Additive,
|
Blending = BlendingParameters.Additive,
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Alpha = 0.2f,
|
Alpha = 0.2f,
|
||||||
}, s => s.GetTexture("Play/osu/hitcircle") == null);
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@ using osu.Framework.Graphics;
|
|||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osuTK;
|
using osuTK;
|
||||||
using osu.Framework.Graphics.Shapes;
|
using osu.Framework.Graphics.Shapes;
|
||||||
using osu.Game.Skinning;
|
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
Blending = BlendingParameters.Additive;
|
Blending = BlendingParameters.Additive;
|
||||||
Alpha = 0;
|
Alpha = 0;
|
||||||
|
|
||||||
Child = new SkinnableDrawable("Play/osu/hitcircle-flash", name => new CircularContainer
|
Child = new CircularContainer
|
||||||
{
|
{
|
||||||
Masking = true,
|
Masking = true,
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
@ -29,7 +28,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both
|
RelativeSizeAxes = Axes.Both
|
||||||
}
|
}
|
||||||
}, s => s.GetTexture("Play/osu/hitcircle") == null);
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ using osu.Framework.Graphics;
|
|||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Framework.Graphics.Textures;
|
using osu.Framework.Graphics.Textures;
|
||||||
using osu.Game.Skinning;
|
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
||||||
{
|
{
|
||||||
@ -22,14 +21,14 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(TextureStore textures)
|
private void load(TextureStore textures)
|
||||||
{
|
{
|
||||||
Child = new SkinnableDrawable("Play/osu/ring-glow", name => new Sprite
|
Child = new Sprite
|
||||||
{
|
{
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
Texture = textures.Get(name),
|
Texture = textures.Get("ring-glow"),
|
||||||
Blending = BlendingParameters.Additive,
|
Blending = BlendingParameters.Additive,
|
||||||
Alpha = 0.5f
|
Alpha = 0.5f
|
||||||
}, s => s.GetTexture("Play/osu/hitcircle") == null);
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
|
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
new SkinnableDrawable("Play/osu/number-glow", name => new CircularContainer
|
new CircularContainer
|
||||||
{
|
{
|
||||||
Masking = true,
|
Masking = true,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
@ -41,8 +41,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
Colour = Color4.White.Opacity(0.5f),
|
Colour = Color4.White.Opacity(0.5f),
|
||||||
},
|
},
|
||||||
Child = new Box()
|
Child = new Box()
|
||||||
}, s => s.GetTexture("Play/osu/hitcircle") == null),
|
},
|
||||||
number = new SkinnableSpriteText("Play/osu/number-text", _ => new OsuSpriteText
|
number = new SkinnableSpriteText(new OsuSkinComponent(OsuSkinComponents.HitCircleText), _ => new OsuSpriteText
|
||||||
{
|
{
|
||||||
Font = OsuFont.Numeric.With(size: 40),
|
Font = OsuFont.Numeric.With(size: 40),
|
||||||
UseFullGlyphHeight = false,
|
UseFullGlyphHeight = false,
|
||||||
|
@ -6,7 +6,6 @@ using osu.Framework.Graphics.Containers;
|
|||||||
using osuTK;
|
using osuTK;
|
||||||
using osuTK.Graphics;
|
using osuTK.Graphics;
|
||||||
using osu.Framework.Graphics.Shapes;
|
using osu.Framework.Graphics.Shapes;
|
||||||
using osu.Game.Skinning;
|
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
||||||
{
|
{
|
||||||
@ -19,7 +18,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
Anchor = Anchor.Centre;
|
Anchor = Anchor.Centre;
|
||||||
Origin = Anchor.Centre;
|
Origin = Anchor.Centre;
|
||||||
|
|
||||||
InternalChild = new SkinnableDrawable("Play/osu/hitcircleoverlay", _ => new Container
|
InternalChild = new Container
|
||||||
{
|
{
|
||||||
Masking = true,
|
Masking = true,
|
||||||
CornerRadius = Size.X / 2,
|
CornerRadius = Size.X / 2,
|
||||||
@ -35,7 +34,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
RelativeSizeAxes = Axes.Both
|
RelativeSizeAxes = Axes.Both
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Alpha = 0,
|
Alpha = 0,
|
||||||
Child = new SkinnableDrawable("Play/osu/sliderfollowcircle", _ => new DefaultFollowCircle()),
|
Child = new SkinnableDrawable(new OsuSkinComponent(OsuSkinComponents.SliderFollowCircle), _ => new DefaultFollowCircle()),
|
||||||
},
|
},
|
||||||
new CircularContainer
|
new CircularContainer
|
||||||
{
|
{
|
||||||
@ -55,7 +55,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
Child = new Container
|
Child = new Container
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Child = new SkinnableDrawable("Play/osu/sliderball", _ => new DefaultSliderBall()),
|
Child = new SkinnableDrawable(new OsuSkinComponent(OsuSkinComponents.SliderBall), _ => new DefaultSliderBall()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -35,6 +35,8 @@ namespace osu.Game.Rulesets.Osu
|
|||||||
public override IBeatmapConverter CreateBeatmapConverter(IBeatmap beatmap) => new OsuBeatmapConverter(beatmap);
|
public override IBeatmapConverter CreateBeatmapConverter(IBeatmap beatmap) => new OsuBeatmapConverter(beatmap);
|
||||||
public override IBeatmapProcessor CreateBeatmapProcessor(IBeatmap beatmap) => new OsuBeatmapProcessor(beatmap);
|
public override IBeatmapProcessor CreateBeatmapProcessor(IBeatmap beatmap) => new OsuBeatmapProcessor(beatmap);
|
||||||
|
|
||||||
|
public const string SHORT_NAME = "osu";
|
||||||
|
|
||||||
public override IEnumerable<KeyBinding> GetDefaultKeyBindings(int variant = 0) => new[]
|
public override IEnumerable<KeyBinding> GetDefaultKeyBindings(int variant = 0) => new[]
|
||||||
{
|
{
|
||||||
new KeyBinding(InputKey.Z, OsuAction.LeftButton),
|
new KeyBinding(InputKey.Z, OsuAction.LeftButton),
|
||||||
@ -161,7 +163,7 @@ namespace osu.Game.Rulesets.Osu
|
|||||||
|
|
||||||
public override string Description => "osu!";
|
public override string Description => "osu!";
|
||||||
|
|
||||||
public override string ShortName => "osu";
|
public override string ShortName => SHORT_NAME;
|
||||||
|
|
||||||
public override RulesetSettingsSubsection CreateSettings() => new OsuSettingsSubsection(this);
|
public override RulesetSettingsSubsection CreateSettings() => new OsuSettingsSubsection(this);
|
||||||
|
|
||||||
|
19
osu.Game.Rulesets.Osu/OsuSkinComponent.cs
Normal file
19
osu.Game.Rulesets.Osu/OsuSkinComponent.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using osu.Game.Skinning;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Osu
|
||||||
|
{
|
||||||
|
public class OsuSkinComponent : PlaySkinComponent<OsuSkinComponents>
|
||||||
|
{
|
||||||
|
public OsuSkinComponent(OsuSkinComponents component)
|
||||||
|
: base(component)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override string RulesetPrefix => OsuRuleset.SHORT_NAME;
|
||||||
|
|
||||||
|
protected override string ComponentName => Component.ToString().ToLower();
|
||||||
|
}
|
||||||
|
}
|
18
osu.Game.Rulesets.Osu/OsuSkinComponents.cs
Normal file
18
osu.Game.Rulesets.Osu/OsuSkinComponents.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Osu
|
||||||
|
{
|
||||||
|
public enum OsuSkinComponents
|
||||||
|
{
|
||||||
|
HitCircle,
|
||||||
|
FollowPoint,
|
||||||
|
Cursor,
|
||||||
|
SliderScorePoint,
|
||||||
|
ApproachCircle,
|
||||||
|
ReverseArrow,
|
||||||
|
HitCircleText,
|
||||||
|
SliderFollowCircle,
|
||||||
|
SliderBall
|
||||||
|
}
|
||||||
|
}
|
@ -42,7 +42,7 @@ namespace osu.Game.Rulesets.Osu.Skinning
|
|||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
},
|
},
|
||||||
new SkinnableSpriteText("Play/osu/number-text", _ => new OsuSpriteText
|
new SkinnableSpriteText(new OsuSkinComponent(OsuSkinComponents.HitCircleText), _ => new OsuSpriteText
|
||||||
{
|
{
|
||||||
Font = OsuFont.Numeric.With(size: 40),
|
Font = OsuFont.Numeric.With(size: 40),
|
||||||
UseFullGlyphHeight = false,
|
UseFullGlyphHeight = false,
|
||||||
|
@ -55,14 +55,17 @@ namespace osu.Game.Rulesets.Osu.Skinning
|
|||||||
hasHitCircle = new Lazy<bool>(() => source.GetTexture("hitcircle") != null);
|
hasHitCircle = new Lazy<bool>(() => source.GetTexture("hitcircle") != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Drawable GetDrawableComponent(string componentName)
|
public Drawable GetDrawableComponent(ISkinComponent component)
|
||||||
{
|
{
|
||||||
switch (componentName)
|
if (!(component is OsuSkinComponent osuComponent))
|
||||||
{
|
return null;
|
||||||
case "Play/osu/sliderfollowcircle":
|
|
||||||
return this.GetAnimation(componentName, true, true);
|
|
||||||
|
|
||||||
case "Play/osu/sliderball":
|
switch (osuComponent.Component)
|
||||||
|
{
|
||||||
|
case OsuSkinComponents.SliderFollowCircle:
|
||||||
|
return this.GetAnimation("sliderfollowcircle", true, true);
|
||||||
|
|
||||||
|
case OsuSkinComponents.SliderBall:
|
||||||
var sliderBallContent = this.GetAnimation("sliderb", true, true, "");
|
var sliderBallContent = this.GetAnimation("sliderb", true, true, "");
|
||||||
|
|
||||||
if (sliderBallContent != null)
|
if (sliderBallContent != null)
|
||||||
@ -80,20 +83,19 @@ namespace osu.Game.Rulesets.Osu.Skinning
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
case "Play/osu/hitcircle":
|
case OsuSkinComponents.HitCircle:
|
||||||
if (hasHitCircle.Value)
|
if (hasHitCircle.Value)
|
||||||
return new LegacyMainCirclePiece();
|
return new LegacyMainCirclePiece();
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
case "Play/osu/cursor":
|
case OsuSkinComponents.Cursor:
|
||||||
if (source.GetTexture("cursor") != null)
|
if (source.GetTexture("cursor") != null)
|
||||||
return new LegacyCursor();
|
return new LegacyCursor();
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
case "Play/osu/number-text":
|
case OsuSkinComponents.HitCircleText:
|
||||||
|
|
||||||
string font = GetValue<SkinConfiguration, string>(config => config.HitCircleFont);
|
string font = GetValue<SkinConfiguration, string>(config => config.HitCircleFont);
|
||||||
var overlap = GetValue<SkinConfiguration, float>(config => config.HitCircleOverlap);
|
var overlap = GetValue<SkinConfiguration, float>(config => config.HitCircleOverlap);
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor
|
|||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Child = scaleTarget = new SkinnableDrawable("Play/osu/cursor", _ => new DefaultCursor(), confineMode: ConfineMode.NoScaling)
|
Child = scaleTarget = new SkinnableDrawable(new OsuSkinComponent(OsuSkinComponents.Cursor), _ => new DefaultCursor(), confineMode: ConfineMode.NoScaling)
|
||||||
{
|
{
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
|
@ -26,6 +26,8 @@ namespace osu.Game.Rulesets.Taiko
|
|||||||
public override DrawableRuleset CreateDrawableRulesetWith(IWorkingBeatmap beatmap, IReadOnlyList<Mod> mods) => new DrawableTaikoRuleset(this, beatmap, mods);
|
public override DrawableRuleset CreateDrawableRulesetWith(IWorkingBeatmap beatmap, IReadOnlyList<Mod> mods) => new DrawableTaikoRuleset(this, beatmap, mods);
|
||||||
public override IBeatmapConverter CreateBeatmapConverter(IBeatmap beatmap) => new TaikoBeatmapConverter(beatmap);
|
public override IBeatmapConverter CreateBeatmapConverter(IBeatmap beatmap) => new TaikoBeatmapConverter(beatmap);
|
||||||
|
|
||||||
|
public const string SHORT_NAME = "taiko";
|
||||||
|
|
||||||
public override IEnumerable<KeyBinding> GetDefaultKeyBindings(int variant = 0) => new[]
|
public override IEnumerable<KeyBinding> GetDefaultKeyBindings(int variant = 0) => new[]
|
||||||
{
|
{
|
||||||
new KeyBinding(InputKey.MouseLeft, TaikoAction.LeftCentre),
|
new KeyBinding(InputKey.MouseLeft, TaikoAction.LeftCentre),
|
||||||
@ -116,7 +118,7 @@ namespace osu.Game.Rulesets.Taiko
|
|||||||
|
|
||||||
public override string Description => "osu!taiko";
|
public override string Description => "osu!taiko";
|
||||||
|
|
||||||
public override string ShortName => "taiko";
|
public override string ShortName => SHORT_NAME;
|
||||||
|
|
||||||
public override Drawable CreateIcon() => new SpriteIcon { Icon = OsuIcon.RulesetTaiko };
|
public override Drawable CreateIcon() => new SpriteIcon { Icon = OsuIcon.RulesetTaiko };
|
||||||
|
|
||||||
|
19
osu.Game.Rulesets.Taiko/TaikoSkinComponent.cs
Normal file
19
osu.Game.Rulesets.Taiko/TaikoSkinComponent.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using osu.Game.Skinning;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Taiko
|
||||||
|
{
|
||||||
|
public class TaikoSkinComponent : PlaySkinComponent<TaikoSkinComponents>
|
||||||
|
{
|
||||||
|
public TaikoSkinComponent(TaikoSkinComponents component)
|
||||||
|
: base(component)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override string RulesetPrefix => TaikoRuleset.SHORT_NAME;
|
||||||
|
|
||||||
|
protected override string ComponentName => Component.ToString().ToLower();
|
||||||
|
}
|
||||||
|
}
|
9
osu.Game.Rulesets.Taiko/TaikoSkinComponents.cs
Normal file
9
osu.Game.Rulesets.Taiko/TaikoSkinComponents.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Taiko
|
||||||
|
{
|
||||||
|
public enum TaikoSkinComponents
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -137,8 +137,8 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
{
|
{
|
||||||
public new Drawable Drawable => base.Drawable;
|
public new Drawable Drawable => base.Drawable;
|
||||||
|
|
||||||
public ExposedSkinnableDrawable(string name, Func<string, Drawable> defaultImplementation, Func<ISkinSource, bool> allowFallback = null, ConfineMode confineMode = ConfineMode.ScaleDownToFit)
|
public ExposedSkinnableDrawable(string name, Func<ISkinComponent, Drawable> defaultImplementation, Func<ISkinSource, bool> allowFallback = null, ConfineMode confineMode = ConfineMode.ScaleDownToFit)
|
||||||
: base(name, defaultImplementation, allowFallback, confineMode)
|
: base(new TestSkinComponent(name), defaultImplementation, allowFallback, confineMode)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -206,8 +206,8 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
public new Drawable Drawable => base.Drawable;
|
public new Drawable Drawable => base.Drawable;
|
||||||
public int SkinChangedCount { get; private set; }
|
public int SkinChangedCount { get; private set; }
|
||||||
|
|
||||||
public SkinConsumer(string name, Func<string, Drawable> defaultImplementation, Func<ISkinSource, bool> allowFallback = null)
|
public SkinConsumer(string name, Func<ISkinComponent, Drawable> defaultImplementation, Func<ISkinSource, bool> allowFallback = null)
|
||||||
: base(name, defaultImplementation, allowFallback)
|
: base(new TestSkinComponent(name), defaultImplementation, allowFallback)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,8 +243,8 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
this.size = size;
|
this.size = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Drawable GetDrawableComponent(string componentName) =>
|
public Drawable GetDrawableComponent(ISkinComponent componentName) =>
|
||||||
componentName == "available"
|
componentName.LookupName == "available"
|
||||||
? new DrawWidthBox
|
? new DrawWidthBox
|
||||||
{
|
{
|
||||||
Colour = Color4.Yellow,
|
Colour = Color4.Yellow,
|
||||||
@ -261,7 +261,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
|
|
||||||
private class SecondarySource : ISkin
|
private class SecondarySource : ISkin
|
||||||
{
|
{
|
||||||
public Drawable GetDrawableComponent(string componentName) => new SecondarySourceBox();
|
public Drawable GetDrawableComponent(ISkinComponent componentName) => new SecondarySourceBox();
|
||||||
|
|
||||||
public Texture GetTexture(string componentName) => throw new NotImplementedException();
|
public Texture GetTexture(string componentName) => throw new NotImplementedException();
|
||||||
|
|
||||||
@ -272,7 +272,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
|
|
||||||
private class SkinSourceContainer : Container, ISkin
|
private class SkinSourceContainer : Container, ISkin
|
||||||
{
|
{
|
||||||
public Drawable GetDrawableComponent(string componentName) => new BaseSourceBox();
|
public Drawable GetDrawableComponent(ISkinComponent componentName) => new BaseSourceBox();
|
||||||
|
|
||||||
public Texture GetTexture(string componentName) => throw new NotImplementedException();
|
public Texture GetTexture(string componentName) => throw new NotImplementedException();
|
||||||
|
|
||||||
@ -280,5 +280,19 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
|
|
||||||
public TValue GetValue<TConfiguration, TValue>(Func<TConfiguration, TValue> query) where TConfiguration : SkinConfiguration => throw new NotImplementedException();
|
public TValue GetValue<TConfiguration, TValue>(Func<TConfiguration, TValue> query) where TConfiguration : SkinConfiguration => throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class TestSkinComponent : ISkinComponent
|
||||||
|
{
|
||||||
|
private readonly string name;
|
||||||
|
|
||||||
|
public TestSkinComponent(string name)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string ComponentGroup => string.Empty;
|
||||||
|
|
||||||
|
public string LookupName => name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ namespace osu.Game.Rulesets.Judgements
|
|||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Child = new SkinnableDrawable($"Play/{Result.Type}", _ => JudgementText = new OsuSpriteText
|
Child = new SkinnableDrawable(new PlaySkinComponent<HitResult>(Result.Type), _ => JudgementText = new OsuSpriteText
|
||||||
{
|
{
|
||||||
Text = Result.Type.GetDescription().ToUpperInvariant(),
|
Text = Result.Type.GetDescription().ToUpperInvariant(),
|
||||||
Font = OsuFont.Numeric.With(size: 12),
|
Font = OsuFont.Numeric.With(size: 12),
|
||||||
|
@ -17,7 +17,7 @@ namespace osu.Game.Skinning
|
|||||||
private readonly Bindable<bool> beatmapHitsounds = new Bindable<bool>();
|
private readonly Bindable<bool> beatmapHitsounds = new Bindable<bool>();
|
||||||
|
|
||||||
protected override bool AllowConfigurationLookup => beatmapSkins.Value;
|
protected override bool AllowConfigurationLookup => beatmapSkins.Value;
|
||||||
protected override bool AllowDrawableLookup(string componentName) => beatmapSkins.Value;
|
protected override bool AllowDrawableLookup(ISkinComponent component) => beatmapSkins.Value;
|
||||||
protected override bool AllowTextureLookup(string componentName) => beatmapSkins.Value;
|
protected override bool AllowTextureLookup(string componentName) => beatmapSkins.Value;
|
||||||
protected override bool AllowSampleLookup(ISampleInfo componentName) => beatmapHitsounds.Value;
|
protected override bool AllowSampleLookup(ISampleInfo componentName) => beatmapHitsounds.Value;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
// 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.Audio.Sample;
|
using osu.Framework.Audio.Sample;
|
||||||
@ -16,7 +16,7 @@ namespace osu.Game.Skinning
|
|||||||
Configuration = new DefaultSkinConfiguration();
|
Configuration = new DefaultSkinConfiguration();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Drawable GetDrawableComponent(string componentName) => null;
|
public override Drawable GetDrawableComponent(ISkinComponent component) => null;
|
||||||
|
|
||||||
public override Texture GetTexture(string componentName) => null;
|
public override Texture GetTexture(string componentName) => null;
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ namespace osu.Game.Skinning
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public interface ISkin
|
public interface ISkin
|
||||||
{
|
{
|
||||||
Drawable GetDrawableComponent(string componentName);
|
Drawable GetDrawableComponent(ISkinComponent component);
|
||||||
|
|
||||||
Texture GetTexture(string componentName);
|
Texture GetTexture(string componentName);
|
||||||
|
|
||||||
|
10
osu.Game/Skinning/ISkinComponent.cs
Normal file
10
osu.Game/Skinning/ISkinComponent.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
namespace osu.Game.Skinning
|
||||||
|
{
|
||||||
|
public interface ISkinComponent
|
||||||
|
{
|
||||||
|
string LookupName { get; }
|
||||||
|
}
|
||||||
|
}
|
@ -9,6 +9,7 @@ using osu.Framework.Graphics;
|
|||||||
using osu.Framework.Graphics.Textures;
|
using osu.Framework.Graphics.Textures;
|
||||||
using osu.Framework.IO.Stores;
|
using osu.Framework.IO.Stores;
|
||||||
using osu.Game.Audio;
|
using osu.Game.Audio;
|
||||||
|
using osu.Game.Rulesets.Scoring;
|
||||||
using osuTK.Graphics;
|
using osuTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.Skinning
|
namespace osu.Game.Skinning
|
||||||
@ -47,39 +48,30 @@ namespace osu.Game.Skinning
|
|||||||
Samples?.Dispose();
|
Samples?.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Drawable GetDrawableComponent(string componentName)
|
public override Drawable GetDrawableComponent(ISkinComponent component)
|
||||||
{
|
{
|
||||||
bool animatable = false;
|
switch (component)
|
||||||
bool looping = true;
|
|
||||||
|
|
||||||
switch (componentName)
|
|
||||||
{
|
{
|
||||||
case "Play/Miss":
|
case PlaySkinComponent<HitResult> resultComponent:
|
||||||
componentName = "hit0";
|
switch (resultComponent.Component)
|
||||||
animatable = true;
|
{
|
||||||
looping = false;
|
case HitResult.Miss:
|
||||||
break;
|
return this.GetAnimation("hit0", true, false);
|
||||||
|
|
||||||
case "Play/Meh":
|
case HitResult.Meh:
|
||||||
componentName = "hit50";
|
return this.GetAnimation("hit50", true, false);
|
||||||
animatable = true;
|
|
||||||
looping = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "Play/Good":
|
case HitResult.Good:
|
||||||
componentName = "hit100";
|
return this.GetAnimation("hit100", true, false);
|
||||||
animatable = true;
|
|
||||||
looping = false;
|
case HitResult.Great:
|
||||||
break;
|
return this.GetAnimation("hit300", true, false);
|
||||||
|
}
|
||||||
|
|
||||||
case "Play/Great":
|
|
||||||
componentName = "hit300";
|
|
||||||
animatable = true;
|
|
||||||
looping = false;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.GetAnimation(componentName, animatable, looping);
|
return this.GetAnimation(component.LookupName, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Texture GetTexture(string componentName)
|
public override Texture GetTexture(string componentName)
|
||||||
|
23
osu.Game/Skinning/PlaySkinComponent.cs
Normal file
23
osu.Game/Skinning/PlaySkinComponent.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace osu.Game.Skinning
|
||||||
|
{
|
||||||
|
public class PlaySkinComponent<T> : ISkinComponent where T : struct
|
||||||
|
{
|
||||||
|
public readonly T Component;
|
||||||
|
|
||||||
|
public PlaySkinComponent(T component)
|
||||||
|
{
|
||||||
|
Component = component;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual string RulesetPrefix => string.Empty;
|
||||||
|
protected virtual string ComponentName => Component.ToString();
|
||||||
|
|
||||||
|
public string LookupName =>
|
||||||
|
string.Join("/", new[] { "Play", RulesetPrefix, ComponentName }.Where(s => !string.IsNullOrEmpty(s)));
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
// 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;
|
||||||
@ -15,7 +15,7 @@ namespace osu.Game.Skinning
|
|||||||
|
|
||||||
public virtual SkinConfiguration Configuration { get; protected set; }
|
public virtual SkinConfiguration Configuration { get; protected set; }
|
||||||
|
|
||||||
public abstract Drawable GetDrawableComponent(string componentName);
|
public abstract Drawable GetDrawableComponent(ISkinComponent componentName);
|
||||||
|
|
||||||
public abstract SampleChannel GetSample(ISampleInfo sampleInfo);
|
public abstract SampleChannel GetSample(ISampleInfo sampleInfo);
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
// 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;
|
||||||
@ -125,7 +125,7 @@ namespace osu.Game.Skinning
|
|||||||
|
|
||||||
public event Action SourceChanged;
|
public event Action SourceChanged;
|
||||||
|
|
||||||
public Drawable GetDrawableComponent(string componentName) => CurrentSkin.Value.GetDrawableComponent(componentName);
|
public Drawable GetDrawableComponent(ISkinComponent component) => CurrentSkin.Value.GetDrawableComponent(component);
|
||||||
|
|
||||||
public Texture GetTexture(string componentName) => CurrentSkin.Value.GetTexture(componentName);
|
public Texture GetTexture(string componentName) => CurrentSkin.Value.GetTexture(componentName);
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ namespace osu.Game.Skinning
|
|||||||
|
|
||||||
private ISkinSource fallbackSource;
|
private ISkinSource fallbackSource;
|
||||||
|
|
||||||
protected virtual bool AllowDrawableLookup(string componentName) => true;
|
protected virtual bool AllowDrawableLookup(ISkinComponent component) => true;
|
||||||
|
|
||||||
protected virtual bool AllowTextureLookup(string componentName) => true;
|
protected virtual bool AllowTextureLookup(string componentName) => true;
|
||||||
|
|
||||||
@ -37,13 +37,13 @@ namespace osu.Game.Skinning
|
|||||||
RelativeSizeAxes = Axes.Both;
|
RelativeSizeAxes = Axes.Both;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Drawable GetDrawableComponent(string componentName)
|
public Drawable GetDrawableComponent(ISkinComponent component)
|
||||||
{
|
{
|
||||||
Drawable sourceDrawable;
|
Drawable sourceDrawable;
|
||||||
if (AllowDrawableLookup(componentName) && (sourceDrawable = skin?.GetDrawableComponent(componentName)) != null)
|
if (AllowDrawableLookup(component) && (sourceDrawable = skin?.GetDrawableComponent(component)) != null)
|
||||||
return sourceDrawable;
|
return sourceDrawable;
|
||||||
|
|
||||||
return fallbackSource?.GetDrawableComponent(componentName);
|
return fallbackSource?.GetDrawableComponent(component);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Texture GetTexture(string componentName)
|
public Texture GetTexture(string componentName)
|
||||||
|
@ -18,39 +18,39 @@ namespace osu.Game.Skinning
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public Drawable Drawable { get; private set; }
|
public Drawable Drawable { get; private set; }
|
||||||
|
|
||||||
private readonly string componentName;
|
private readonly ISkinComponent component;
|
||||||
|
|
||||||
private readonly ConfineMode confineMode;
|
private readonly ConfineMode confineMode;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create a new skinnable drawable.
|
/// Create a new skinnable drawable.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="name">The namespace-complete resource name for this skinnable element.</param>
|
/// <param name="component">The namespace-complete resource name for this skinnable element.</param>
|
||||||
/// <param name="defaultImplementation">A function to create the default skin implementation of this element.</param>
|
/// <param name="defaultImplementation">A function to create the default skin implementation of this element.</param>
|
||||||
/// <param name="allowFallback">A conditional to decide whether to allow fallback to the default implementation if a skinned element is not present.</param>
|
/// <param name="allowFallback">A conditional to decide whether to allow fallback to the default implementation if a skinned element is not present.</param>
|
||||||
/// <param name="confineMode">How (if at all) the <see cref="Drawable"/> should be resize to fit within our own bounds.</param>
|
/// <param name="confineMode">How (if at all) the <see cref="Drawable"/> should be resize to fit within our own bounds.</param>
|
||||||
public SkinnableDrawable(string name, Func<string, Drawable> defaultImplementation, Func<ISkinSource, bool> allowFallback = null, ConfineMode confineMode = ConfineMode.ScaleDownToFit)
|
public SkinnableDrawable(ISkinComponent component, Func<ISkinComponent, Drawable> defaultImplementation, Func<ISkinSource, bool> allowFallback = null, ConfineMode confineMode = ConfineMode.ScaleDownToFit)
|
||||||
: this(name, allowFallback, confineMode)
|
: this(component, allowFallback, confineMode)
|
||||||
{
|
{
|
||||||
createDefault = defaultImplementation;
|
createDefault = defaultImplementation;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected SkinnableDrawable(string name, Func<ISkinSource, bool> allowFallback = null, ConfineMode confineMode = ConfineMode.ScaleDownToFit)
|
protected SkinnableDrawable(ISkinComponent component, Func<ISkinSource, bool> allowFallback = null, ConfineMode confineMode = ConfineMode.ScaleDownToFit)
|
||||||
: base(allowFallback)
|
: base(allowFallback)
|
||||||
{
|
{
|
||||||
componentName = name;
|
this.component = component;
|
||||||
this.confineMode = confineMode;
|
this.confineMode = confineMode;
|
||||||
|
|
||||||
RelativeSizeAxes = Axes.Both;
|
RelativeSizeAxes = Axes.Both;
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly Func<string, Drawable> createDefault;
|
private readonly Func<ISkinComponent, Drawable> createDefault;
|
||||||
|
|
||||||
private readonly Cached scaling = new Cached();
|
private readonly Cached scaling = new Cached();
|
||||||
|
|
||||||
private bool isDefault;
|
private bool isDefault;
|
||||||
|
|
||||||
protected virtual Drawable CreateDefault(string name) => createDefault(name);
|
protected virtual Drawable CreateDefault(ISkinComponent component) => createDefault(component);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Whether to apply size restrictions (specified via <see cref="confineMode"/>) to the default implementation.
|
/// Whether to apply size restrictions (specified via <see cref="confineMode"/>) to the default implementation.
|
||||||
@ -59,13 +59,13 @@ namespace osu.Game.Skinning
|
|||||||
|
|
||||||
protected override void SkinChanged(ISkinSource skin, bool allowFallback)
|
protected override void SkinChanged(ISkinSource skin, bool allowFallback)
|
||||||
{
|
{
|
||||||
Drawable = skin.GetDrawableComponent(componentName);
|
Drawable = skin.GetDrawableComponent(component);
|
||||||
|
|
||||||
isDefault = false;
|
isDefault = false;
|
||||||
|
|
||||||
if (Drawable == null && allowFallback)
|
if (Drawable == null && allowFallback)
|
||||||
{
|
{
|
||||||
Drawable = CreateDefault(componentName);
|
Drawable = CreateDefault(component);
|
||||||
isDefault = true;
|
isDefault = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,11 +19,11 @@ namespace osu.Game.Skinning
|
|||||||
[Resolved]
|
[Resolved]
|
||||||
private TextureStore textures { get; set; }
|
private TextureStore textures { get; set; }
|
||||||
|
|
||||||
public SkinnableSprite(string name, Func<ISkinSource, bool> allowFallback = null, ConfineMode confineMode = ConfineMode.ScaleDownToFit)
|
public SkinnableSprite(ISkinComponent component, Func<ISkinSource, bool> allowFallback = null, ConfineMode confineMode = ConfineMode.ScaleDownToFit)
|
||||||
: base(name, allowFallback, confineMode)
|
: base(component, allowFallback, confineMode)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Drawable CreateDefault(string name) => new Sprite { Texture = textures.Get(name) };
|
protected override Drawable CreateDefault(ISkinComponent component) => new Sprite { Texture = textures.Get(component.LookupName) };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,8 @@ namespace osu.Game.Skinning
|
|||||||
{
|
{
|
||||||
public class SkinnableSpriteText : SkinnableDrawable, IHasText
|
public class SkinnableSpriteText : SkinnableDrawable, IHasText
|
||||||
{
|
{
|
||||||
public SkinnableSpriteText(string name, Func<string, SpriteText> defaultImplementation, Func<ISkinSource, bool> allowFallback = null, ConfineMode confineMode = ConfineMode.ScaleDownToFit)
|
public SkinnableSpriteText(ISkinComponent component, Func<ISkinComponent, SpriteText> defaultImplementation, Func<ISkinSource, bool> allowFallback = null, ConfineMode confineMode = ConfineMode.ScaleDownToFit)
|
||||||
: base(name, defaultImplementation, allowFallback, confineMode)
|
: base(component, defaultImplementation, allowFallback, confineMode)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user