Files
GameJamDungeon/Zennysoft.Game.Ma/src/items/ItemReroller.cs

52 lines
1.7 KiB
C#

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>(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);
}