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); } }
public void OnEndDrag(PointerEventData eventData) { if (!draggable) { return; } if (draggedInstance.IsNotNull()) { if (onDragEndEvent.IsNotNull()) { onDragEndEvent.Invoke(this, eventData.position); } Destroy(draggedInstance.gameObject); } dragging = false; }
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; }
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); } } } } }