You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

98 lines
2.5 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class BagItem : Dragable
{
[SerializeField]
protected LogicBlock logicElement;
protected LogicTrayUI tray;
protected RectTransform trayRect;
private bool isHovered;
public override void OnBeginDrag(PointerEventData eventData)
{
base.OnBeginDrag(eventData);
tray = FindObjectOfType<LogicTrayUI>();
if (tray != null)
trayRect = (tray.transform as RectTransform);
}
public override void OnDrag(PointerEventData data)
{
base.OnDrag(data);
DoTrayLogic(data);
string output = "";
foreach (GameObject hover in data.hovered)
output += hover.name + " ";
Debug.Log(output);
}
protected virtual void DoTrayLogic(PointerEventData data)
{
if (trayRect == null)
return;
var rt = m_DraggingIcon.GetComponent<RectTransform>();
if (GetWorldSpaceRect(trayRect).Overlaps(GetWorldSpaceRect(rt)))
{
if (!isHovered)
{
tray.OnHoverStart(this, rt);
isHovered = true;
}
tray.OnHoverUpdate(this, rt);
}else if (isHovered)
{
isHovered = false;
tray.OnHoverEnd(this);
}
}
public override void OnEndDrag(PointerEventData eventData)
{
base.OnEndDrag(eventData);
if (isHovered)
{
isHovered = false;
tray.InsertLogicElement(logicElement);
tray.OnHoverEnd(this);
}
}
private void drawRect(RectTransform transform,Color color,bool global = true)
{
Rect rect = transform.rect;
if (global)
rect = GetWorldSpaceRect(transform);
Debug.DrawLine(new Vector3(rect.min.x,rect.max.y,0), new Vector3(rect.max.x, rect.max.y, 0), color);
Debug.DrawLine(new Vector3(rect.max.x, rect.max.y, 0), new Vector3(rect.max.x, rect.min.y, 0), color);
Debug.DrawLine(new Vector3(rect.max.x, rect.min.y, 0), new Vector3(rect.min.x, rect.min.y, 0), color);
Debug.DrawLine(new Vector3(rect.min.x, rect.min.y, 0), new Vector3(rect.min.x, rect.max.y, 0), color);
}
Rect GetWorldSpaceRect(RectTransform rt)
{
var r = rt.rect;
Vector2 centre = rt.TransformPoint(r.center);
r.size = rt.TransformVector(r.size);
r.center = centre;
return r;
}
}