Hi so im trying to create a nice drag and drop function for my inventory.
i have it mostly complete but what id like to do is have it so i cant drop the item onto another item.
you can see what im trying to avoid in the gif below
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class ItemSlot : MonoBehaviour, IPointerDownHandler,IPointerUpHandler, IPointerEnterHandler, IPointerExitHandler, IDragHandler
{
public GameObject toolTip;
public Text ItemName;
public Text ItemDesc;
public Text ItemAmount;
public Text ItemWeight;
public Transform player;
Vector3 startPos;
public bool draging;
public Item item;
private GameObject InvUi;
void Update()
{
if (transform.name == "")
{
gameObject.SetActive(false);
}
GetComponent<Image>().sprite = Resources.Load<Sprite>("Sprites/" + item.ItemName);
ItemName.text = item.ItemName;
ItemDesc.text = item.ItemDescription;
ItemAmount.text = item.ItemAmount.ToString();
float weight = item.ItemAmount * item.ItemWeight;
ItemWeight.text = weight.ToString();
InvUi = GameObject.Find("HUDCanvas/InventoryUI");
if (draging)
{
transform.position = Input.mousePosition;
}
}
public void OnPointerDown(PointerEventData data)
{
draging = true;
startPos = transform.position;
}
public void OnPointerUp(PointerEventData data)
{
if (RectTransformUtility.RectangleContainsScreenPoint(InvUi.transform.GetComponent<RectTransform>(), transform.position, null))
{
draging = false;
}
else
{
player.GetComponent<Inventory>().dropItem(item);
draging = false;
transform.position = startPos;
toolTip.SetActive(false);
}
}
public void OnDrag(PointerEventData data)
{
}
public void OnEndDrag(PointerEventData eventData)
{
}
public void OnPointerEnter(PointerEventData data)
{
toolTip.SetActive(true);
}
public void OnPointerExit(PointerEventData data)
{
toolTip.SetActive(false);
}
}