/// <summary> /// Constroe a UI do bau de acordo com seus slots e adiciona os itens na lista que o bau possui /// </summary> /// <param name="chestData"></param> public void BuildChestUI(StorageSO chestData) { if (chestSlotsFolder) { currentChestData = chestData; if (!chestItemDragFolder) { // Cria uma pasta para guardar os item drags GameObject newFolder = new GameObject("Items"); newFolder.transform.SetParent(transform); RectTransform temRect = newFolder.AddComponent <RectTransform>(); temRect.anchoredPosition = Vector2.zero; chestItemDragFolder = newFolder.transform; } // Cria os slots adicionais fazendo a diferença dos que falta if (currentChestData.chestTotalSlots > chestSlotsFolder.childCount - chestInactiveSlotList.Count) { int newCount = currentChestData.chestTotalSlots - chestSlotsFolder.childCount; if (newCount < 0) { newCount *= -1; } CreateSlotForChest(newCount); } // Esconde os slots em excesso a partir da diferença else if (currentChestData.chestTotalSlots < chestSlotsFolder.childCount) { int newCount = chestSlotsFolder.childCount - currentChestData.chestTotalSlots; HideUnusedSlots(newCount); } if (!isFirstStart) { RebuildItemsOnChest(chestData); } } else { Debug.LogError("Não foi dado referencia da pasta com slots para o bau!"); } transform.gameObject.SetActive(true); }
/// <summary> /// Seta os drag de item nos slots que estavam salvos /// </summary> private void RebuildItemsOnChest(StorageSO chestData) { List <ItemSlot> availableSlots = new List <ItemSlot>(); for (int i = 0; i < chestDragItemsList.Count; i++) { chestDragItemsList[i].ClearDrag(); } currentChestData = chestData; for (int i = 0; i < chestSlotList.Count; i++) { chestSlotList[i].SetStorageSO(currentChestData); chestSlotList[i].isSlotUsed = false; } for (int i = 0; i < chestSlotList.Count; i++) { ItemSlot chest = chestSlotList[i]; if (chest.gameObject.activeSelf && !chest.isSlotUsed) { availableSlots.Add(chest); } } // TODO: Fazer os itemDrag aparecer no mesmo slot ao abrir o bau, ao inves deles aparecerem organizados automaticamente for (int i = 0; i < currentChestData.contentsInChest.Count; i++) { ItemSO item = currentChestData.contentsInChest[i]; // Se existir os slots vazio if (availableSlots[i]) { if (item.GetChestSlotID() <= -1) { SetItemDragData(item, availableSlots[i]); } } // Dropar o item em questão else { } } }
private void Awake() { toolbarStorage = ScriptableObject.CreateInstance <StorageSO>(); SetupStart(); }
void StartSetup() { // Cria as pasta se nao tiver if (!slotsFolder) { if (transform.Find("Slots")) { slotsFolder = slotsFolder.Find("Slots"); } else { slotsFolder = new GameObject("Slots").transform; slotsFolder.SetParent(transform); } } if (!itemDragFolder) { if (transform.Find("Items")) { itemDragFolder = transform.Find("Items"); } else { itemDragFolder = new GameObject("Items").transform; itemDragFolder.SetParent(transform); } } if (!panelFolder) { panelFolder = new GameObject("Panel Folder").transform; panelFolder.transform.SetParent(transform); } slotsFolder.SetParent(panelFolder.transform); itemDragFolder.SetParent(panelFolder.transform); inventoryStorage = ScriptableObject.CreateInstance <StorageSO>(); inventoryStorage.chestName = "Inventory"; // Cria os drag e drop vazio para os itens que serão coletados for (int i = 0; i < slotsFolder.childCount; i++) { ItemSlot newSlot = slotsFolder.GetChild(i).gameObject.AddComponent <ItemSlot>(); // Adiciona ao slot o seu script e na lista para um futuro uso caso necessario itemSlotsList.Add(newSlot); newSlot.SetStorageSO(inventoryStorage); // Cria uma gameobject para guardar e visualizar os itens no inventario para pool GameObject newItemOnSlot = new GameObject("EmptyItemOnInventory"); // Set ele numa pasta de items (mais para a parte visual) newItemOnSlot.transform.SetParent(itemDragFolder); // Adiciona os componentes desse item newItemOnSlot.AddComponent <Image>(); newItemOnSlot.AddComponent <ItemDrag>(); GameObject newText = new GameObject("ItemDragTextCount"); newText.AddComponent <Text>().font = (Font)Resources.GetBuiltinResource(typeof(Font), "Arial.ttf"); newText.transform.SetParent(newItemOnSlot.transform); // Adiciona na lista de items para a pool itemDragOnInventory.Add(newItemOnSlot.GetComponent <ItemDrag>()); // Desativa ela por não estar sendo usada newItemOnSlot.SetActive(false); } inventoryStorage.contentsInChest = new List <ItemSO>(); inventoryStorage.chestTotalSlots = slotsFolder.childCount; }
/// <summary> /// Da a referencia do bau para ser usado para adicionar ou remover os conteudos dentro do ChestSO /// </summary> /// <param name="chestReference"></param> public void SetStorageSO(StorageSO chestReference) { chestData = chestReference; }