A 2D Farming RPG
This is just a simple 2D farming RPG game
Loading...
Searching...
No Matches
UIInventorySlot.cs
Go to the documentation of this file.
1using TMPro;
2using UnityEngine;
3using UnityEngine.EventSystems;
4using UnityEngine.UI;
5
6public class UIInventorySlot : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler
7{
9 public Image m_InventorySlotImage;
10 public TextMeshProUGUI m_TextMeshProUGUI;
11
12 [HideInInspector]
14
15 [HideInInspector]
16 public int m_ItemQuantity;
17
18 [HideInInspector]
19 public bool m_IsSelected = false;
20
21 private Camera m_MainCamera;
22 private Transform m_ParentItem;
23 private GameObject m_DraggedItem;
25 private Canvas m_ParentCanvas;
26
27 [SerializeField]
29
30 [SerializeField]
31 private GameObject m_InventoryTextBoxPrefab = null;
32
33 [SerializeField]
34 private GameObject m_ItemPrefab = null;
35
36 [SerializeField]
37 private int m_SlotNumber = 0;
38
43 private void Awake()
44 {
45 m_ParentCanvas = GetComponentInParent<Canvas>();
46 }
47
51 private void OnDisable()
52 {
53 EventHandler.AfterSceneLoadEvent -= SceneLoaded;
54 EventHandler.m_DropSelectedItemEvent -= DropSelectedItemAtMousePosition;
55 }
56
60 private void OnEnable()
61 {
62 EventHandler.AfterSceneLoadEvent += SceneLoaded;
63 EventHandler.m_DropSelectedItemEvent += DropSelectedItemAtMousePosition;
64 }
65
70 private void Start()
71 {
72 m_MainCamera = Camera.main;
73 m_GridCursor = FindObjectOfType<GridCursor>();
74 }
75
79 private void ClearCursors()
80 {
81 // Disable cursor
83
84 // Set item type to none.
85 m_GridCursor.SelectedItemType = ItemType.None;
86 }
87
91 private void SetSelectedItem()
92 {
93 // Clear currently highlighted items.
95
96 // Highlight item on inventory bar
97 m_IsSelected = true;
98
99 // Set highlighted inventory slot.
101
102 // Set use radius for cursor
103 m_GridCursor.ItemUseGridRadius = m_ItemDetails.m_ItemUseGridRadius;
104
105 // If item requires a grid cursor, then enable the cursor.
107 {
109 }
110 else
111 {
113 }
114
115 // Set item type
116 m_GridCursor.SelectedItemType = m_ItemDetails.m_ItemType;
117
118 // Set item selected in inventory
119 InventoryManager.Instance.SetSelectedInventoryItem( InventoryLocation.Player, m_ItemDetails.m_ItemCode );
120
121 if( m_ItemDetails.m_CanBeCarried == true )
122 {
123 // Show player carrying item
124 Player.Instance.ShowCarriedItem( m_ItemDetails.m_ItemCode );
125 }
126 else
127 {
128 Player.Instance.ClearCarriedItem();
129 }
130 }
131
135 private void ClearSelectedItem()
136 {
137 ClearCursors();
138
140
141 m_IsSelected = false;
142
143 // Set no item selected in inventory
144 InventoryManager.Instance.ClearSelectedInventoryItem( InventoryLocation.Player );
145
146 // Clear player carrying item
147 Player.Instance.ClearCarriedItem();
148 }
149
154 {
155 if( m_ItemDetails != null && m_IsSelected )
156 {
157 // Check if this is a valid cursor position or not.
159 {
160 Vector3 worldPosiiton = m_MainCamera.ScreenToWorldPoint( new Vector3( Input.mousePosition.x, Input.mousePosition.y, -m_MainCamera.transform.position.z ) );
161
162 // Create item from prefab at mouse position
163 GameObject itemGameObject = Instantiate( m_ItemPrefab, new Vector3( worldPosiiton.x, ( worldPosiiton.y - Settings.m_GridCellSize / 2.0f ), worldPosiiton.z ), Quaternion.identity, m_ParentItem );
164 Item item = itemGameObject.GetComponent<Item>();
165 item.ItemCode = m_ItemDetails.m_ItemCode;
166
167 // Remove item from player inventory.
168 InventoryManager.Instance.RemoveItem( InventoryLocation.Player, item.ItemCode );
169
170 // If no more of item then clear selected
171 if (InventoryManager.Instance.FindItemInInventory( InventoryLocation.Player, item.ItemCode) == -1 )
172 {
174 }
175 }
176 }
177 }
178
183 public void OnBeginDrag( PointerEventData eventData )
184 {
185 if( m_ItemDetails != null )
186 {
187 // Disable keyboard inputs.
188 Player.Instance.DisablePlayerInputAndResetMovement();
189
190 // Instantiate gameobject as dragged item
192
193 // Get Image for dragged item
194 Image draggedItemImage = m_DraggedItem.GetComponentInChildren<Image>();
195 draggedItemImage.sprite = m_InventorySlotImage.sprite;
196
198 }
199 }
200
205 public void OnDrag( PointerEventData eventData )
206 {
207 if( m_DraggedItem != null )
208 {
209 m_DraggedItem.transform.position = Input.mousePosition;
210 }
211 }
212
217 public void OnEndDrag( PointerEventData eventData )
218 {
219 // Destroy gameobject as dragged item
220 if( m_DraggedItem != null )
221 {
222 Destroy( m_DraggedItem );
223
224 // If drag ends over inventory bar, get item drag is over and swap them
225 if( eventData.pointerCurrentRaycast.gameObject != null && eventData.pointerCurrentRaycast.gameObject.GetComponent<UIInventorySlot>() != null )
226 {
227 // Get the slot number when the drag ends.
228 int toSlotNumber = eventData.pointerCurrentRaycast.gameObject.GetComponent<UIInventorySlot>().m_SlotNumber;
229
230 // Swap inventory items in inventory list.
231 InventoryManager.Instance.SwapInventoryItems( InventoryLocation.Player, m_SlotNumber, toSlotNumber );
232
233 // Destroy inventory text box
235
237 }
238 else
239 {
241 {
243 }
244 }
245
246 // Enable player Input
247 Player.Instance.EnablePlayerInput();
248 }
249 }
250
255 public void OnPointerClick( PointerEventData eventData )
256 {
257 if( eventData.button == PointerEventData.InputButton.Left )
258 {
259 // If inventory slot currently selected then deselect
260 if( m_IsSelected == true )
261 {
263 }
264 else
265 {
266 if( m_ItemQuantity > 0 )
267 {
269 }
270 }
271 }
272 }
273
278 public void OnPointerEnter( PointerEventData eventData )
279 {
280 if( m_ItemQuantity != 0 )
281 {
282 // Instantiate inventory textbox
283 m_InventoryBar.m_InventoryTextBoxGameObject = Instantiate( m_InventoryTextBoxPrefab, transform.position, Quaternion.identity );
284 m_InventoryBar.m_InventoryTextBoxGameObject.transform.SetParent( m_ParentCanvas.transform, false );
285
287
288 // Set item type description
289 string itemTypeDescription = InventoryManager.Instance.GetItemTypeDescription( m_ItemDetails.m_ItemType );
290
291 // Populate TextBox
292 inventoryTextBox.SetTextBoxText( m_ItemDetails.m_ItemDescription, itemTypeDescription, "", m_ItemDetails.m_ItemLongDescription, "", "" );
293
294 // Set TextBox position according to inventory bar position
296 {
297 m_InventoryBar.m_InventoryTextBoxGameObject.GetComponent<RectTransform>().pivot = new Vector2( 0.5f, 0f );
298 m_InventoryBar.m_InventoryTextBoxGameObject.transform.position = new Vector3( transform.position.x, transform.position.y + 50f, transform.position.z );
299 }
300 else
301 {
302 m_InventoryBar.m_InventoryTextBoxGameObject.GetComponent<RectTransform>().pivot = new Vector2( 0.5f, 1f );
303 m_InventoryBar.m_InventoryTextBoxGameObject.transform.position = new Vector3(transform.position.x, transform.position.y - 50f, transform.position.z);
304 }
305 }
306 }
307
314 public void OnPointerExit( PointerEventData eventData )
315 {
317 }
318
323 {
325 {
327 }
328 }
329
334 public void SceneLoaded()
335 {
336 m_ParentItem = GameObject.FindGameObjectWithTag( Tags.ItemsParentTransform ).transform;
337 }
338}
InventoryLocation
Describes the type of inventory and count Ex: player inventory or chest inventory
Definition: Enums.cs:108
ItemType
Describe the item type
Definition: Enums.cs:162
void DisableCursor()
Disable the cursor.
Definition: GridCursor.cs:205
void EnableCursor()
Enable the cursor.
Definition: GridCursor.cs:214
bool CursorPositionIsValid
Definition: GridCursor.cs:20
This class will manage all the inventory related operations.
This class holds information of items.
Definition: ItemDetails.cs:8
short m_ItemUseGridRadius
Definition: ItemDetails.cs:14
string m_ItemLongDescription
Definition: ItemDetails.cs:10
bool m_CanBeDropped
Definition: ItemDetails.cs:21
ItemType m_ItemType
Definition: ItemDetails.cs:17
bool m_CanBeCarried
Definition: ItemDetails.cs:23
int m_ItemCode
Definition: ItemDetails.cs:16
string m_ItemDescription
Definition: ItemDetails.cs:9
Definition: Item.cs:4
int ItemCode
Definition: Item.cs:11
This class has all the things related to player
Definition: Player.cs:8
This class handle the game settings.
Definition: Settings.cs:9
const float m_GridCellSize
Grid cell size in unity units.
Definition: Settings.cs:19
This class will have Tags values.
Definition: Tags.cs:5
const string ItemsParentTransform
Definition: Tags.cs:7
void ClearHighlightOnInventorySlots()
Clear all highlights from the inventory bar.
bool IsInventoryBarPositionBottom
GameObject m_InventoryTextBoxGameObject
GameObject m_InventoryBarDraggedItem
void SetHighlightedInventorySlots()
Set the selected highlight if set on all inventory item position
GameObject m_InventoryTextBoxPrefab
void Start()
Call after the awake Initialize main camera.
void DestroyInventoryTextBox()
Destroy gameobject when we hover away from the inventory slot.
void OnPointerClick(PointerEventData eventData)
If we click an item in the inventory set it or clear it another is already selected.
Transform m_ParentItem
void DropSelectedItemAtMousePosition()
Drop the item (if selected) at the current mouse position. Called by drop item event
UIInventoryBar m_InventoryBar
void ClearCursors()
Disable the cursor and change item type to none.
void OnPointerExit(PointerEventData eventData)
Call the function to destroy the gameobject. Once we hover away from the inventory slot,...
void OnBeginDrag(PointerEventData eventData)
Begin executing when we start to dran an item from the inventory bar
void Awake()
Get called when the script is loaded. Initialize the parent canvas.
GameObject m_ItemPrefab
void SceneLoaded()
When we add a new scene, we lost the previous game object and therefore need to find it again....
Image m_InventorySlotImage
ItemDetails m_ItemDetails
void OnDisable()
Unsubscribe from the AfterSceneLoadEvent event.
void OnPointerEnter(PointerEventData eventData)
Populate TextBox with item details.
void OnEndDrag(PointerEventData eventData)
If item is droppable, drop the item otherwise destroy it.
GameObject m_DraggedItem
Image m_InventorySlotHighlight
TextMeshProUGUI m_TextMeshProUGUI
void OnDrag(PointerEventData eventData)
Move gameobject as dragged item.
void SetSelectedItem()
Sets this inventory slot item to be selected
void ClearSelectedItem()
Clear currently highlighted items
GridCursor m_GridCursor
void OnEnable()
Subscribe to the AfterSceneLoadEvent event.
void SetTextBoxText(string textTop1, string textTop2, string textTop3, string textBottom1, string textBottom2, string textBottom3)
Set Text Values