using System; using System.Collections; using System.Collections.Generic; using System.Linq; using BITKit.Modification; using UnityEngine; namespace BITFALL.Cosmetic { [Serializable] public struct CosmeticServiceSingleton:ICosmeticService { public ICosmetic[] Cosmetics=>CosmeticService.Singleton.Cosmetics; public event Action OnCosmeticsChanged { add => CosmeticService.Singleton.OnCosmeticsChanged += value; remove => CosmeticService.Singleton.OnCosmeticsChanged -= value; } public IDictionary Modifies { get; set; } public IDictionary Modified { get; set; } public void Add(IModifyElement modify, object obj)=>CosmeticService.Singleton.Add(modify,obj); public void Remove(IModifyElement modify, out object obj)=>CosmeticService.Singleton.Remove(modify,out obj); } public class CosmeticService : MonoBehaviour,ICosmeticService { internal static ICosmeticService Singleton { get; private set; } [SerializeField] private AssetableCosmetic[] initialCosmetics; public ICosmetic[] Cosmetics { get; set; } = Array.Empty(); public event Action OnCosmeticsChanged; private void Awake() { Singleton = this; } private void Start() { Cosmetics = initialCosmetics.OfType().ToArray(); OnCosmeticsChanged?.Invoke(); } private readonly IModifyManager _modifyManager = new ModifyManager(); public IDictionary Modifies => _modifyManager.Modifies; public IDictionary Modified => _modifyManager.Modified; public void Add(IModifyElement modify, object obj) { _modifyManager.Add(modify, obj); OnCosmeticsChanged?.Invoke(); } public void Remove(IModifyElement modify, out object obj) { _modifyManager.Remove(modify, out obj); OnCosmeticsChanged?.Invoke(); } } }