示例#1
0
    /// <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);
    }
示例#2
0
    /// <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
            {
            }
        }
    }
示例#3
0
 private void Awake()
 {
     toolbarStorage = ScriptableObject.CreateInstance <StorageSO>();
     SetupStart();
 }
示例#4
0
    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;
    }
示例#5
0
 /// <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;
 }