(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 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,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user