Esempio n. 1
0
 void Drop()
 {
     draggedHold = false;
     if (EventObserver.instance.happeningEvent == Events.DragMultiplePixelsStart ||
         EventObserver.instance.happeningEvent == Events.DragMultiplePixels)
     {
         // Group.UngroupOneByOne();
         if (_cachedSelectedPixels.IsNotNull())
         {
             _cachedSelectedPixels.Clear();
         }
     }
     else
     {
         // var closestPixel = GetClosestPixel();
         // if (closestPixel.IsNotNull())
         // {
         //     var closestAnchor = GetClosestAnchor(closestPixel);
         //     if (closestAnchor.IsNotNull())
         //     {
         //         transform.position = closestAnchor.transform.position;
         //     }
         // }
     }
     if (onDrop.IsNotNull())
     {
         onDrop.Invoke(this, transform.position);
     }
 }
Esempio n. 2
0
 public void OnEndDrag(PointerEventData eventData)
 {
     if (!draggable)
     {
         return;
     }
     if (draggedInstance.IsNotNull())
     {
         if (onDragEndEvent.IsNotNull())
         {
             onDragEndEvent.Invoke(this, eventData.position);
         }
         Destroy(draggedInstance.gameObject);
     }
     dragging = false;
 }
Esempio n. 3
0
    void DragStart()
    {
        var hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

        if (hit.collider != null)
        {
            // if hitting the pivot of group
            var hittingPivot = hit.transform.GetComponent <GroupPivot>();
            if (hittingPivot.IsNotNull())
            {
                return;
            }
        }
        // if this pixel is non-selecting, then deselecting all another one
        if (!selecting && !SelectObjectManager.instance.multipleChoice)
        {
            var pixelsWithoutThis = pixelManager.GetPixels(x => x.id != this.id && x.selecting);
            if (pixelsWithoutThis.Any())
            {
                var pixelsWithoutThisToArray = pixelsWithoutThis.ToArray();
                foreach (var p in pixelsWithoutThisToArray)
                {
                    p.Deselect();
                }
                pixelsWithoutThisToArray = null;
            }
        }
        var selectedPixels        = pixelManager.GetPixels(x => x.selecting);
        var countOfSelectedPixels = selectedPixels.Count();
        var realPosition          = transform.localPosition;
        var mousePosition         = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        // if multipleChoice was actived, then denying dragging start of group
        if (countOfSelectedPixels > 1 && !SelectObjectManager.instance.multipleChoice)
        {
            if (_cachedSelectedPixels.IsNull())
            {
                _cachedSelectedPixels = new List <Pixel>();
            }
            _cachedSelectedPixels.Clear();
            _cachedSelectedPixels = selectedPixels.ToList();
            // var selectedPoints = _cachedSelectedPixels.Select(x => x.transform.position).ToArray();
            // var centerPoint = TransformUtility.ComputeCenterPoint(selectedPoints);
            // var selectedPosition = centerPoint.ToVector2();
            // realPosition = selectedPosition;
            // selectedPoints = null;
            _anchorMovePoint = mousePosition;
            // Group.Create();
            // var group = GetFirstGroup();
            // if (group.IsNotNull())
            // {
            //     realPosition = group.transform.localPosition;
            // }

            realPosition = transform.position;
            EventObserver.instance.happeningEvent = Events.DragMultiplePixelsStart;
        }
        else
        {
            // if pixel has been in any group, then getting world position of it for computing accurately.
            if (group.IsNotNull())
            {
                var group = GetFirstGroup();
                if (group.IsNotNull())
                {
                    realPosition = group.transform.localPosition;
                }
            }
            _anchorMovePoint = realPosition - mousePosition;
            EventObserver.instance.happeningEvent = Events.DragPixelStart;
        }
        // _anchorMovePoint = realPosition - mousePosition;
        // if multipleChoice was actived, then denying of dragging
        draggedHold = true && !SelectObjectManager.instance.multipleChoice;
        if (onDragStart.IsNotNull())
        {
            onDragStart.Invoke(this, transform.position);
        }
        selectedPixels = null;
    }
Esempio n. 4
0
    void Drag()
    {
        if (draggedHold)
        {
            if (Input.GetAxis("Mouse X") != 0 || Input.GetAxis("Mouse Y") != 0)
            {
                if (EventObserver.instance.happeningEvent == Events.DragPixelStart)
                {
                    EventObserver.instance.happeningEvent = Events.DragPixel;
                }
                if (EventObserver.instance.happeningEvent == Events.DragMultiplePixelsStart)
                {
                    EventObserver.instance.happeningEvent = Events.DragMultiplePixels;
                }

                // move if mouse has any movement
                var mousePosition      = Input.mousePosition;
                var worldMousePosition = Camera.main.ScreenToWorldPoint(mousePosition);
                var targetPosition     = worldMousePosition.ToVector2();

                if (EventObserver.instance.happeningEvent == Events.DragMultiplePixels)
                {
                    if (!_cachedSelectedPixels.Any())
                    {
                        return;
                    }
                    targetPosition = targetPosition.Snap2();
                    var distanceDelta           = targetPosition - _anchorMovePoint;
                    var firstOuterGroupSelected = new List <int>();
                    _cachedSelectedPixels.ForEach(pixel =>
                    {
                        var firstGroup = pixel.GetFirstGroup();
                        if (firstGroup.IsNotNull())
                        {
                            if (firstOuterGroupSelected.Contains(firstGroup.id))
                            {
                                return;
                            }
                            firstOuterGroupSelected.Add(firstGroup.id);
                            var firstGroupTransform      = firstGroup.transform;
                            var firstGroupPosition       = firstGroupTransform.position;
                            var snapPosition             = firstGroupPosition + new Vector3(distanceDelta.x, distanceDelta.y, firstGroupPosition.z);
                            firstGroupTransform.position = snapPosition.ToVector2().Snap2();
                        }
                        else
                        {
                            var pixelTransform      = pixel.transform;
                            var pixelPosition       = pixelTransform.position;
                            var snapPosition        = pixelPosition + new Vector3(distanceDelta.x, distanceDelta.y, pixelPosition.z);
                            pixelTransform.position = snapPosition.ToVector2().Snap2();
                        }
                    });
                    firstOuterGroupSelected.Clear();
                    _anchorMovePoint = targetPosition;
                }
                else
                {
                    var realPosition = targetPosition + _anchorMovePoint;
                    realPosition = realPosition.Snap2();
                    if (group.IsNotNull())
                    {
                        // if pixel has been in a group, then move that group
                        var group = GetFirstGroup();
                        if (group.IsNotNull())
                        {
                            group.transform.position = realPosition;
                        }
                    }
                    else
                    {
                        // if pixel was in normal state
                        transform.position = realPosition;
                    }
                    if (onDrag.IsNotNull())
                    {
                        onDrag.Invoke(this, realPosition);
                    }
                }
            }
        }
    }