using System; using System.Collections.Generic; using YachtDice.Dice; namespace YachtDice.Player { public class DiceCollection { private readonly List _ownedDice = new(); public event Action OnChanged; public IReadOnlyList OwnedDice => _ownedDice; public void Add(DiceDefinition definition) { if (definition == null) return; if (OwnsById(definition.Id)) return; _ownedDice.Add(definition); OnChanged?.Invoke(); } public void Remove(DiceDefinition definition) { if (_ownedDice.Remove(definition)) OnChanged?.Invoke(); } public bool OwnsById(string id) { for (int i = 0; i < _ownedDice.Count; i++) { if (_ownedDice[i] != null && _ownedDice[i].Id == id) return true; } return false; } public List GetSaveData() { var ids = new List(); for (int i = 0; i < _ownedDice.Count; i++) ids.Add(_ownedDice[i].Id); return ids; } public void LoadSaveData(List diceIds, DiceCatalog catalog) { _ownedDice.Clear(); if (diceIds == null) { OnChanged?.Invoke(); return; } for (int i = 0; i < diceIds.Count; i++) { var def = catalog.FindById(diceIds[i]); if (def != null) _ownedDice.Add(def); } OnChanged?.Invoke(); } public void Clear() { _ownedDice.Clear(); OnChanged?.Invoke(); } } }