using System.Collections.Generic; using UnityEngine; // InventoryUI.cs public class BoxUIController : MonoBehaviour { public Transform itemParent; private readonly Dictionary _slots = new(); private void Start() { Debug.Log("BoxUI Start"); if (itemParent == null) { Debug.LogWarning("ItemParent is null! Can not attach"); return; } BoxManager.Instance.OnActiveBoxChanged += UpdateUI; // Delete existing children if any. foreach (Transform child in itemParent) Destroy(child.gameObject); if (BoxManager.Instance.ActiveBox == null) return; if (BoxManager.Instance.ActiveBox.Slots.Count == 0) BoxManager.Instance.Initialize(); UpdateUI(BoxManager.Instance.ActiveBox); Debug.Log("Finished adding items to toolbar slots"); } public void ListChildren(GameObject parent) { foreach (Transform child in parent.transform) Debug.Log("Child: " + child.name); } public void UpdateUI(Box box) { // clear all exisitings slots Debug.Log("Updating UI displaying box: " + box.boxId + " / " + box.name); _slots.Clear(); foreach (Transform child in itemParent) Destroy(child.gameObject); // Get values from inventory and redraw the inventory slots based on that. var slotPrefab = PrefabManager.Instance.GetSlotPrefab(); // var itemPrefab = prefabManager.GetItemPrefab(); foreach (var slot in box.Slots) { // Draw slots to screen var slotDisplay = Instantiate(slotPrefab, itemParent); slotDisplay.transform.localScale = new Vector3((float)0.5, (float)0.5, (float)0.5); var i = slot.Key; var slotComponent = slotDisplay.GetComponent(); // Add prefab to slot slotComponent.SetSlotDetails(slot.Value); _slots.Add(i, slotDisplay); } } }