Files
aibis-dream/Assets/Scripts/Clue/ClueInteraction.cs
T
2024-11-09 15:41:45 +08:00

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;
}
}