using System; using System.Collections.Generic; using YachtDice.Modifiers.Definition; using YachtDice.Modifiers.Runtime; namespace YachtDice.Inventory { public class InventoryModel { private readonly ModifierRegistry _registry; public event Action OnInventoryChanged; public event Action> OnActiveModifiersChanged; public InventoryModel(ModifierRegistry registry) { this._registry = registry; registry.OnChanged += () => OnInventoryChanged?.Invoke(); registry.OnActiveModifiersChanged += list => OnActiveModifiersChanged?.Invoke(list); } public IReadOnlyList OwnedModifiers => _registry.All; public int MaxActiveSlots => _registry.MaxActiveSlots; public int ActiveCount => _registry.ActiveCount; public void SetMaxActiveSlots(int slots) => _registry.SetMaxActiveSlots(slots); public void AddModifier(ModifierDefinition definition) => _registry.Add(definition); public void RemoveModifier(ModifierInstance instance) => _registry.Remove(instance); public bool TryActivate(ModifierInstance instance) => _registry.TryActivate(instance); public void Deactivate(ModifierInstance instance) => _registry.Deactivate(instance); public void ConsumeUseOnActive() => _registry.ConsumeChargesOnActive(); public List GetActiveModifierDefinitions() { var result = new List(); var active = _registry.Active; foreach (var t in active) result.Add(t.Definition); return result; } } }