(Hopefully) Persist inventory index when using/throwing/dropping items from inventory

This commit is contained in:
2026-06-07 18:55:33 -07:00
parent 696d995e61
commit d934461b23
@@ -55,7 +55,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
private List<IItemSlot> ItemSlots; private List<IItemSlot> ItemSlots;
private IItemSlot _currentlySelected; private (IItemSlot ItemSlot, int InventoryIndex) _currentlySelected;
private bool _blocking = false; private bool _blocking = false;
@@ -96,9 +96,9 @@ public partial class InventoryMenu : Control, IInventoryMenu
var validSelectableItems = _player.Inventory.Items.ToList(); var validSelectableItems = _player.Inventory.Items.ToList();
if (Input.IsActionJustPressed(GameInputs.MoveUp) && _currentlySelected != null && _currentlySelected.Item.Value != validSelectableItems.First()) if (Input.IsActionJustPressed(GameInputs.MoveUp) && _currentlySelected.ItemSlot != null && _currentlySelected.ItemSlot.Item.Value != validSelectableItems.First())
SfxDatabase.Instance.Play(SoundEffect.MoveUI); SfxDatabase.Instance.Play(SoundEffect.MoveUI);
if (Input.IsActionJustPressed(GameInputs.MoveDown) && _currentlySelected != null && _currentlySelected.Item.Value != validSelectableItems.Last()) if (Input.IsActionJustPressed(GameInputs.MoveDown) && _currentlySelected.ItemSlot != null && _currentlySelected.ItemSlot.Item.Value != validSelectableItems.Last())
SfxDatabase.Instance.Play(SoundEffect.MoveUI); SfxDatabase.Instance.Play(SoundEffect.MoveUI);
if (Input.IsActionJustPressed(GameInputs.Interact)) if (Input.IsActionJustPressed(GameInputs.Interact))
SfxDatabase.Instance.Play(SoundEffect.CancelUI); SfxDatabase.Instance.Play(SoundEffect.CancelUI);
@@ -124,7 +124,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
MenuPanel.Hide(); MenuPanel.Hide();
SetProcessInput(false); SetProcessInput(false);
AugmentMenu.SetProcessInput(true); AugmentMenu.SetProcessInput(true);
AugmentMenu.OpenAugmentMenu(_currentlySelected.Item.Value as IAugmentItem); AugmentMenu.OpenAugmentMenu(_currentlySelected.ItemSlot.Item.Value as IAugmentItem);
} }
private void ActionPanel_ReturnToGameAction() private void ActionPanel_ReturnToGameAction()
@@ -146,7 +146,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
private void ItemSelected(IItemSlot selectedItem) private void ItemSelected(IItemSlot selectedItem)
{ {
_currentlySelected = selectedItem; _currentlySelected = (selectedItem, ItemSlots.IndexOf(selectedItem));
ItemName.Text = selectedItem.Item.Value.ItemName; ItemName.Text = selectedItem.Item.Value.ItemName;
ItemType.Text = SetItemTypeName(selectedItem.Item.Value); ItemType.Text = SetItemTypeName(selectedItem.Item.Value);
ItemParameter.Text = GetItemParameterText(selectedItem.Item.Value); ItemParameter.Text = GetItemParameterText(selectedItem.Item.Value);
@@ -170,14 +170,17 @@ public partial class InventoryMenu : Control, IInventoryMenu
for (var i = 0; i < inventory.Count; i++) for (var i = 0; i < inventory.Count; i++)
ItemSlots[i].SetItemToSlot(inventory[i]); ItemSlots[i].SetItemToSlot(inventory[i]);
if (_currentlySelected != null && !inventory.Contains(_currentlySelected.Item.Value)) if (_currentlySelected.ItemSlot != null && !inventory.Contains(_currentlySelected.ItemSlot.Item.Value))
_currentlySelected = null; _currentlySelected = (null, -1);
if (_currentlySelected == null && inventory.Count > 0) if (_currentlySelected.ItemSlot == null && inventory.Count > 0)
_currentlySelected = ItemSlots.FirstOrDefault(x => x.Item.Value == inventory.First()); {
var newItem = ItemSlots.FirstOrDefault(x => x.Item.Value == inventory.First());
_currentlySelected = (newItem, ItemSlots.IndexOf(newItem));
}
if (inventory.Count > 0) if (inventory.Count > 0)
_currentlySelected.FocusItem(); _currentlySelected.ItemSlot.FocusItem();
ActionPanel.Hide(); ActionPanel.Hide();
} }
@@ -213,8 +216,12 @@ public partial class InventoryMenu : Control, IInventoryMenu
ActionPanel.Hide(); ActionPanel.Hide();
SetProcessInput(true); SetProcessInput(true);
ActionPanel.SetProcessInput(false); ActionPanel.SetProcessInput(false);
if (_player.Inventory.Items.Any() && !_player.Inventory.Items.Contains(_currentlySelected.Item.Value)) if (_player.Inventory.Items.Count != 0 && !_player.Inventory.Items.Contains(_currentlySelected.ItemSlot.Item.Value))
_currentlySelected = null; {
var newIndex = Mathf.Max(0, _currentlySelected.InventoryIndex - 1);
_currentlySelected = (ItemSlots[newIndex], newIndex);
_currentlySelected.ItemSlot.FocusItem();
}
ResetInventoryState(); ResetInventoryState();
} }
@@ -242,8 +249,8 @@ public partial class InventoryMenu : Control, IInventoryMenu
return item switch return item switch
{ {
Weapon weapon => $"ATK: {(weapon.ItemTag == ItemTag.MysteryItem ? "???" : weapon.BonusAttack)}", Weapon weapon => $"ATK: {(weapon.ItemTag == ItemTag.MysteryItem ? "???" : weapon.BonusAttack):D2}",
Armor armor => $"DEF: {(armor.ItemTag == ItemTag.MysteryItem ? "???" : armor.BonusDefense)}", Armor armor => $"DEF: {(armor.ItemTag == ItemTag.MysteryItem ? "???" : armor.BonusDefense):D2}",
_ => string.Empty, _ => string.Empty,
}; };
} }