using Zennysoft.Ma.Adapter; namespace Zennysoft.Game.Ma; public class ItemReroller { private readonly ItemDatabase _database; public ItemReroller(ItemDatabase database) { _database = database; } public T RerollItem(T itemToReroll, IInventory inventory, bool insertIntoInventory = true) where T : IBaseInventoryItem { var currentIndex = inventory.Items.IndexOf(itemToReroll); if (insertIntoInventory) inventory.Remove(itemToReroll); var rolledItem = RerollItemInternal((dynamic)itemToReroll); if (insertIntoInventory) inventory.TryInsert(rolledItem, currentIndex); return rolledItem; } public IBaseInventoryItem RerollItemToAny(IBaseInventoryItem itemToReroll, IInventory inventory, bool insertIntoInventory = true) { var currentIndex = inventory.Items.IndexOf(itemToReroll); if (insertIntoInventory) inventory.Remove(itemToReroll); var rolledItem = _database.PickItem(itemToReroll); if (insertIntoInventory) inventory.TryInsert(rolledItem, currentIndex); return rolledItem; } private Weapon RerollItemInternal(Weapon itemToReroll) => _database.PickItem(itemToReroll); private Armor RerollItemInternal(Armor itemToReroll) => _database.PickItem(itemToReroll); private Accessory RerollItemInternal(Accessory itemToReroll) => _database.PickItem(itemToReroll); private ConsumableItem RerollItemInternal(ConsumableItem itemToReroll) => _database.PickItem(itemToReroll); private ThrowableItem RerollItemInternal(ThrowableItem itemToReroll) => _database.PickItem(itemToReroll); private EffectItem RerollItemInternal(EffectItem itemToReroll) => _database.PickItem(itemToReroll); }