From d934461b2360eda2bef319b4c312b4d73da3ace6 Mon Sep 17 00:00:00 2001 From: Zenny Date: Sun, 7 Jun 2026 18:55:33 -0700 Subject: [PATCH] (Hopefully) Persist inventory index when using/throwing/dropping items from inventory --- .../src/ui/inventory_menu/InventoryMenu.cs | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/Zennysoft.Game.Ma/src/ui/inventory_menu/InventoryMenu.cs b/Zennysoft.Game.Ma/src/ui/inventory_menu/InventoryMenu.cs index 3edd1326..5b9ae453 100644 --- a/Zennysoft.Game.Ma/src/ui/inventory_menu/InventoryMenu.cs +++ b/Zennysoft.Game.Ma/src/ui/inventory_menu/InventoryMenu.cs @@ -55,7 +55,7 @@ public partial class InventoryMenu : Control, IInventoryMenu private List 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, }; }