Files
PCK-Studio/PckStudio.Core/DLC/DLCSkinPackage.cs
2025-12-14 04:02:14 +01:00

59 lines
2.3 KiB
C#

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<int, Image> _capes;
private readonly IDictionary<SkinIdentifier, Skin.Skin> _skins;
internal DLCSkinPackage(string name, int identifier, IEnumerable<Skin.Skin> skins, IDictionary<int, Image> 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<Skin.Skin>(), new Dictionary<int, Image>(), 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<Skin.Skin> GetSkins() => _skins.Values.Cast<Skin.Skin>().ToArray();
public override DLCPackageType GetDLCPackageType() => DLCPackageType.SkinPack;
internal KeyValuePair<int, Image>[] GetCapes() => _capes.ToArray();
}
}