In progress item changes
This commit is contained in:
@@ -14,37 +14,37 @@ public class ItemDatabase
|
||||
|
||||
public static ItemDatabase Instance { get { return lazy.Value; } }
|
||||
|
||||
public ImmutableList<InventoryItem> Items { get; set; }
|
||||
public ImmutableList<IBaseInventoryItem> Items { get; set; }
|
||||
|
||||
public T PickItem<T>(T itemToExclude = null)
|
||||
where T : InventoryItem
|
||||
public T PickItem<T>(params T[] itemsToExclude)
|
||||
where T : IBaseInventoryItem
|
||||
{
|
||||
var itemsToSelectFrom = Items.OfType<T>();
|
||||
return PickItemInternal(itemsToSelectFrom, itemToExclude);
|
||||
return PickItemInternal(itemsToSelectFrom, itemsToExclude);
|
||||
}
|
||||
|
||||
public T PickRareItem<T>(T itemToExclude = null)
|
||||
where T : InventoryItem
|
||||
public T PickRareItem<T>(params T[] itemsToExclude)
|
||||
where T : IBaseInventoryItem
|
||||
{
|
||||
var getRareItems = Items.OfType<T>().Where(x => x.SpawnRate < 0.1f);
|
||||
return PickItemInternal(getRareItems, itemToExclude);
|
||||
return PickItemInternal(getRareItems, itemsToExclude);
|
||||
}
|
||||
|
||||
public T PickBasicItem<T>(T itemToExclude = null)
|
||||
where T : InventoryItem
|
||||
public T PickBasicItem<T>(params T[] itemsToExclude)
|
||||
where T : IBaseInventoryItem
|
||||
{
|
||||
var getBasicItems = Items.OfType<T>().Where(x => x.SpawnRate > 0.5f);
|
||||
return PickItemInternal(getBasicItems, itemToExclude);
|
||||
return PickItemInternal(getBasicItems, itemsToExclude);
|
||||
}
|
||||
|
||||
private T PickItemInternal<T>(IEnumerable<T> itemsToSelectFrom, T itemToExclude = null)
|
||||
where T : InventoryItem
|
||||
private T PickItemInternal<T>(IEnumerable<T> itemsToSelectFrom, params T[] itemsToExclude)
|
||||
where T : IBaseInventoryItem
|
||||
{
|
||||
var rng = new RandomNumberGenerator();
|
||||
rng.Randomize();
|
||||
|
||||
if (itemToExclude is not null)
|
||||
itemsToSelectFrom = [.. itemsToSelectFrom.Where(x => x.ItemName != itemToExclude.ItemName)];
|
||||
if (itemsToExclude.Any())
|
||||
itemsToSelectFrom.Except(itemsToExclude);
|
||||
|
||||
var weights = itemsToSelectFrom.Select(x => x.SpawnRate).ToArray();
|
||||
var selectedItem = itemsToSelectFrom.ToArray()[rng.RandWeighted(weights)];
|
||||
@@ -54,7 +54,7 @@ public class ItemDatabase
|
||||
|
||||
private ItemDatabase()
|
||||
{
|
||||
var database = new List<InventoryItem>();
|
||||
var database = new List<IBaseInventoryItem>();
|
||||
var armorResources = DirAccess.GetFilesAt("res://src/items/armor/resources/");
|
||||
var weaponResources = DirAccess.GetFilesAt("res://src/items/weapons/resources/");
|
||||
var accessoryResources = DirAccess.GetFilesAt("res://src/items/accessory/resources/");
|
||||
|
||||
Reference in New Issue
Block a user