Added Inventory space display and robot alert if not working currently. Added inventory live update.

This commit is contained in:
2026-05-09 10:36:38 +02:00
parent 892365ff79
commit 053b91a736
5 changed files with 69 additions and 7 deletions
+5
View File
@@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using Godot;
@@ -6,6 +7,7 @@ public class Inventory
public List<Item> items = new();
public int maxInventorySize = 8;
public event EventHandler OnInventoryUpdate;
public bool AddItem(Item item, int amount)
{
@@ -13,6 +15,7 @@ public class Inventory
if (inventoryItem != null)
{
inventoryItem.currentAmount += amount;
OnInventoryUpdate?.Invoke(this, EventArgs.Empty);
return true;
}
else
@@ -21,6 +24,7 @@ public class Inventory
{
items.Add(item);
items[items.Count - 1].currentAmount += amount;
OnInventoryUpdate?.Invoke(this, EventArgs.Empty);
return true;
}
}
@@ -49,6 +53,7 @@ public class Inventory
if (item != null)
{
item.currentAmount -= amount;
OnInventoryUpdate?.Invoke(this, EventArgs.Empty);
}
}
}
+20 -1
View File
@@ -1,18 +1,31 @@
using System;
using Godot;
public partial class InventoryDisplay : PanelContainer
{
PackedScene itemDisplayPrefab = ResourceLoader.LoadItemDisplay();
[Export] VBoxContainer itemList;
[Export] RichTextLabel inventorySpace;
public override void _Ready()
{
GameData.inventory.OnInventoryUpdate += OnInventoryUpdate;
}
public override void _Notification(int id)
{
if (id == NotificationVisibilityChanged)
{
if (Visible) ReloadItems();
if (Visible) UpdateInventorySpace();
}
}
private void UpdateInventorySpace()
{
inventorySpace.Text = $"Used space: {GameData.inventory.items.Count}/{GameData.inventory.maxInventorySize}";
}
public void ReloadItems()
{
foreach (Node node in itemList.GetChildren())
@@ -27,9 +40,15 @@ public partial class InventoryDisplay : PanelContainer
display = itemDisplayPrefab.Instantiate<ItemDisplay>();
display.item = item;
display.text.Text = item.data.GetReadableName();
display.amount.Text = item.currentAmount.ToString();
display.amount.Text = $"{item.currentAmount}/{item.data.StackSize}";
display.texture.Texture = ResourceLoader.LoadPath(item.data.Texture);
itemList.AddChild(display);
}
}
public void OnInventoryUpdate(object sender, EventArgs args)
{
ReloadItems();
UpdateInventorySpace();
}
}