Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.89 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement