ItemSlotUi.cs 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using TMPro;
  6. using Sirenix.OdinInspector;
  7. using KairoEngine.SFX;
  8. using KairoEngine.Core;
  9. namespace KairoEngine.Inventory
  10. {
  11. public class ItemSlotUi : MonoBehaviour
  12. {
  13. public ItemRef itemRef;
  14. public Image iconUi;
  15. public TextMeshProUGUI quantityUi;
  16. public TextMeshProUGUI priceUi;
  17. public TextMeshProUGUI valueUI;
  18. public RectTransform curtainTransform;
  19. public bool draggable = true;
  20. public bool dropable = true;
  21. public bool forSaleItem = false;
  22. [ShowIf("@forSaleItem")] public Sprite buttonNormal;
  23. [ShowIf("@forSaleItem")] public Sprite buttonInteraction;
  24. [ShowIf("@forSaleItem")] public Sprite buttonNavigation;
  25. [ShowIf("@forSaleItem")] public Sprite buttonSelected;
  26. [ShowIf("@forSaleItem")] public Sprite buttonDisabled;
  27. [ShowIf("@forSaleItem")] public Sprite buttonSuccess;
  28. [ShowIf("@forSaleItem")] public Sprite buttonSuccessInteraction;
  29. [ShowIf("@forSaleItem")] public Sprite buttonSuccessNavigation;
  30. [ShowIf("@forSaleItem")] public Sprite buttonSuccessSelected;
  31. [ReadOnly] public ItemContainer parentItemContainer;
  32. [ReadOnly] public ItemContainerUi parentItemContainerUi;
  33. [ReadOnly] public int quantityToBuy = 0;
  34. private BarterControllerUi baterCtrl;
  35. public void Setup(ItemRef newItemRef, ItemContainer parentItemContainer, ItemContainerUi itemContainerUi, bool showQuantity = true, bool showPrice = false, string value = "")
  36. {
  37. this.parentItemContainerUi = itemContainerUi;
  38. this.parentItemContainer = parentItemContainer;
  39. itemRef = newItemRef;
  40. if(forSaleItem) ResetButtonUi();
  41. if (itemRef != null)
  42. {
  43. iconUi.sprite = itemRef.item.icon;
  44. iconUi.enabled = true;
  45. CooldownCurtain();
  46. if (itemRef.item.stackble && showQuantity)
  47. {
  48. quantityUi.gameObject.SetActive(true);
  49. quantityUi.enabled = true;
  50. quantityUi.text = itemRef.quantity.ToString();
  51. }
  52. if(showPrice)
  53. {
  54. priceUi.gameObject.SetActive(true);
  55. priceUi.enabled = true;
  56. priceUi.text = "$" + itemRef.item.value.ToString();
  57. }
  58. if(forSaleItem)
  59. {
  60. quantityToBuy = 0;
  61. SetupBuy();
  62. }
  63. else gameObject.GetComponent<Button>().interactable = true;
  64. } else
  65. {
  66. iconUi.sprite = null;
  67. iconUi.enabled = false;
  68. quantityUi.gameObject.SetActive(false);
  69. quantityUi.enabled = false;
  70. priceUi.gameObject.SetActive(false);
  71. priceUi.enabled = false;
  72. curtainTransform.sizeDelta = new Vector2 (75, 0);
  73. }
  74. if(value != "")
  75. {
  76. valueUI.gameObject.SetActive(true);
  77. valueUI.enabled = true;
  78. valueUI.text = value;
  79. }
  80. else
  81. {
  82. valueUI.gameObject.SetActive(false);
  83. valueUI.enabled = false;
  84. }
  85. baterCtrl = BarterControllerUi.instance;
  86. }
  87. void Update()
  88. {
  89. CooldownCurtain();
  90. }
  91. private void CooldownCurtain()
  92. {
  93. if(itemRef != null)
  94. {
  95. if(itemRef.item == null) return;
  96. if(itemRef.item.category == ItemType.instantEffect)
  97. {
  98. ItemBaseInstantEffect item = (ItemBaseInstantEffect)itemRef.item;
  99. if(item.hasCooldown)
  100. {
  101. if(itemRef.lastUsed < item.cooldownTime)
  102. {
  103. float height = (75/item.cooldownTime) * (item.cooldownTime - itemRef.lastUsed);
  104. curtainTransform.sizeDelta = new Vector2 (75, height);
  105. return;
  106. }
  107. }
  108. }
  109. }
  110. curtainTransform.sizeDelta = new Vector2 (75, 0);
  111. }
  112. private void SetupBuy()
  113. {
  114. ItemContainer playerInventory = EventManager.request.GetItemContainer("PlayerItemContainer").value;
  115. if(playerInventory == null) Debug.LogError("Missing playerInventory");
  116. bool hasMoney = playerInventory.HasItem("Old Dollars", itemRef.item.value);
  117. Button button = gameObject.GetComponent<Button>();
  118. if(hasMoney == false)
  119. {
  120. if(button != null) button.interactable = false;
  121. }
  122. else
  123. {
  124. if(button != null) button.interactable = true;
  125. }
  126. }
  127. public void AddToCart()
  128. {
  129. if(itemRef == null) return;
  130. bool x10 = false;
  131. if(Input.GetKey(KeyCode.LeftControl)) x10 = true;
  132. ItemContainer playerInventory = EventManager.request.GetItemContainer("PlayerItemContainer").value;
  133. if(playerInventory == null) Debug.LogError("Missing playerInventory");
  134. int total = 0;
  135. foreach (var itemSlot in parentItemContainerUi.itemSlots)
  136. {
  137. if(itemSlot.itemRef != null)
  138. {
  139. total += itemSlot.itemRef.item.value * itemSlot.quantityToBuy;
  140. }
  141. }
  142. var x = x10 && itemRef.quantity >= quantityToBuy + 10 ? 10 : itemRef.quantity - quantityToBuy;
  143. total += x10 ? itemRef.item.value * x : itemRef.item.value;
  144. bool hasMoney = playerInventory.HasItem("Old Dollars", total);
  145. if(hasMoney == false)
  146. {
  147. SoundController.EmmitSound(baterCtrl.sfxNegative, this.transform.position);
  148. return;
  149. }
  150. if(itemRef.quantity > quantityToBuy)
  151. {
  152. SoundController.EmmitSound(baterCtrl.sfxAddItem, this.transform.position);
  153. quantityToBuy += x10 ? x : 1;
  154. }
  155. if(quantityToBuy > 1)
  156. {
  157. valueUI.gameObject.SetActive(true);
  158. valueUI.enabled = true;
  159. valueUI.text = quantityToBuy.ToString() + "x";
  160. }
  161. quantityUi.text = (itemRef.quantity - quantityToBuy).ToString();
  162. Image image = gameObject.GetComponent<Image>();
  163. if(image != null)
  164. {
  165. image.sprite = buttonSuccess;
  166. }
  167. Button button = gameObject.GetComponent<Button>();
  168. if(button != null)
  169. {
  170. SpriteState state = new SpriteState();
  171. state.highlightedSprite = buttonSuccessSelected;
  172. state.pressedSprite = buttonSuccessInteraction;
  173. state.selectedSprite = buttonSuccessNavigation;
  174. button.spriteState = state;
  175. }
  176. }
  177. public void RemoveFromCart()
  178. {
  179. if(itemRef == null) return;
  180. bool x10 = false;
  181. if(Input.GetKey(KeyCode.LeftControl)) x10 = true;
  182. SoundController.EmmitSound(baterCtrl.sfxRemoveItem, this.transform.position);
  183. if(x10 && quantityToBuy > 10) quantityToBuy -= 10;
  184. else if(x10 && quantityToBuy <= 10) quantityToBuy = 0;
  185. else if(!x10 && quantityToBuy > 0) quantityToBuy -= 1;
  186. if(quantityToBuy < 2)
  187. {
  188. valueUI.gameObject.SetActive(false);
  189. valueUI.enabled = false;
  190. }
  191. valueUI.text = quantityToBuy.ToString() + "x";
  192. quantityUi.text = (itemRef.quantity - quantityToBuy).ToString();
  193. if(quantityToBuy == 0) ResetButtonUi();
  194. }
  195. private void ResetButtonUi()
  196. {
  197. Image image = gameObject.GetComponent<Image>();
  198. if(image != null)
  199. {
  200. image.sprite = buttonNormal;
  201. }
  202. Button button = gameObject.GetComponent<Button>();
  203. if(button != null)
  204. {
  205. SpriteState state = new SpriteState();
  206. state.highlightedSprite = buttonSelected;
  207. state.pressedSprite = buttonInteraction;
  208. state.selectedSprite = buttonNavigation;
  209. state.disabledSprite = buttonDisabled;
  210. button.spriteState = state;
  211. }
  212. }
  213. }
  214. }