(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 IItemSlot _currentlySelected;
private (IItemSlot ItemSlot, int InventoryIndex) _currentlySelected;
private bool _blocking = false;
@@ -96,9 +96,9 @@ public partial class InventoryMenu : Control, IInventoryMenu
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);
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);
if (Input.IsActionJustPressed(GameInputs.Interact))
SfxDatabase.Instance.Play(SoundEffect.CancelUI);
@@ -124,7 +124,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
MenuPanel.Hide();
SetProcessInput(false);
AugmentMenu.SetProcessInput(true);
AugmentMenu.OpenAugmentMenu(_currentlySelected.Item.Value as IAugmentItem);
AugmentMenu.OpenAugmentMenu(_currentlySelected.ItemSlot.Item.Value as IAugmentItem);
}
private void ActionPanel_ReturnToGameAction()
@@ -146,7 +146,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
private void ItemSelected(IItemSlot selectedItem)
{
_currentlySelected = selectedItem;
_currentlySelected = (selectedItem, ItemSlots.IndexOf(selectedItem));
ItemName.Text = selectedItem.Item.Value.ItemName;
ItemType.Text = SetItemTypeName(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++)
ItemSlots[i].SetItemToSlot(inventory[i]);
if (_currentlySelected != null && !inventory.Contains(_currentlySelected.Item.Value))
_currentlySelected = null;
if (_currentlySelected.ItemSlot != null && !inventory.Contains(_currentlySelected.ItemSlot.Item.Value))
_currentlySelected = (null, -1);
if (_currentlySelected == null && inventory.Count > 0)
_currentlySelected = ItemSlots.FirstOrDefault(x => x.Item.Value == inventory.First());
if (_currentlySelected.ItemSlot == null && inventory.Count > 0)
{
var newItem = ItemSlots.FirstOrDefault(x => x.Item.Value == inventory.First());
_currentlySelected = (newItem, ItemSlots.IndexOf(newItem));
}
if (inventory.Count > 0)
_currentlySelected.FocusItem();
_currentlySelected.ItemSlot.FocusItem();
ActionPanel.Hide();
}
@@ -213,8 +216,12 @@ public partial class InventoryMenu : Control, IInventoryMenu
ActionPanel.Hide();
SetProcessInput(true);
ActionPanel.SetProcessInput(false);
if (_player.Inventory.Items.Any() && !_player.Inventory.Items.Contains(_currentlySelected.Item.Value))
_currentlySelected = null;
if (_player.Inventory.Items.Count != 0 && !_player.Inventory.Items.Contains(_currentlySelected.ItemSlot.Item.Value))
{
var newIndex = Mathf.Max(0, _currentlySelected.InventoryIndex - 1);
_currentlySelected = (ItemSlots[newIndex], newIndex);
_currentlySelected.ItemSlot.FocusItem();
}
ResetInventoryState();
}
@@ -242,8 +249,8 @@ public partial class InventoryMenu : Control, IInventoryMenu
return item switch
{
Weapon weapon => $"ATK: {(weapon.ItemTag == ItemTag.MysteryItem ? "???" : weapon.BonusAttack)}",
Armor armor => $"DEF: {(armor.ItemTag == ItemTag.MysteryItem ? "???" : armor.BonusDefense)}",
Weapon weapon => $"ATK: {(weapon.ItemTag == ItemTag.MysteryItem ? "???" : weapon.BonusAttack):D2}",
Armor armor => $"DEF: {(armor.ItemTag == ItemTag.MysteryItem ? "???" : armor.BonusDefense):D2}",
_ => string.Empty,
};
}