SHARE
TWEET

Untitled

a guest Jul 17th, 2019 57 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using TMPro;
  4. using UnityEngine.UI;
  5. using UnityEngine;
  6.  
  7. public class Craft : MonoBehaviour
  8. {
  9.     public Item craftableItem;
  10.     public TextMeshProUGUI craftableItemName;
  11.     public Image craftableItemIcon;
  12.  
  13.     public bool isUnlocked;
  14.  
  15.     public List<Item> requiredItems = new List<Item>();
  16.     public List<int> requiredAmount = new List<int>();
  17.  
  18.     List<Item> haveItems = new List<Item>();
  19.     List<int> haveAmount = new List<int>();
  20.  
  21.     private bool canCraft = false;
  22.  
  23.     int usedAmount = 0;
  24.  
  25.     void Start()
  26.     {
  27.         craftableItemName.text = craftableItem.ItemName;
  28.         craftableItemIcon.sprite = craftableItem.ItemIcon;
  29.     }
  30.  
  31.     void Update()
  32.     {
  33.         GetComponent<Button>().interactable = isUnlocked;
  34.     }
  35.  
  36.     public void CraftItem()
  37.     {
  38.         List<Item> inventoryItems = Inventory.instance.items;
  39.         for (int i = 0; i < requiredItems.Count; i++)
  40.         {
  41.             if (inventoryItems.Contains(requiredItems[i]))
  42.             {
  43.                 if(haveItems.Count < requiredItems.Count)
  44.                 {
  45.                     haveItems.Add(requiredItems[i]);
  46.                     haveAmount.Add(getItemAmount(requiredItems[i]));
  47.                     if (haveItems.Count < requiredItems.Count)
  48.                     {
  49.                         Debug.Log("You don't have enough items.");
  50.                         StartCoroutine(waitBeforeClear());
  51.                     }
  52.                     else if (haveItems[i].Equals(requiredItems[i]))
  53.                     {
  54.                         Debug.Log("True");
  55.                         canCraft = true;
  56.                     }
  57.                     else
  58.                     {
  59.                         Debug.Log("False");
  60.                         haveItems.Clear();
  61.                     }
  62.                 }
  63.             }
  64.         }
  65.  
  66.         if (canCraft)
  67.         {
  68.             for (int i = 0; i < haveItems.Count; i++)
  69.             {
  70.                 changeItemAmount(haveItems[i], i);
  71.             }
  72.             Inventory.instance.AddItem(craftableItem);
  73.             haveItems.Clear();
  74.             haveAmount.Clear();
  75.             canCraft = false;
  76.         }
  77.     }
  78.  
  79.     int getItemAmount(Item item)
  80.     {
  81.         int amount = 0;
  82.         for (int i = 0; i < InventoryUI.inventoryui.slots.Length; i++)
  83.         {
  84.             if(InventoryUI.inventoryui.slots[i].item != null)
  85.             {
  86.                 if (InventoryUI.inventoryui.slots[i].item == item)
  87.                     amount += int.Parse(InventoryUI.inventoryui.slots[i].itemAmount.text);
  88.             }
  89.         }
  90.         return amount;
  91.     }
  92.  
  93.     void changeItemAmount(Item item, int index)
  94.     {
  95.         int required = requiredAmount[index];
  96.         while(required > 0)
  97.         {
  98.             InventorySlot slot = InventoryUI.inventoryui.slots[getSlotIndex(item)];
  99.             if(int.Parse(slot.itemAmount.text) <= required)
  100.             {
  101.                 required -= int.Parse(slot.itemAmount.text);
  102.                 slot.RemoveItem();
  103.             }
  104.             else if(int.Parse(slot.itemAmount.text) >= required)
  105.             {
  106.                 required -= int.Parse(slot.itemAmount.text);
  107.                 slot.itemAmount.text = (int.Parse(slot.itemAmount.text) - required).ToString();
  108.             }
  109.         }
  110.     }
  111.  
  112.     int getSlotIndex(Item item)
  113.     {
  114.         int min = 0;
  115.         for (int i = 0; i < InventoryUI.inventoryui.slots.Length; i++)
  116.         {
  117.             if (InventoryUI.inventoryui.slots[i].item == item && int.Parse(InventoryUI.inventoryui.slots[i].itemAmount.text) < min)
  118.             {
  119.                 min = int.Parse(InventoryUI.inventoryui.slots[i].itemAmount.text);
  120.                 return i;
  121.             }
  122.         }
  123.         return 0;
  124.     }
  125.  
  126.     IEnumerator waitBeforeClear()
  127.     {
  128.         yield return new WaitForSeconds(0.01f);
  129.         haveItems.Clear();
  130.     }
  131. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top