// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Beatmaps; using osu.Game.Rulesets; namespace osu.Game.Skinning { /// /// A type of that provides access to the beatmap skin and user skin, /// each transformed with the ruleset's own skin transformer individually. /// public class RulesetSkinProvidingContainer : SkinProvidingContainer { private readonly Ruleset ruleset; private readonly IBeatmap beatmap; protected override Container Content { get; } public RulesetSkinProvidingContainer(Ruleset ruleset, IBeatmap beatmap, ISkin beatmapSkin) { this.ruleset = ruleset; this.beatmap = beatmap; InternalChild = new BeatmapSkinProvidingContainer(ruleset.CreateLegacySkinProvider(beatmapSkin, beatmap)) { Child = Content = new Container { RelativeSizeAxes = Axes.Both, } }; } [Resolved] private SkinManager skinManager { get; set; } [BackgroundDependencyLoader] private void load() { updateSkins(); } protected override void OnSourceChanged() { updateSkins(); base.OnSourceChanged(); } private void updateSkins() { SkinSources.Clear(); SkinSources.Add(ruleset.CreateLegacySkinProvider(skinManager.CurrentSkin.Value, beatmap)); if (skinManager.CurrentSkin.Value is LegacySkin) SkinSources.Add(ruleset.CreateLegacySkinProvider(skinManager.DefaultLegacySkin, beatmap)); SkinSources.Add(ruleset.CreateLegacySkinProvider(skinManager.DefaultSkin, beatmap)); } } }