120 lines
3.5 KiB
C#
120 lines
3.5 KiB
C#
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using Yarn.Unity;
|
|
|
|
public class ClueInteraction : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler, IBeginDragHandler, IDragHandler, IEndDragHandler
|
|
{
|
|
private Transform originalParent;
|
|
public Transform OriginalParent => originalParent;
|
|
private Canvas canvas;
|
|
private ClueItem clueItem;
|
|
private bool isFavorited = false; // 初始未收藏
|
|
|
|
private RectTransform rectTransform;
|
|
private Vector2 originalAnchorMin;
|
|
private Vector2 originalAnchorMax;
|
|
private Vector2 originalOffsetMin;
|
|
private Vector2 originalOffsetMax;
|
|
private Vector2 originalPivot;
|
|
|
|
private CursorMode cursorMode = CursorMode.Auto;
|
|
|
|
private void Start()
|
|
{
|
|
canvas = GetComponentInParent<Canvas>();
|
|
clueItem = GetComponent<ClueItem>();
|
|
rectTransform = GetComponent<RectTransform>();
|
|
|
|
// 存储初始尺寸属性
|
|
StoreOriginalTransform();
|
|
}
|
|
|
|
private void StoreOriginalTransform()
|
|
{
|
|
originalParent = transform.parent;
|
|
originalAnchorMin = rectTransform.anchorMin;
|
|
originalAnchorMax = rectTransform.anchorMax;
|
|
originalOffsetMin = rectTransform.offsetMin;
|
|
originalOffsetMax = rectTransform.offsetMax;
|
|
originalPivot = rectTransform.pivot;
|
|
}
|
|
|
|
public void OnPointerEnter(PointerEventData eventData)
|
|
{
|
|
// 可以设置收藏夹样式的鼠标指针
|
|
// Cursor.SetCursor(favoriteCursor, Vector2.zero, cursorMode);
|
|
}
|
|
|
|
public void OnPointerExit(PointerEventData eventData)
|
|
{
|
|
Cursor.SetCursor(null, Vector2.zero, cursorMode);
|
|
}
|
|
|
|
public void OnPointerClick(PointerEventData eventData)
|
|
{
|
|
if (isFavorited)
|
|
{
|
|
Debug.Log("已经收藏,点击查看详情");
|
|
}
|
|
else
|
|
{
|
|
FavoritesManager.Instance.AddClue(clueItem.GetClueData());
|
|
Destroy(gameObject);
|
|
Debug.Log("收藏成功!");
|
|
}
|
|
}
|
|
|
|
public void OnBeginDrag(PointerEventData eventData)
|
|
{
|
|
if (!isFavorited) return;
|
|
|
|
transform.SetParent(canvas.transform);
|
|
GetComponent<CanvasGroup>().blocksRaycasts = false;
|
|
}
|
|
|
|
public void OnDrag(PointerEventData eventData)
|
|
{
|
|
if (!isFavorited) return;
|
|
|
|
transform.position = Input.mousePosition;
|
|
}
|
|
|
|
public void OnEndDrag(PointerEventData eventData)
|
|
{
|
|
if (!isFavorited) return;
|
|
|
|
if (transform.parent == canvas.transform)
|
|
{
|
|
ReturnToOriginalPosition();
|
|
}
|
|
GetComponent<CanvasGroup>().blocksRaycasts = true;
|
|
}
|
|
|
|
public void ReturnToOriginalPosition()
|
|
{
|
|
transform.SetParent(originalParent);
|
|
rectTransform.anchorMin = originalAnchorMin;
|
|
rectTransform.anchorMax = originalAnchorMax;
|
|
rectTransform.offsetMin = originalOffsetMin;
|
|
rectTransform.offsetMax = originalOffsetMax;
|
|
rectTransform.pivot = originalPivot;
|
|
transform.localPosition = Vector3.zero; // 重置为初始局部位置
|
|
}
|
|
|
|
public void SetClueParentAndPosition(Transform newParent)
|
|
{
|
|
rectTransform.SetParent(newParent);
|
|
// rectTransform.anchorMin = Vector2.zero;
|
|
// rectTransform.anchorMax = Vector2.one;
|
|
// rectTransform.offsetMin = Vector2.zero;
|
|
// rectTransform.offsetMax = Vector2.zero;
|
|
rectTransform.pivot = new Vector2(0.5f, 0.5f);
|
|
transform.localPosition = Vector3.zero;
|
|
}
|
|
|
|
public void SetIsFavorited(bool isFavorited)
|
|
{
|
|
this.isFavorited = isFavorited;
|
|
}
|
|
}
|