Revamp item spawn behavior
This commit is contained in:
@@ -23,17 +23,23 @@ public class ItemDatabase
|
||||
return PickItemInternal(itemsToSelectFrom, itemsToExclude);
|
||||
}
|
||||
|
||||
public T PickItemFromList<T>(T[] spawnableItems)
|
||||
where T : IBaseInventoryItem
|
||||
{
|
||||
return PickItemInternal(spawnableItems);
|
||||
}
|
||||
|
||||
public T PickRareItem<T>(params T[] itemsToExclude)
|
||||
where T : IBaseInventoryItem
|
||||
{
|
||||
var getRareItems = Items.OfType<T>().Where(x => x.SpawnRate < 0.1f);
|
||||
var getRareItems = Items.OfType<T>().Where(x => x.RarityTag == RarityTag.Rare);
|
||||
return PickItemInternal(getRareItems, itemsToExclude);
|
||||
}
|
||||
|
||||
public T PickBasicItem<T>(params T[] itemsToExclude)
|
||||
where T : IBaseInventoryItem
|
||||
{
|
||||
var getBasicItems = Items.OfType<T>().Where(x => x.SpawnRate > 0.5f);
|
||||
var getBasicItems = Items.OfType<T>().Where(x => x.RarityTag == RarityTag.Common);
|
||||
return PickItemInternal(getBasicItems, itemsToExclude);
|
||||
}
|
||||
|
||||
@@ -42,14 +48,17 @@ public class ItemDatabase
|
||||
{
|
||||
var rng = new RandomNumberGenerator();
|
||||
rng.Randomize();
|
||||
var validItems = itemsToSelectFrom.ToArray();
|
||||
|
||||
if (itemsToExclude.Any())
|
||||
itemsToSelectFrom = itemsToSelectFrom.Except(itemsToExclude);
|
||||
validItems = [.. validItems.Except(itemsToExclude)];
|
||||
|
||||
itemsToSelectFrom = itemsToSelectFrom.Where(x => x.ItemTag != ItemTag.MysteryItem);
|
||||
validItems = [.. validItems.Where(x => x.ItemTag != ItemTag.MysteryItem)];
|
||||
|
||||
var weights = itemsToSelectFrom.Select(x => x.SpawnRate).ToArray();
|
||||
var selectedItem = itemsToSelectFrom.ToArray()[rng.RandWeighted(weights)];
|
||||
var weights = validItems.Select(x => x.SpawnRate).ToArray();
|
||||
var index = rng.RandWeighted(weights);
|
||||
GD.Print($"Item Spawn Index: {index}, Array Size: {validItems.Count()}");
|
||||
var selectedItem = validItems[index];
|
||||
return selectedItem;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user