Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using TMPro;
- using UnityEngine.UI;
- using UnityEngine;
- public class Craft : MonoBehaviour
- {
- public Item craftableItem;
- public TextMeshProUGUI craftableItemName;
- public Image craftableItemIcon;
- public bool isUnlocked;
- public List<Item> requiredItems = new List<Item>();
- public List<int> requiredAmount = new List<int>();
- List<Item> haveItems = new List<Item>();
- List<int> haveAmount = new List<int>();
- private bool canCraft = false;
- int usedAmount = 0;
- void Start()
- {
- craftableItemName.text = craftableItem.ItemName;
- craftableItemIcon.sprite = craftableItem.ItemIcon;
- }
- void Update()
- {
- GetComponent<Button>().interactable = isUnlocked;
- }
- public void CraftItem()
- {
- List<Item> inventoryItems = Inventory.instance.items;
- for (int i = 0; i < requiredItems.Count; i++)
- {
- if (inventoryItems.Contains(requiredItems[i]))
- {
- if(haveItems.Count < requiredItems.Count)
- {
- haveItems.Add(requiredItems[i]);
- haveAmount.Add(getItemAmount(requiredItems[i]));
- if (haveItems.Count < requiredItems.Count)
- {
- Debug.Log("You don't have enough items.");
- StartCoroutine(waitBeforeClear());
- }
- else if (haveItems[i].Equals(requiredItems[i]))
- {
- Debug.Log("True");
- canCraft = true;
- }
- else
- {
- Debug.Log("False");
- haveItems.Clear();
- }
- }
- }
- }
- if (canCraft)
- {
- for (int i = 0; i < haveItems.Count; i++)
- {
- changeItemAmount(haveItems[i], i);
- }
- Inventory.instance.AddItem(craftableItem);
- haveItems.Clear();
- haveAmount.Clear();
- canCraft = false;
- }
- }
- int getItemAmount(Item item)
- {
- int amount = 0;
- for (int i = 0; i < InventoryUI.inventoryui.slots.Length; i++)
- {
- if(InventoryUI.inventoryui.slots[i].item != null)
- {
- if (InventoryUI.inventoryui.slots[i].item == item)
- amount += int.Parse(InventoryUI.inventoryui.slots[i].itemAmount.text);
- }
- }
- return amount;
- }
- void changeItemAmount(Item item, int index)
- {
- int required = requiredAmount[index];
- while(required > 0)
- {
- InventorySlot slot = InventoryUI.inventoryui.slots[getSlotIndex(item)];
- if(int.Parse(slot.itemAmount.text) <= required)
- {
- required -= int.Parse(slot.itemAmount.text);
- slot.RemoveItem();
- }
- else if(int.Parse(slot.itemAmount.text) >= required)
- {
- required -= int.Parse(slot.itemAmount.text);
- slot.itemAmount.text = (int.Parse(slot.itemAmount.text) - required).ToString();
- }
- }
- }
- int getSlotIndex(Item item)
- {
- int min = 0;
- for (int i = 0; i < InventoryUI.inventoryui.slots.Length; i++)
- {
- if (InventoryUI.inventoryui.slots[i].item == item && int.Parse(InventoryUI.inventoryui.slots[i].itemAmount.text) < min)
- {
- min = int.Parse(InventoryUI.inventoryui.slots[i].itemAmount.text);
- return i;
- }
- }
- return 0;
- }
- IEnumerator waitBeforeClear()
- {
- yield return new WaitForSeconds(0.01f);
- haveItems.Clear();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement