Revamp item spawn behavior

This commit is contained in:
2026-06-12 18:09:52 -07:00
parent 403b136c5c
commit 8575cd6ddf
154 changed files with 4769 additions and 352 deletions
+15 -6
View File
@@ -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;
}