From 973edc44a04dceb8b48a32ca912e6167f86189d4 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 25 八月 2025 17:38:02 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts

---
 Main/Component/UI/Common/DragItem.cs |  154 +++++++++++++++++++++++++++++++++++----------------
 1 files changed, 106 insertions(+), 48 deletions(-)

diff --git a/Main/Component/UI/Common/DragItem.cs b/Main/Component/UI/Common/DragItem.cs
index 0e6f8da..7ba9652 100644
--- a/Main/Component/UI/Common/DragItem.cs
+++ b/Main/Component/UI/Common/DragItem.cs
@@ -1,61 +1,119 @@
-锘�//--------------------------------------------------------
-//    [Author]:           绗簩涓栫晫
+//--------------------------------------------------------
+//    [Author]:           鐜╀釜娓告垙
 //    [  Date ]:           Monday, July 31, 2017
 //--------------------------------------------------------
 using UnityEngine;
 using System.Collections;
 using UnityEngine.EventSystems;
 using System;
+using UnityEngine.Events;
 
-namespace vnxbqy.UI {
+/// <summary>
+/// 鎷栨嫿缁勪欢锛屽疄鐜版嫋鎷藉姛鑳藉苟闄愬埗鎷栨嫿鑼冨洿
+/// </summary>
+public class DragItem:MonoBehaviour,ICanvasRaycastFilter,IBeginDragHandler,IDragHandler,IEndDragHandler 
+{
+    [SerializeField] public Canvas parentCanvas;
+    [SerializeField] public Canvas canvas;
+    // 鎷栨嫿鍖哄煙闄愬埗
+    [SerializeField]
+    RectTransform m_Area;
+    public RectTransform area { get { return m_Area; } }
 
-    public class DragItem:MonoBehaviour,ICanvasRaycastFilter,IBeginDragHandler,IDragHandler,IEndDragHandler {
-
-        [SerializeField]
-        RectTransform m_Area;
-        public RectTransform area { get { return m_Area; } }
-
-        [SerializeField]
-        bool m_RaycastTarget = true;
-        public bool raycastTarget {
-            get { return m_RaycastTarget; }
-            private set { m_RaycastTarget = value; }
-        }
-
-        RectTransform m_RectTransform;
-        public RectTransform rectTransform { get { return this.transform as RectTransform; } }
-
-        public void OnBeginDrag(PointerEventData eventData) {
-            raycastTarget = false;
-            this.transform.position = UIUtility.ClampWorldPosition(area,eventData);
-        }
-
-        public void OnDrag(PointerEventData eventData) {
-            this.transform.position = UIUtility.ClampWorldPosition(area,eventData);
-        }
-
-        public void OnEndDrag(PointerEventData eventData) {
-            raycastTarget = true;
-            if(eventData.pointerEnter == null) {
-                return;
-            }
-
-            var container = eventData.pointerEnter.GetComponent<DragContainer>();
-            if(container == null) {
-                return;
-            }
-
-            var contain = UIUtility.RectTransformContain(eventData.pointerEnter.transform as RectTransform,rectTransform);
-            if(contain) {
-                rectTransform.position = eventData.pointerEnter.transform.position;
-            }
-        }
-
-        public bool IsRaycastLocationValid(Vector2 sp,Camera eventCamera) {
-            return raycastTarget;
-        }
+    // 鏄惁鍏佽灏勭嚎妫�娴�
+    [SerializeField]
+    bool m_RaycastTarget = true;
+    public bool raycastTarget {
+        get { return m_RaycastTarget; }
+        private set { m_RaycastTarget = value; }
     }
 
+    [NonSerialized] public int pos;
+
+    private DragContainer lastTransform;
+
+    // 褰撳墠瀵硅薄鐨凴ectTransform缁勪欢
+    RectTransform rectTransform { get { return this.transform as RectTransform; } }
+
+
+    /// <summary>
+    /// 寮�濮嬫嫋鎷芥椂璋冪敤
+    /// </summary>
+    public void OnBeginDrag(PointerEventData eventData)
+    {
+        raycastTarget = false;
+        this.transform.position = UIUtility.ClampWorldPosition(area, eventData);
+        rectTransform.localScale = Vector3.one * 1.2f;
+
+        canvas.sortingLayerID =  parentCanvas.sortingLayerID;
+        canvas.sortingOrder = parentCanvas.sortingOrder + pos + 10;
+    }
+
+    /// <summary>
+    /// 鎷栨嫿杩囩▼涓皟鐢�
+    /// </summary>
+    public void OnDrag(PointerEventData eventData) {
+        this.transform.position = UIUtility.ClampWorldPosition(area,eventData);
+        
+        // 妫�娴嬫槸鍚﹁繘鍏ョ洰鏍囧尯鍩�
+        if (eventData.pointerEnter != null)
+        {
+            if (lastTransform != null && lastTransform != eventData.pointerEnter.GetComponent<DragContainer>())
+            { 
+                lastTransform.mainTransform.localScale = Vector3.one;
+                lastTransform = null;
+            }
+            var target = eventData.pointerEnter.GetComponent<DragContainer>();
+            // 杈撳嚭缁勪欢璺緞
+            if (target != null)
+            {
+                lastTransform = target;
+                // 杩涘叆鐩爣鍖哄煙锛屾斁澶� 1.2 鍊�
+                lastTransform.mainTransform.localScale = Vector3.one * 1.2f;
+            }
+        }
+        rectTransform.localScale = Vector3.one * 1.2f;
+    }
+
+    /// <summary>
+    /// 缁撴潫鎷栨嫿鏃惰皟鐢�
+    /// </summary>
+    public Action<int, int> onEndDragEvent;
+
+    public void OnEndDrag(PointerEventData eventData)
+    {
+        raycastTarget = true;
+        rectTransform.localScale = Vector3.one;
+        
+        if (lastTransform != null)
+        {
+            lastTransform.mainTransform.localScale = Vector3.one;
+            lastTransform = null;
+        }
+
+        if (eventData.pointerEnter == null)
+        {
+            onEndDragEvent?.Invoke(pos, -1);
+            return;
+        }
+
+        var container = eventData.pointerEnter.GetComponent<DragContainer>();
+        if (container == null)
+        {
+            onEndDragEvent?.Invoke(pos, -1);
+            return;
+        }
+        onEndDragEvent?.Invoke(pos, container.pos);
+        canvas.sortingLayerID =  parentCanvas.sortingLayerID;
+        canvas.sortingOrder = parentCanvas.sortingOrder + pos + 1;
+    }
+
+    /// <summary>
+    /// 鍒ゆ柇灏勭嚎妫�娴嬫槸鍚︽湁鏁�
+    /// </summary>
+    public bool IsRaycastLocationValid(Vector2 sp,Camera eventCamera) {
+        return raycastTarget;
+    }
 }
 
 

--
Gitblit v1.8.0