52 lines
1.7 KiB
C#
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);
|
|
}
|