DragDropItem.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using UnityEngine;
  2. using UnityEngine.EventSystems;
  3. public class DragDropItem : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerClickHandler
  4. {
  5. public InventoryItem item;
  6. private InventoryUIController inventoryUI;
  7. private CharacterInGroup owner;
  8. private float lastClickTime = 0f;
  9. private const float doubleClickThreshold = 0.3f;
  10. public void Init(InventoryItem i, InventoryUIController ui, CharacterInGroup chara)
  11. {
  12. item = i;
  13. inventoryUI = ui;
  14. owner = chara;
  15. }
  16. public void OnPointerClick(PointerEventData eventData)
  17. {
  18. // Double-click to use consumable items
  19. if (Time.time - lastClickTime < doubleClickThreshold)
  20. {
  21. if (item != null && item.itemType == ItemType.Consumable)
  22. {
  23. item.Use(owner);
  24. // Remove item if quantity is 0
  25. if (item.quantity <= 0)
  26. {
  27. owner.inventory.items.Remove(item);
  28. }
  29. inventoryUI.Refresh();
  30. }
  31. }
  32. lastClickTime = Time.time;
  33. }
  34. public void OnBeginDrag(PointerEventData eventData)
  35. {
  36. transform.SetParent(transform.root); // float au-dessus
  37. }
  38. public void OnDrag(PointerEventData eventData)
  39. {
  40. transform.position = eventData.position;
  41. }
  42. public void OnEndDrag(PointerEventData eventData)
  43. {
  44. GameObject dropTarget = eventData.pointerEnter;
  45. if (dropTarget != null && dropTarget.CompareTag("Portrait"))
  46. {
  47. CharacterUIController receiverUI = dropTarget.GetComponentInParent<CharacterUIController>();
  48. if (receiverUI != null && receiverUI.Character != owner)
  49. {
  50. inventoryUI.TransferItem(item, receiverUI.Character);
  51. }
  52. }
  53. inventoryUI.Refresh(); // Retour à sa place si non transféré
  54. }
  55. }