void CancelDrag() { _isDragging = false; //If it's a clone, delete it if (_reorderableList.CloneDraggedObject) { Destroy(_draggingObject.gameObject); } //Else replace the draggedObject to his first place else { RefreshSizes(); _draggingObject.SetParent(_reorderableList.Content, false); _draggingObject.rotation = _reorderableList.Content.transform.rotation; _draggingObject.SetSiblingIndex(_fromIndex); var args = new ReorderableList.ReorderableListEventStruct { DroppedObject = _draggingObject.gameObject, IsAClone = _reorderableList.CloneDraggedObject, SourceObject = _reorderableList.CloneDraggedObject ? gameObject : _draggingObject.gameObject, FromList = _reorderableList, FromIndex = _fromIndex, ToList = _reorderableList, ToIndex = _fromIndex }; _reorderableList.OnElementAdded.Invoke(args); if (!isValid) { throw new Exception("Transfer is already Cancelled."); } } //Delete fake element if (_fakeElement != null) { Destroy(_fakeElement.gameObject); } }
public void OnEndDrag(PointerEventData eventData) { if (_parentHeader != null) { _parentHeader.Dragging = false; } _isDragging = false; if (_draggingObject != null) { //If we have a, ReorderableList that is dropable //Put the dragged object into the content and at the right index if (_reorderableList != null && _reorderableList.IsDropable) { var args = new ReorderableList.ReorderableListEventStruct { DroppedObject = _draggingObject.gameObject, IsAClone = _reorderableList.CloneDraggedObject, SourceObject = _reorderableList.CloneDraggedObject ? gameObject : _draggingObject.gameObject, FromList = _reorderableList, FromIndex = _fromIndex, ToList = _reorderableList, ToIndex = _fakeElement.GetSiblingIndex() }; //Send OnelementDropped Event if (_reorderableList && _reorderableList.OnElementDropped != null) { _reorderableList.OnElementDropped.Invoke(args); } if (!isValid) { CancelDrag(); return; } RefreshSizes(); _draggingObject.SetParent(_reorderableList.Content, false); _draggingObject.rotation = _reorderableList.transform.rotation; _draggingObject.SetSiblingIndex(_fakeElement.GetSiblingIndex()); _reorderableList.OnElementAdded.Invoke(args); int index = _draggingObject.GetSiblingIndex(); int old = -1; if (index > 0) { if (_draggingObject.parent != null && _draggingObject.parent.childCount > 1) { var above = _draggingObject.parent.GetChild(index - 1); var group = above.GetComponent <VesselGroup>(); if (group != null) { old = group.Index; } } } if (_parentHeader != null) { _parentHeader.UpdatePosition(index, old); } if (!isValid) { throw new Exception("It's too late to cancel the Transfer! Do so in OnElementDropped!"); } } //We don't have an ReorderableList else { if (this.isDroppableInSpace) { _reorderableList.OnElementDropped.Invoke(new ReorderableList.ReorderableListEventStruct { DroppedObject = _draggingObject.gameObject, IsAClone = _reorderableList.CloneDraggedObject, SourceObject = _reorderableList.CloneDraggedObject ? gameObject : _draggingObject.gameObject, FromList = _reorderableList, FromIndex = _fromIndex }); } else { CancelDrag(); } } } //Delete fake element if (_fakeElement != null) { Destroy(_fakeElement.gameObject); } }