Ejemplo n.º 1
0
        void OnLongClick()
        {
            EnterState_AfterLongClickDragAccepted_WaitingToBeginDrag();
            var evSystem = GetOrFindEventSystem();

            if (!evSystem)
            {
                EnterState_WaitingForPress();
                return;
            }

            var canvas         = GetComponentInParent <Canvas>();
            var raycaster      = canvas.GetComponentInParent <GraphicRaycaster>();
            var raycastResults = new List <RaycastResult>();
            var pev            = new PointerEventData(evSystem);

            pev.position = _CurrentPressEventWorldPosition;
            raycaster.Raycast(pev, raycastResults);
            bool foundThis = false;

            foreach (var res in raycastResults)
            {
                if (res.gameObject == gameObject)
                {
                    foundThis = true;
                    break;
                }
            }

            // Happens if the object is moved externally while the pointer remains still
            if (!foundThis)
            {
                EnterState_AfterLongClickDragDeclined_WaitingToBeginDrag();
                return;
            }

            _Canvas           = canvas;
            _CanvasRT         = _Canvas.transform as RectTransform;
            _GraphicRaycaster = raycaster;
            var pos = RT.position;

            RT.SetParent(_CanvasRT, false);
            RT.position = pos;             // preserving the pos

            SetVisualMode(VisualMode.OVER_OWNER_OR_OUTSIDE);
            if (dragDropListener != null && !dragDropListener.OnPrepareToDragItem(this))
            {
                EnterState_AfterLongClickDragDeclined_WaitingToBeginDrag();
            }
        }