(Hopefully) Persist inventory index when using/throwing/dropping items from inventory
This commit is contained in:
@@ -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,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user