// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Game.Audio; using osu.Game.Configuration; namespace osu.Game.Skinning { /// /// A container which overrides existing skin options with beatmap-local values. /// public class BeatmapSkinProvidingContainer : SkinProvidingContainer { private Bindable beatmapSkins; private Bindable beatmapHitsounds; protected override bool AllowConfigurationLookup { get { if (beatmapSkins == null) throw new InvalidOperationException($"{nameof(BeatmapSkinProvidingContainer)} needs to be loaded before being consumed."); return beatmapSkins.Value; } } protected override bool AllowDrawableLookup(ISkinComponent component) { if (beatmapSkins == null) throw new InvalidOperationException($"{nameof(BeatmapSkinProvidingContainer)} needs to be loaded before being consumed."); return beatmapSkins.Value; } protected override bool AllowTextureLookup(string componentName) { if (beatmapSkins == null) throw new InvalidOperationException($"{nameof(BeatmapSkinProvidingContainer)} needs to be loaded before being consumed."); return beatmapSkins.Value; } protected override bool AllowSampleLookup(ISampleInfo componentName) { if (beatmapSkins == null) throw new InvalidOperationException($"{nameof(BeatmapSkinProvidingContainer)} needs to be loaded before being consumed."); return beatmapHitsounds.Value; } public BeatmapSkinProvidingContainer(ISkin skin) : base(skin) { } protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent) { var config = parent.Get(); beatmapSkins = config.GetBindable(OsuSetting.BeatmapSkins); beatmapHitsounds = config.GetBindable(OsuSetting.BeatmapHitsounds); return base.CreateChildDependencies(parent); } [BackgroundDependencyLoader] private void load() { beatmapSkins.BindValueChanged(_ => TriggerSourceChanged()); beatmapHitsounds.BindValueChanged(_ => TriggerSourceChanged()); } } }