Advertisement
Guest User

Display Inventory

a guest
Feb 21st, 2022
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.43 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using TMPro;
  5. using UnityEngine.UI;
  6. using UnityEngine.EventSystems;
  7. using UnityEngine.Events;
  8.  
  9. public class DisplayInventory : MonoBehaviour
  10. {
  11. public MouseItem mouseItem = new MouseItem();
  12. public GameObject inventoryPrefab;
  13. public InventoryObject inventory;
  14. public int X_START;
  15. public int Y_START;
  16. public int X_SPACE_BETWEEN_ITEM;
  17. public int NUMBER_OF_COLUMN;
  18. public int Y_SPACE_BETWEEN_ITEMS;
  19. Dictionary<GameObject, InventorySlot> itemsDisplayed = new Dictionary<GameObject, InventorySlot>();
  20. void Start()
  21. {
  22. CreateSlots();
  23. }
  24.  
  25. // Update is called once per frame
  26. void Update()
  27. {
  28. UpdateSlots();
  29. }
  30. public void CreateSlots()
  31. {
  32. itemsDisplayed = new Dictionary<GameObject, InventorySlot>();
  33. for (int i = 0; i < inventory.Container.Items.Length; i++)
  34. {
  35. var obj = Instantiate(inventoryPrefab, Vector3.zero, Quaternion.identity, transform);
  36. obj.GetComponent<RectTransform>().localPosition = GetPosition(i);
  37.  
  38. AddEvent(obj, EventTriggerType.PointerEnter, delegate { OnEnter(obj); });
  39. AddEvent(obj, EventTriggerType.PointerExit, delegate { OnExit(obj); });
  40. AddEvent(obj, EventTriggerType.BeginDrag, delegate { OnDragStart(obj); });
  41. AddEvent(obj, EventTriggerType.EndDrag, delegate { OnDragEnd(obj); });
  42. AddEvent(obj, EventTriggerType.Drag, delegate { OnDrag(obj); });
  43.  
  44. ////Me added this :)
  45. //AddEvent(obj, EventTriggerType.PointerClick, delegate { OnClick(obj); });
  46.  
  47.  
  48. itemsDisplayed.Add(obj, inventory.Container.Items[i]);
  49. }
  50. }
  51. public void UpdateSlots()
  52. {
  53. foreach (KeyValuePair<GameObject, InventorySlot> _slot in itemsDisplayed)
  54. {
  55. if (_slot.Value.ID >= 0)
  56. {
  57. _slot.Key.transform.GetChild(0).GetComponentInChildren<Image>().sprite = inventory.database.GetItem[_slot.Value.item.Id].uiDisplay;
  58. _slot.Key.transform.GetChild(0).GetComponentInChildren<Image>().color = new Color(1, 1, 1, 1);
  59. _slot.Key.GetComponentInChildren<TextMeshProUGUI>().text = _slot.Value.amount == 1 ? "" : _slot.Value.amount.ToString("n0");
  60. }
  61. else
  62. {
  63. _slot.Key.transform.GetChild(0).GetComponentInChildren<Image>().sprite = null;
  64. _slot.Key.transform.GetChild(0).GetComponentInChildren<Image>().color = new Color(1, 1, 1, 0);
  65. _slot.Key.GetComponentInChildren<TextMeshProUGUI>().text = "";
  66. }
  67. }
  68. }
  69.  
  70. private void AddEvent(GameObject obj, EventTriggerType type, UnityAction<BaseEventData> action)
  71. {
  72. EventTrigger trigger = obj.GetComponent<EventTrigger>();
  73. var eventTrigger = new EventTrigger.Entry();
  74. eventTrigger.eventID = type;
  75. eventTrigger.callback.AddListener(action);
  76. trigger.triggers.Add(eventTrigger);
  77. }
  78.  
  79. public void OnEnter(GameObject obj)
  80. {
  81. mouseItem.hoverObj = obj;
  82. if (itemsDisplayed.ContainsKey(obj))
  83. mouseItem.hoverItem = itemsDisplayed[obj];
  84. }
  85. public void OnExit(GameObject obj)
  86. {
  87. mouseItem.hoverObj = null;
  88. mouseItem.hoverItem = null;
  89. }
  90. public void OnDragStart(GameObject obj)
  91. {
  92. var mouseObject = new GameObject();
  93. var rt = mouseObject.AddComponent<RectTransform>();
  94. rt.sizeDelta = new Vector2(50, 50);
  95. mouseObject.transform.SetParent(transform.parent);
  96. if (itemsDisplayed[obj].ID >= 0)
  97. {
  98. var img = mouseObject.AddComponent<Image>();
  99. img.sprite = inventory.database.GetItem[itemsDisplayed[obj].ID].uiDisplay;
  100. img.raycastTarget = false;
  101. }
  102. mouseItem.obj = mouseObject;
  103. mouseItem.item = itemsDisplayed[obj];
  104. }
  105. public void OnDragEnd(GameObject obj)
  106. {
  107. if (mouseItem.hoverObj)
  108. {
  109. inventory.MoveItem(itemsDisplayed[obj], itemsDisplayed[mouseItem.hoverObj]);
  110. }
  111. else
  112. {
  113. for (int i = 0; i <inventory.Container.Items.Length; i++)
  114. {
  115. if (inventory.Container.Items[i].amount >= 1)
  116. {
  117. inventory.RemoveItem(itemsDisplayed[obj].item, 1);
  118. }
  119. }
  120. }
  121. Destroy(mouseItem.obj);
  122. mouseItem.item = null;
  123. }
  124. public void OnDrag(GameObject obj)
  125. {
  126. if (mouseItem.obj != null)
  127. mouseItem.obj.GetComponent<RectTransform>().position = Input.mousePosition;
  128. }
  129.  
  130.  
  131. ////Me added this :)
  132. //public void OnClick(GameObject obj)
  133. //{
  134. // mouseItem.hoverObj = obj;
  135. // if (itemsDisplayed.ContainsKey(obj))
  136. // {
  137. // mouseItem.hoverItem = itemsDisplayed[obj];
  138. // }
  139.  
  140. // if (itemsDisplayed[obj].ID >= 0)
  141. // {
  142. // itemsDisplayed[obj].item.Select();
  143. // }
  144.  
  145. //}
  146.  
  147. public Vector3 GetPosition(int i)
  148. {
  149. return new Vector3(X_START + (X_SPACE_BETWEEN_ITEM * (i % NUMBER_OF_COLUMN)), Y_START + (-Y_SPACE_BETWEEN_ITEMS * (i / NUMBER_OF_COLUMN)), 0f);
  150. }
  151. }
  152. public class MouseItem
  153. {
  154. public GameObject obj;
  155. public InventorySlot item;
  156. public InventorySlot hoverItem;
  157. public GameObject hoverObj;
  158. }
  159.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement