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