private Rect CalculateDragElementRect(DragElement element, double newHorizOffset, double newVertOffset) { if (ElementBeingDragged == null) { throw new InvalidOperationException("ElementBeingDragged is null."); } Size elemSize = element.Element.RenderSize; double x, y; if (element.ModifyLeftOffset) { x = newHorizOffset; } else { x = ActualWidth - newHorizOffset - elemSize.Width; } if (element.ModifyTopOffset) { y = newVertOffset; } else { y = ActualHeight - newVertOffset - elemSize.Height; } Point elemLoc = new Point(x, y); return(new Rect(elemLoc, elemSize)); }
protected void AddDragListener(DragElement dragElement, Action <DragData> handler) { dragElement.DragChangedSignal.RemoveAllListeners(); dragElement.DragChangedSignal.AddListener(handler); DragHandlers[dragElement.gameObject] = handler; }
protected void AttachDragListener(DragElement dragElement, Action <DragStateType> func) { UnityAction <DragStateType> internalAction = (val) => { func(val); }; dragElement.OnDragChanged.RemoveAllListeners(); dragElement.OnDragChanged.AddListener(internalAction); }
public void OnDrop(PointerEventData eventData) { if (eventData.pointerDrag != null) { hasElement = true; DragElement draggedElement = eventData.pointerDrag.GetComponent <DragElement>(); draggedElement.SetCellReference(this); eventData.pointerDrag.GetComponent <RectTransform>().anchoredPosition = GetComponent <RectTransform>().anchoredPosition; } }
private void LoadItems() { for (int i = 0; i < itemData.items.Count; i++) { Item item = itemData.items[i]; DragElement dragElement = Instantiate(itemPrefab.gameObject, toolboxContent).GetComponent <DragElement>(); dragElement.typeOfOperator = (i + 1); dragElement.GetComponent <Image>().sprite = item.sprite; } }
private void OnMouseMove(object sender, MouseEventArgs e) { if (this._dragStart && e.LeftButton == MouseButtonState.Pressed) { var item = this._selectedItem.Clone(); var dragObject = new DragElement(item); DragDrop.DoDragDrop(this._selectRect, dragObject, DragDropEffects.Copy); e.Handled = true; } else { this._dragStart = false; } }
private void ResetAnwser() { int childCount = answerPanel.childCount; for (int i = 0; i < childCount; i++) { DropObject slot = answerPanel.GetChild(i).GetComponent <DropObject>(); slot.isEmpty = true; DragElement dragElement = slot.GetComponentInChildren <DragElement>(); if (dragElement != null) { Destroy(dragElement.gameObject); } } }
public DragData(object sender, DragEventArgs e) { from = e.Data.GetData(typeof(DragElement)) as DragElement; _mode = GetDragMode(e); var senderElement = ((FrameworkElement)sender).DataContext as IDragElement; var conteiner = ((FrameworkElement)e.OriginalSource).DataContext as IDragElement; if (conteiner is IContainer && ((IContainer)conteiner).AcceptType(senderElement.GetType())) { to = new DragElement(senderElement, conteiner); } else { to = new DragElement(conteiner, senderElement); } }
private int[] GetCurrentAnwser() { int childCount = answerPanel.childCount; int[] currentAnswer = new int[childCount]; for (int i = 0; i < childCount; i++) { currentAnswer[i] = -1; Transform slot = answerPanel.GetChild(i); DragElement itemElement = slot.GetComponentInChildren <DragElement>(); if (itemElement != null) { currentAnswer[i] = itemElement.typeOfOperator; } } return(currentAnswer); }
private void DisplayAnswer(int[] answer, bool isStartup) { int childCount = answerPanel.childCount; int answerCount = answer.Length; int count = Math.Min(childCount, answerCount); for (int i = 0; i < count; i++) { int typeOfOperator = (answer[i] - 1); if (typeOfOperator < 0 || typeOfOperator >= itemData.items.Count) { continue; } DropObject dropObject = answerPanel.GetChild(i).GetComponent <DropObject>(); DragElement dragElement = Instantiate(itemPrefab, dropObject.TransformCache).GetComponent <DragElement>(); Item item = itemData.items[typeOfOperator]; dragElement.typeOfOperator = typeOfOperator; dragElement.GetComponent <Image>().sprite = item.sprite; dropObject.isEmpty = false; if (isStartup) { dragElement.TransformCache.localPosition = new Vector2(50, -50); } else { dragElement.TransformCache.localPosition = Vector2.zero; } dragElement.cloneOnDragging = false; dragElement.isClonning = false; dragElement.lastDropObject = dropObject; //dragElement.GetComponent<Graphic>().raycastTarget = false; } }
private DragElement CreateDragElement(FrameworkElement element) { bool modifyLeftOffset, modifyTopOffset; double left = GetLeft(element); double right = GetRight(element); double top = GetTop(element); double bottom = GetBottom(element); var origHorizOffset = ResolveOffset(left, right, out modifyLeftOffset); var origVertOffset = ResolveOffset(top, bottom, out modifyTopOffset); var dragElement = new DragElement { Element = element, DataContext = element.DataContext as IHudWindowElement, OrigHorizOffset = origHorizOffset, OrigVertOffset = origVertOffset, ModifyLeftOffset = modifyLeftOffset, ModifyTopOffset = modifyTopOffset }; return(dragElement); }
private void SetElementPosition(DragElement element, double shiftX, double shiftY) { double newHorizontalOffset, newVerticalOffset; #region Calculate Offsets if (element.ModifyLeftOffset) { newHorizontalOffset = element.OrigHorizOffset + shiftX; } else { newHorizontalOffset = element.OrigHorizOffset - shiftX; } if (element.ModifyTopOffset) { newVerticalOffset = element.OrigVertOffset + shiftY; } else { newVerticalOffset = element.OrigVertOffset - shiftY; } if (!AllowDragOutOfView) { #region Verify Drag Element Location Rect elemRect = CalculateDragElementRect(element, newHorizontalOffset, newVerticalOffset); bool leftAlign = elemRect.Left < 0; bool rightAlign = elemRect.Right > ActualWidth; if (leftAlign) { newHorizontalOffset = element.ModifyLeftOffset ? 0 : ActualWidth - elemRect.Width; } else if (rightAlign) { newHorizontalOffset = element.ModifyLeftOffset ? ActualWidth - elemRect.Width : 0; } bool topAlign = elemRect.Top < 0; bool bottomAlign = elemRect.Bottom > ActualHeight; if (topAlign) { newVerticalOffset = element.ModifyTopOffset ? 0 : ActualHeight - elemRect.Height; } else if (bottomAlign) { newVerticalOffset = element.ModifyTopOffset ? ActualHeight - elemRect.Height : 0; } #endregion } #endregion if (element.ModifyLeftOffset) { SetLeft(element.Element, newHorizontalOffset); if (element.DataContext != null) { element.DataContext.OffsetX = newHorizontalOffset / XFraction; } } else { SetRight(element.Element, newHorizontalOffset); } if (element.ModifyTopOffset) { SetTop(element.Element, newVerticalOffset); if (element.DataContext != null) { element.DataContext.OffsetY = newVerticalOffset / YFraction; } } else { SetBottom(element.Element, newVerticalOffset); } }
void OnEnable() { //获取当前编辑自定义Inspector的对象 element = (DragElement)target; }