Files
GameJamDungeon/Zennysoft.Game.Ma/src/items/ItemReroller.cs
T
2026-02-24 10:39:34 -08:00

70 lines
1.8 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)
{
var item = _database.PickItem(itemToReroll);
item.Init();
return item;
}
private Armor RerollItemInternal(Armor itemToReroll)
{
var item = _database.PickItem(itemToReroll);
item.Init();
return item;
}
private Accessory RerollItemInternal(Accessory itemToReroll)
{
var item = _database.PickItem(itemToReroll);
item.Init();
return item;
}
private ConsumableItem RerollItemInternal(ConsumableItem itemToReroll) => _database.PickItem(itemToReroll);
private ThrowableItem RerollItemInternal(ThrowableItem itemToReroll) => _database.PickItem(itemToReroll);
private EffectItem RerollItemInternal(EffectItem itemToReroll) => _database.PickItem(itemToReroll);
}