using Godot; using System.Collections.Generic; // InventoryUI viser indholdet af ét Inventory i et grid. // Den kan vise ALLE Inventory-komponenter: den får bare at vide, hvilken den skal vise. public partial class InventoryUI : MarginContainer { // Slot-scenen, som skal oprettes én gang pr. slot. Sættes i Inspector. [Export] public PackedScene SlotScene { get; set; } private GridContainer _grid; private Inventory _inventory; // En liste over de slot-grafikker, vi har oprettet. private readonly List _slotUIs = new List(); public override void _Ready() { _grid = GetNode("Content/Grid"); } // Fortæller UI'et, hvilket inventory det skal vise, og bygger slots. public void SetInventory(Inventory inventory) { if (SlotScene == null) { GD.PushError("InventoryUI: SlotScene er ikke sat i Inspector."); return; } _inventory = inventory; // Fjern eventuelle gamle slots, hvis SetInventory kaldes igen. foreach (SlotUI oldSlot in _slotUIs) { oldSlot.QueueFree(); } _slotUIs.Clear(); // Opret én SlotUI pr. slot i inventoryet. for (int i = 0; i < _inventory.GetSize(); i++) { SlotUI slotUi = SlotScene.Instantiate(); _grid.AddChild(slotUi); // Først nu kører slottens _Ready _slotUIs.Add(slotUi); } Refresh(); } // Opdaterer alle slots, så de matcher inventoryets indhold. // Skal kaldes, hver gang inventoryets indhold er ændret. public void Refresh() { for (int i = 0; i < _slotUIs.Count; i++) { _slotUIs[i].SetItem(_inventory.GetItem(i)); } } }