using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using PckStudio.Core.Interfaces; using PckStudio.Core.Skin; namespace PckStudio.Core.DLC { public enum DLCSkinPackageOrder { ById, ByName, } public sealed class DLCSkinPackage : DLCPackage { public DLCSkinPackageOrder SkinPackageOrder { get; set; } = DLCSkinPackageOrder.ById; private readonly IDictionary _capes; private readonly IDictionary _skins; internal DLCSkinPackage(string name, int identifier, IEnumerable skins, IDictionary capes, IDLCPackage parentPackage) : base(name, identifier, parentPackage) { _skins = skins.ToDictionary(skin => skin.Identifier); _capes = capes; } internal DLCSkinPackage(string name, int identifier, IDLCPackage parentPackage = null) : this(name, identifier, Enumerable.Empty(), new Dictionary(), parentPackage) { } internal static IDLCPackage CreateEmpty(string name, int identifier, IDLCPackage parentPackage = null) => new DLCSkinPackage(name, identifier, parentPackage); internal static IDLCPackage CreateEmpty(IDLCPackage parentPackage) => CreateEmpty(parentPackage.Name, parentPackage.Identifier, parentPackage); public bool TryGetSkin(SkinIdentifier skinIdentifier, out Skin.Skin skin) => _skins.TryGetValue(skinIdentifier, out skin); public bool TryGetCape(int capeId, out Image cape) => _capes.TryGetValue(capeId, out cape); public bool ContainsSkin(SkinIdentifier skinIdentifier) => _skins.ContainsKey(skinIdentifier); public void AddSkin(Skin.Skin skin) { _skins.Add(skin.Identifier, skin); } public bool RemoveSkin(SkinIdentifier skinIdentifier) => _skins.Remove(skinIdentifier); public Skin.Skin GetSkin(SkinIdentifier skinIdentifier) => _skins[skinIdentifier]; public IReadOnlyCollection GetSkins() => _skins.Values.Cast().ToArray(); public override DLCPackageType GetDLCPackageType() => DLCPackageType.SkinPack; internal KeyValuePair[] GetCapes() => _capes.ToArray(); } }