using System.Collections; using System.Collections.Generic; using UnityEngine; using Turing.Samples; using Turing.Core.EventSystems; using UnityEngine.EventSystems; using QFramework; using UnityEngine.Events; using DG.Tweening; public class TuringDraggableEx : Draggable, IObjDrag { bool isOn = false; UnityEvent OnDragEnd; bool IObjDrag.isOn { get => isOn; set => isOn = value; } Vector3 beginPos; UnityEvent IObjDrag.OnDragEnd { get { if (OnDragEnd == null) { OnDragEnd = new UnityEvent(); } return OnDragEnd; } } Vector3 startPosition; Vector3 startRotation; private void Start() { isOn = false; startPosition = gameObject.transform.localPosition; startRotation = gameObject.transform.localEulerAngles; } public override void OnBeginDrag(PointerEventData eventData) { if (eventData.button != 0) { return; } beginPos = gameObject.Position(); if (isOn == false) { gameObject.transform.position = beginPos; } else { base.OnBeginDrag(eventData); } } public override void OnDrag(PointerEventData eventData) { if (eventData.button != 0) { return; } if (isOn) { base.OnDrag(eventData); } else { gameObject.transform.position = beginPos; } } public override void OnEndDrag(PointerEventData eventData) { if (eventData.button != 0) { return; } if (isOn) { base.OnEndDrag(eventData); OnDragEnd?.Invoke(gameObject); } } public void OnDoubleClick() { transform.DOLocalMove(startPosition, 0.1f); transform.localEulerAngles = startRotation; } }