Add Key Item tag and restrict it from being used/thrown/dropped

This commit is contained in:
2026-06-09 01:39:00 -07:00
parent fa248e5ba1
commit e889709a91
4 changed files with 7 additions and 6 deletions
@@ -23,5 +23,6 @@ public enum ItemTag
UseAllItems,
GlueOnEquip,
BreaksOnUnequip,
ContainsJewel
ContainsJewel,
KeyItem
}
+2 -2
View File
@@ -556,7 +556,7 @@ public partial class Game : Node3D, IGame
InventoryEventNotification.Invoke($"{boxItem.ItemName} contained {rareItem.ItemName} but cost dear life.");
break;
case ItemTag.TradeOneRandomItem:
var itemsWithoutBox = _player.Inventory.Items.Where(x => x != boxItem).ToList();
var itemsWithoutBox = _player.Inventory.Items.Where(x => x != boxItem).Where(x => x.ItemTag != ItemTag.KeyItem).ToList();
var rng = new RandomNumberGenerator();
rng.Randomize();
var index = rng.RandiRange(0, itemsWithoutBox.Count - 1);
@@ -603,7 +603,7 @@ public partial class Game : Node3D, IGame
_player.Inventory.Items.Remove(boxItem);
GameRepo.CloseInventory();
var itemsToThrow = _player.Inventory.Items.ToList();
var itemsToThrow = _player.Inventory.Items.Where(x => x.ItemTag != ItemTag.KeyItem).ToList();
_player.Inventory.Items.Clear();
double[] throwAngles = [0, -5, 5, -15, -25, 25];
var throwIndex = 0;
+2 -2
View File
@@ -355,7 +355,7 @@ public class EffectService
public void TradeRandomItem<T>(BoxItem box)
where T : IBaseInventoryItem
{
var tradableItems = _player.Inventory.Items.OfType<T>().ToList();
var tradableItems = _player.Inventory.Items.OfType<T>().Where(x => x.ItemTag != ItemTag.KeyItem).ToList();
var rng = new RandomNumberGenerator();
rng.Randomize();
var randomIndex = rng.RandiRange(0, tradableItems.Count - 1);
@@ -370,7 +370,7 @@ public class EffectService
public IEnumerable<IBaseInventoryItem> TradeAllRandomItems(BoxItem box)
{
var newInventory = new List<IBaseInventoryItem>();
var items = _player.Inventory.Items.ToList();
var items = _player.Inventory.Items.Where(x => x.ItemTag != ItemTag.KeyItem).ToList();
foreach (var item in items)
newInventory.Add(GetRandomItemOfType<IBaseInventoryItem>());
@@ -134,7 +134,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
private void ItemPressed(IItemSlot selectedItem)
{
if (_blocking)
if (_blocking || selectedItem.Item.Value.ItemTag == ItemTag.KeyItem)
return;
SetProcessInput(false);