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, UseAllItems,
GlueOnEquip, GlueOnEquip,
BreaksOnUnequip, 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."); InventoryEventNotification.Invoke($"{boxItem.ItemName} contained {rareItem.ItemName} but cost dear life.");
break; break;
case ItemTag.TradeOneRandomItem: 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(); var rng = new RandomNumberGenerator();
rng.Randomize(); rng.Randomize();
var index = rng.RandiRange(0, itemsWithoutBox.Count - 1); var index = rng.RandiRange(0, itemsWithoutBox.Count - 1);
@@ -603,7 +603,7 @@ public partial class Game : Node3D, IGame
_player.Inventory.Items.Remove(boxItem); _player.Inventory.Items.Remove(boxItem);
GameRepo.CloseInventory(); GameRepo.CloseInventory();
var itemsToThrow = _player.Inventory.Items.ToList(); var itemsToThrow = _player.Inventory.Items.Where(x => x.ItemTag != ItemTag.KeyItem).ToList();
_player.Inventory.Items.Clear(); _player.Inventory.Items.Clear();
double[] throwAngles = [0, -5, 5, -15, -25, 25]; double[] throwAngles = [0, -5, 5, -15, -25, 25];
var throwIndex = 0; var throwIndex = 0;
+2 -2
View File
@@ -355,7 +355,7 @@ public class EffectService
public void TradeRandomItem<T>(BoxItem box) public void TradeRandomItem<T>(BoxItem box)
where T : IBaseInventoryItem 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(); var rng = new RandomNumberGenerator();
rng.Randomize(); rng.Randomize();
var randomIndex = rng.RandiRange(0, tradableItems.Count - 1); var randomIndex = rng.RandiRange(0, tradableItems.Count - 1);
@@ -370,7 +370,7 @@ public class EffectService
public IEnumerable<IBaseInventoryItem> TradeAllRandomItems(BoxItem box) public IEnumerable<IBaseInventoryItem> TradeAllRandomItems(BoxItem box)
{ {
var newInventory = new List<IBaseInventoryItem>(); 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) foreach (var item in items)
newInventory.Add(GetRandomItemOfType<IBaseInventoryItem>()); newInventory.Add(GetRandomItemOfType<IBaseInventoryItem>());
@@ -134,7 +134,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
private void ItemPressed(IItemSlot selectedItem) private void ItemPressed(IItemSlot selectedItem)
{ {
if (_blocking) if (_blocking || selectedItem.Item.Value.ItemTag == ItemTag.KeyItem)
return; return;
SetProcessInput(false); SetProcessInput(false);