mirror of
https://github.com/ppy/osu.git
synced 2025-02-05 20:42:55 +08:00
Refactor legacy skin piece to allow texture update
This commit is contained in:
parent
56699df0cf
commit
87189452d1
100
osu.Game.Rulesets.Catch/Skinning/LegacyCatchHitObjectPiece.cs
Normal file
100
osu.Game.Rulesets.Catch/Skinning/LegacyCatchHitObjectPiece.cs
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
// 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 JetBrains.Annotations;
|
||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Bindables;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Pooling;
|
||||||
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
using osu.Framework.Graphics.Textures;
|
||||||
|
using osu.Game.Rulesets.Catch.Objects.Drawables;
|
||||||
|
using osu.Game.Rulesets.Catch.UI;
|
||||||
|
using osu.Game.Rulesets.Objects.Drawables;
|
||||||
|
using osu.Game.Skinning;
|
||||||
|
using osuTK;
|
||||||
|
using osuTK.Graphics;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Catch.Skinning
|
||||||
|
{
|
||||||
|
public abstract class LegacyCatchHitObjectPiece : PoolableDrawable
|
||||||
|
{
|
||||||
|
public readonly Bindable<Color4> AccentColour = new Bindable<Color4>();
|
||||||
|
public readonly Bindable<bool> HyperDash = new Bindable<bool>();
|
||||||
|
|
||||||
|
private readonly Sprite colouredSprite;
|
||||||
|
private readonly Sprite overlaySprite;
|
||||||
|
private readonly Sprite hyperSprite;
|
||||||
|
|
||||||
|
[Resolved]
|
||||||
|
private ISkinSource skin { get; set; }
|
||||||
|
|
||||||
|
protected ISkinSource Skin => skin;
|
||||||
|
|
||||||
|
[Resolved(canBeNull: true)]
|
||||||
|
private DrawableHitObject drawableHitObject { get; set; }
|
||||||
|
|
||||||
|
[CanBeNull]
|
||||||
|
protected DrawablePalpableCatchHitObject DrawableHitObject => (DrawablePalpableCatchHitObject)drawableHitObject;
|
||||||
|
|
||||||
|
protected LegacyCatchHitObjectPiece()
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both;
|
||||||
|
|
||||||
|
InternalChildren = new Drawable[]
|
||||||
|
{
|
||||||
|
colouredSprite = new Sprite
|
||||||
|
{
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
},
|
||||||
|
overlaySprite = new Sprite
|
||||||
|
{
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
},
|
||||||
|
hyperSprite = new Sprite
|
||||||
|
{
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
Blending = BlendingParameters.Additive,
|
||||||
|
Depth = 1,
|
||||||
|
Alpha = 0,
|
||||||
|
Scale = new Vector2(1.2f),
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void LoadComplete()
|
||||||
|
{
|
||||||
|
base.LoadComplete();
|
||||||
|
|
||||||
|
if (DrawableHitObject != null)
|
||||||
|
{
|
||||||
|
AccentColour.BindTo(DrawableHitObject.AccentColour);
|
||||||
|
HyperDash.BindTo(DrawableHitObject.HyperDash);
|
||||||
|
}
|
||||||
|
|
||||||
|
hyperSprite.Colour = Skin.GetConfig<CatchSkinColour, Color4>(CatchSkinColour.HyperDashFruit)?.Value ??
|
||||||
|
Skin.GetConfig<CatchSkinColour, Color4>(CatchSkinColour.HyperDash)?.Value ??
|
||||||
|
Catcher.DEFAULT_HYPER_DASH_COLOUR;
|
||||||
|
|
||||||
|
AccentColour.BindValueChanged(colour =>
|
||||||
|
{
|
||||||
|
colouredSprite.Colour = LegacyColourCompatibility.DisallowZeroAlpha(colour.NewValue);
|
||||||
|
}, true);
|
||||||
|
|
||||||
|
HyperDash.BindValueChanged(hyper =>
|
||||||
|
{
|
||||||
|
hyperSprite.Alpha = hyper.NewValue ? 0.7f : 0;
|
||||||
|
}, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void SetTexture(Texture texture, Texture overlayTexture)
|
||||||
|
{
|
||||||
|
colouredSprite.Texture = texture;
|
||||||
|
overlaySprite.Texture = overlayTexture;
|
||||||
|
hyperSprite.Texture = texture;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
20
osu.Game.Rulesets.Catch/Skinning/LegacyDropletPiece.cs
Normal file
20
osu.Game.Rulesets.Catch/Skinning/LegacyDropletPiece.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// 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.Framework.Graphics.Textures;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Catch.Skinning
|
||||||
|
{
|
||||||
|
public class LegacyDropletPiece : LegacyCatchHitObjectPiece
|
||||||
|
{
|
||||||
|
protected override void LoadComplete()
|
||||||
|
{
|
||||||
|
base.LoadComplete();
|
||||||
|
|
||||||
|
Texture texture = Skin.GetTexture("fruit-drop");
|
||||||
|
Texture overlayTexture = Skin.GetTexture("fruit-drop-overlay");
|
||||||
|
|
||||||
|
SetTexture(texture, overlayTexture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,83 +1,39 @@
|
|||||||
// 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.Allocation;
|
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics.Textures;
|
||||||
using osu.Framework.Graphics.Containers;
|
|
||||||
using osu.Framework.Graphics.Sprites;
|
|
||||||
using osu.Game.Rulesets.Catch.Objects.Drawables;
|
using osu.Game.Rulesets.Catch.Objects.Drawables;
|
||||||
using osu.Game.Rulesets.Catch.UI;
|
|
||||||
using osu.Game.Rulesets.Objects.Drawables;
|
|
||||||
using osu.Game.Skinning;
|
|
||||||
using osuTK;
|
|
||||||
using osuTK.Graphics;
|
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Catch.Skinning
|
namespace osu.Game.Rulesets.Catch.Skinning
|
||||||
{
|
{
|
||||||
internal class LegacyFruitPiece : CompositeDrawable
|
internal class LegacyFruitPiece : LegacyCatchHitObjectPiece
|
||||||
{
|
{
|
||||||
private readonly string lookupName;
|
public readonly Bindable<FruitVisualRepresentation> VisualRepresentation = new Bindable<FruitVisualRepresentation>();
|
||||||
|
|
||||||
private readonly Bindable<Color4> accentColour = new Bindable<Color4>();
|
private readonly string[] lookupNames =
|
||||||
private readonly Bindable<bool> hyperDash = new Bindable<bool>();
|
|
||||||
private Sprite colouredSprite;
|
|
||||||
|
|
||||||
public LegacyFruitPiece(string lookupName)
|
|
||||||
{
|
{
|
||||||
this.lookupName = lookupName;
|
"fruit-pear", "fruit-grapes", "fruit-apple", "fruit-orange", "fruit-bananas"
|
||||||
RelativeSizeAxes = Axes.Both;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
|
||||||
private void load(DrawableHitObject drawableObject, ISkinSource skin)
|
|
||||||
{
|
|
||||||
var drawableCatchObject = (DrawablePalpableCatchHitObject)drawableObject;
|
|
||||||
|
|
||||||
accentColour.BindTo(drawableCatchObject.AccentColour);
|
|
||||||
hyperDash.BindTo(drawableCatchObject.HyperDash);
|
|
||||||
|
|
||||||
InternalChildren = new Drawable[]
|
|
||||||
{
|
|
||||||
colouredSprite = new Sprite
|
|
||||||
{
|
|
||||||
Texture = skin.GetTexture(lookupName),
|
|
||||||
Anchor = Anchor.Centre,
|
|
||||||
Origin = Anchor.Centre,
|
|
||||||
},
|
|
||||||
new Sprite
|
|
||||||
{
|
|
||||||
Texture = skin.GetTexture($"{lookupName}-overlay"),
|
|
||||||
Anchor = Anchor.Centre,
|
|
||||||
Origin = Anchor.Centre,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
if (hyperDash.Value)
|
|
||||||
{
|
|
||||||
var hyperDashOverlay = new Sprite
|
|
||||||
{
|
|
||||||
Anchor = Anchor.Centre,
|
|
||||||
Origin = Anchor.Centre,
|
|
||||||
Blending = BlendingParameters.Additive,
|
|
||||||
Depth = 1,
|
|
||||||
Alpha = 0.7f,
|
|
||||||
Scale = new Vector2(1.2f),
|
|
||||||
Texture = skin.GetTexture(lookupName),
|
|
||||||
Colour = skin.GetConfig<CatchSkinColour, Color4>(CatchSkinColour.HyperDashFruit)?.Value ??
|
|
||||||
skin.GetConfig<CatchSkinColour, Color4>(CatchSkinColour.HyperDash)?.Value ??
|
|
||||||
Catcher.DEFAULT_HYPER_DASH_COLOUR,
|
|
||||||
};
|
|
||||||
|
|
||||||
AddInternal(hyperDashOverlay);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
|
||||||
accentColour.BindValueChanged(colour => colouredSprite.Colour = LegacyColourCompatibility.DisallowZeroAlpha(colour.NewValue), true);
|
var fruit = (DrawableFruit)DrawableHitObject;
|
||||||
|
|
||||||
|
if (fruit != null)
|
||||||
|
VisualRepresentation.BindTo(fruit.VisualRepresentation);
|
||||||
|
|
||||||
|
VisualRepresentation.BindValueChanged(visual => setTexture(visual.NewValue), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setTexture(FruitVisualRepresentation visualRepresentation)
|
||||||
|
{
|
||||||
|
Texture texture = Skin.GetTexture(lookupNames[(int)visualRepresentation]);
|
||||||
|
Texture overlayTexture = Skin.GetTexture(lookupNames[(int)visualRepresentation] + "-overlay");
|
||||||
|
|
||||||
|
SetTexture(texture, overlayTexture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user