// 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.Audio.Sample; using osu.Framework.Graphics; using osu.Framework.Graphics.Textures; namespace osu.Game.Skinning { public abstract class Skin : IDisposable, ISkin { public readonly SkinInfo SkinInfo; public virtual SkinConfiguration Configuration { get; protected set; } public abstract Drawable GetDrawableComponent(string componentName); public abstract SampleChannel GetSample(string sampleName); public abstract Texture GetTexture(string componentName); public TValue GetValue(Func query) where TConfiguration : SkinConfiguration => Configuration is TConfiguration conf ? query.Invoke(conf) : default; protected Skin(SkinInfo skin) { SkinInfo = skin; } #region Disposal ~Skin() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private bool isDisposed; protected virtual void Dispose(bool isDisposing) { if (isDisposed) return; isDisposed = true; } #endregion } }