55 lines
1.3 KiB
C#
55 lines
1.3 KiB
C#
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())
|
|
{
|
|
itemList.RemoveChild(node);
|
|
node.QueueFree();
|
|
}
|
|
ItemDisplay display;
|
|
|
|
foreach (Item item in GameData.inventory.items)
|
|
{
|
|
display = itemDisplayPrefab.Instantiate<ItemDisplay>();
|
|
display.item = item;
|
|
display.text.Text = item.data.GetReadableName();
|
|
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();
|
|
}
|
|
}
|