153 lines
4.1 KiB
C#
Raw Normal View History

2025-09-08 14:51:28 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
2025-09-24 19:24:19 +08:00
namespace DongWuYiXue.DaoNiaoShu
2025-09-08 14:51:28 +08:00
{
public class DragManager : MonoBehaviour
{
private List<Drag> drags = new();
[HideInInspector]
public Drag drag;
Drag hoverDrag;
private void Start()
{
drags = GetComponentsInChildren<Drag>().ToList();
for (int i = 0; i < drags.Count; i++)
{
drags[i].Init(this);
}
}
public void Init()
{
drag = null;
hoverDrag = null;
for (int i = 0; i < drags.Count; i++)
{
drags[i].Init(this);
}
}
private void Update()
{
if (drag != null)
{
hoverDrag = GetHoverDrag();
2025-09-24 19:24:19 +08:00
if (hoverDrag != null)
2025-09-08 14:51:28 +08:00
{
2025-09-24 19:24:19 +08:00
if (drag.rightTarget != null)
2025-09-08 14:51:28 +08:00
{
if (drag.rightTarget == hoverDrag)
{
drag.right = true;
}
else
{
drag.right = false;
}
}
2025-09-24 19:24:19 +08:00
else if (hoverDrag.rightTarget != null)
2025-09-08 14:51:28 +08:00
{
if (drag == hoverDrag.rightTarget)
{
drag.right = true;
}
else
{
drag.right = false;
}
}
}
}
}
public void DragEnd()
{
2025-09-24 19:24:19 +08:00
if (drag != null && hoverDrag != null)
2025-09-08 14:51:28 +08:00
{
drag.rectTransform.position = hoverDrag.rectTransform.position;
drag.yourTarget = hoverDrag;
hoverDrag.yourTarget = drag;
hoverDrag.hoverImage.SetActive(false);
}
else
{
drag.ResetPos();
}
drag = null;
hoverDrag = null;
}
Drag GetHoverDrag()
{
for (int i = 0; i < drags.Count; i++)
{
Drag d = drags[i];
if (drag.group != d.group && d.hoverImage.activeSelf && !HasDrag(d))
{
return d;
}
}
return null;
}
/// <summary>
/// 判断该物体是否已经被其他物体所拖拽
/// </summary>
bool HasDrag(Drag d)
{
for (int i = 0; i < drags.Count; i++)
{
if (drags[i].yourTarget != null)
{
2025-09-24 19:24:19 +08:00
if (drags[i].yourTarget == d)
2025-09-08 14:51:28 +08:00
{
return true;
}
}
}
return false;
}
public void DisPlayResult()
{
for (int i = 0; i < drags.Count; i++)
{
if (drags[i].right && drags[i].drag)
{
drags[i].rightImage.SetActive(true);
}
2025-09-24 19:24:19 +08:00
else if (drags[i].drag)
2025-09-08 14:51:28 +08:00
{
drags[i].falseImage.SetActive(true);
}
}
}
public bool CheckAllDrag()
{
for (int i = 0; i < drags.Count; i++)
{
if (!drags[i].right && drags[i].drag)
{
return false;
}
}
return true;
}
public string GetYourAnswer()
{
string str = "";
for (int i = 0; i < drags.Count; i++)
{
if (!drags[i].drag && drags[i].yourTarget != null)
{
2025-09-29 11:43:07 +08:00
str += drags[i].yourTarget.dragName + "、";
2025-09-08 14:51:28 +08:00
}
}
if (string.IsNullOrEmpty(str))
{
return "用户未作答";
}
return str;
}
}
}