Fix item usage
This commit is contained in:
@@ -102,8 +102,8 @@ public partial class Game : Node3D, IGame
|
|||||||
{
|
{
|
||||||
CallDeferred(nameof(SetPauseMode), output.IsPaused);
|
CallDeferred(nameof(SetPauseMode), output.IsPaused);
|
||||||
})
|
})
|
||||||
.Handle((in GameLogic.Output.SetInventoryMode _) => { InventoryMenu.PopulateItems(); InventoryMenu.Show(); })
|
.Handle((in GameLogic.Output.SetInventoryMode _) => { InventoryMenu.RedrawInventory(); InventoryMenu.Show(); })
|
||||||
.Handle((in GameLogic.Output.HideInventory _) => { InventoryMenu.Hide(); InventoryMenu.ClearItems(); })
|
.Handle((in GameLogic.Output.HideInventory _) => { InventoryMenu.Hide(); })
|
||||||
.Handle((in GameLogic.Output.ShowMiniMap _) => { MiniMap.Show(); })
|
.Handle((in GameLogic.Output.ShowMiniMap _) => { MiniMap.Show(); })
|
||||||
.Handle((in GameLogic.Output.HideMiniMap _) => { MiniMap.Hide(); })
|
.Handle((in GameLogic.Output.HideMiniMap _) => { MiniMap.Hide(); })
|
||||||
.Handle((in GameLogic.Output.GameOver _) => { AppRepo.OnGameOver(); });
|
.Handle((in GameLogic.Output.GameOver _) => { AppRepo.OnGameOver(); });
|
||||||
|
|||||||
@@ -8,9 +8,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
public interface IInventoryMenu : IControl
|
public interface IInventoryMenu : IControl
|
||||||
{
|
{
|
||||||
public void PopulateItems();
|
public Task RedrawInventory();
|
||||||
|
|
||||||
public void ClearItems();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Meta(typeof(IAutoNode))]
|
[Meta(typeof(IAutoNode))]
|
||||||
@@ -67,13 +65,56 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
|||||||
|
|
||||||
private IItemSlot[] ItemSlots => ItemsPage.GetChildren().OfType<IItemSlot>().ToArray();
|
private IItemSlot[] ItemSlots => ItemsPage.GetChildren().OfType<IItemSlot>().ToArray();
|
||||||
|
|
||||||
public void PopulateItems()
|
public async Task RedrawInventory()
|
||||||
|
{
|
||||||
|
await HideUserActionPrompt();
|
||||||
|
ClearItems();
|
||||||
|
PopulateInventory();
|
||||||
|
PopulatePlayerInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void _UnhandledInput(InputEvent @event)
|
||||||
|
{
|
||||||
|
if (ItemSlots.Length == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var inventory = GameRepo.InventoryItems.Value;
|
||||||
|
|
||||||
|
if (@event.IsActionPressed(GameInputs.UiRight) && _currentPageNumber == InventoryPageNumber.FirstPage && inventory.Count > _itemsPerPage)
|
||||||
|
ChangeInventoryPage(InventoryPageNumber.SecondPage);
|
||||||
|
|
||||||
|
if (@event.IsActionPressed(GameInputs.UiLeft) && _currentPageNumber == InventoryPageNumber.SecondPage)
|
||||||
|
ChangeInventoryPage(InventoryPageNumber.FirstPage);
|
||||||
|
|
||||||
|
if (@event.IsActionPressed(GameInputs.UiDown))
|
||||||
|
{
|
||||||
|
SetToUnselectedStyle(ItemSlots.ElementAt(_currentIndex));
|
||||||
|
_currentIndex = new[] { _currentIndex + 1, _itemsPerPage - 1, ItemSlots.Length - 1 }.Min();
|
||||||
|
SetToSelectedStyle(ItemSlots.ElementAt(_currentIndex));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (@event.IsActionPressed(GameInputs.UiUp))
|
||||||
|
{
|
||||||
|
SetToUnselectedStyle(ItemSlots.ElementAt(_currentIndex));
|
||||||
|
_currentIndex = new[] { _currentIndex - 1, 0 }.Max();
|
||||||
|
SetToSelectedStyle(ItemSlots.ElementAt(_currentIndex));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (@event.IsActionPressed(GameInputs.UiAccept))
|
||||||
|
{
|
||||||
|
if (ItemSlots.Length == 0 || GetViewport().GuiGetFocusOwner() is Button)
|
||||||
|
return;
|
||||||
|
DisplayUserActionPrompt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PopulateItems()
|
||||||
{
|
{
|
||||||
PopulateInventory();
|
PopulateInventory();
|
||||||
PopulatePlayerInfo();
|
PopulatePlayerInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearItems()
|
private void ClearItems()
|
||||||
{
|
{
|
||||||
foreach (var item in ItemSlots)
|
foreach (var item in ItemSlots)
|
||||||
ItemsPage.RemoveChildEx(item);
|
ItemsPage.RemoveChildEx(item);
|
||||||
@@ -81,7 +122,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
|||||||
HideUserActionPrompt();
|
HideUserActionPrompt();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PopulatePlayerInfo()
|
private void PopulatePlayerInfo()
|
||||||
{
|
{
|
||||||
FloorLabel.Text = $"Level {GameRepo.CurrentFloor:D2}";
|
FloorLabel.Text = $"Level {GameRepo.CurrentFloor:D2}";
|
||||||
|
|
||||||
@@ -126,41 +167,6 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void _UnhandledInput(InputEvent @event)
|
|
||||||
{
|
|
||||||
if (ItemSlots.Length == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var inventory = GameRepo.InventoryItems.Value;
|
|
||||||
|
|
||||||
if (@event.IsActionPressed(GameInputs.UiRight) && _currentPageNumber == InventoryPageNumber.FirstPage && inventory.Count > _itemsPerPage)
|
|
||||||
ChangeInventoryPage(InventoryPageNumber.SecondPage);
|
|
||||||
|
|
||||||
if (@event.IsActionPressed(GameInputs.UiLeft) && _currentPageNumber == InventoryPageNumber.SecondPage)
|
|
||||||
ChangeInventoryPage(InventoryPageNumber.FirstPage);
|
|
||||||
|
|
||||||
if (@event.IsActionPressed(GameInputs.UiDown))
|
|
||||||
{
|
|
||||||
SetToUnselectedStyle(ItemSlots.ElementAt(_currentIndex));
|
|
||||||
_currentIndex = new[] { _currentIndex + 1, _itemsPerPage - 1, ItemSlots.Length - 1 }.Min();
|
|
||||||
SetToSelectedStyle(ItemSlots.ElementAt(_currentIndex));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (@event.IsActionPressed(GameInputs.UiUp))
|
|
||||||
{
|
|
||||||
SetToUnselectedStyle(ItemSlots.ElementAt(_currentIndex));
|
|
||||||
_currentIndex = new[] { _currentIndex - 1, 0 }.Max();
|
|
||||||
SetToSelectedStyle(ItemSlots.ElementAt(_currentIndex));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (@event.IsActionPressed(GameInputs.UiAccept))
|
|
||||||
{
|
|
||||||
if (ItemSlots.Length == 0 || GetViewport().GuiGetFocusOwner() is Button)
|
|
||||||
return;
|
|
||||||
DisplayUserActionPrompt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DisplayUserActionPrompt()
|
private void DisplayUserActionPrompt()
|
||||||
{
|
{
|
||||||
ItemDescriptionTitle.Hide();
|
ItemDescriptionTitle.Hide();
|
||||||
@@ -205,7 +211,7 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
|||||||
await ToSignal(GetTree().CreateTimer(0.1f), "timeout");
|
await ToSignal(GetTree().CreateTimer(0.1f), "timeout");
|
||||||
_currentIndex = 0;
|
_currentIndex = 0;
|
||||||
_currentPageNumber = pageToChangeTo;
|
_currentPageNumber = pageToChangeTo;
|
||||||
PopulateItems();
|
await RedrawInventory();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PopulateInventory()
|
private void PopulateInventory()
|
||||||
@@ -314,10 +320,14 @@ public partial class InventoryMenu : Control, IInventoryMenu
|
|||||||
if (currentItem is ConsumableItem consumable)
|
if (currentItem is ConsumableItem consumable)
|
||||||
consumable.Use();
|
consumable.Use();
|
||||||
|
|
||||||
|
if (_currentIndex >= ItemSlots.Length - 1)
|
||||||
|
_currentIndex--;
|
||||||
|
if (_currentIndex <= 0)
|
||||||
|
_currentIndex = 0;
|
||||||
|
|
||||||
// TODO: Replace with animation player (for visual effects/sound effects?)
|
// TODO: Replace with animation player (for visual effects/sound effects?)
|
||||||
await ToSignal(GetTree().CreateTimer(0.25f), "timeout");
|
await ToSignal(GetTree().CreateTimer(0.25f), "timeout");
|
||||||
await HideUserActionPrompt();
|
await RedrawInventory();
|
||||||
PopulatePlayerInfo();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void ThrowButtonPressed()
|
private async void ThrowButtonPressed()
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ public partial class ConsumableItem : Node3D, IInventoryItem
|
|||||||
HealHP();
|
HealHP();
|
||||||
if (ConsumableItemInfo.HealVTAmount != 0)
|
if (ConsumableItemInfo.HealVTAmount != 0)
|
||||||
HealVT();
|
HealVT();
|
||||||
|
|
||||||
|
GameRepo.InventoryItems.Value.Remove(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RaiseHP()
|
private void RaiseHP()
|
||||||
|
|||||||
Reference in New Issue
Block a user