using UnityEngine; using UnityEngine.EventSystems; using UIWidgets; namespace UIWidgetsSamples { /// /// TileViewSample drop support. /// [RequireComponent(typeof(TileViewSample))] public class TileViewSampleDropSupport : MonoBehaviour, IDropSupport { TileViewSample tistView; public TileViewSample TistView { get { if (tistView==null) { tistView = GetComponent(); } return tistView; } } [SerializeField] protected ListViewDropIndicator DropIndicator; #region IDropSupport /// /// Determines whether this instance can receive drop with the specified data and eventData. /// /// true if this instance can receive drop with the specified data and eventData; otherwise, false. /// Data. /// Event data. public bool CanReceiveDrop(TileViewItemSample data, PointerEventData eventData) { var index = TistView.GetNearestIndex(eventData); ShowDropIndicator(index); return true; } /// /// Process dropped data. /// /// Data. /// Event data. public void Drop(TileViewItemSample data, PointerEventData eventData) { var index = TistView.GetNearestIndex(eventData); DropItem(data, index); HideDropIndicator(); } /// /// Process canceled drop. /// /// Data. /// Event data. public void DropCanceled(TileViewItemSample data, PointerEventData eventData) { HideDropIndicator(); } #endregion /// /// Shows the drop indicator. /// /// Index. void ShowDropIndicator(int index) { if (DropIndicator!=null) { DropIndicator.Show(index, TistView); } } /// /// Hides the drop indicator. /// void HideDropIndicator() { if (DropIndicator!=null) { DropIndicator.Hide(); } } /// /// Add item to TileView.DataSource. /// /// Item. /// Index. void DropItem(TileViewItemSample item, int index) { if (index==-1) { TistView.DataSource.Add(item); } else { TistView.DataSource.Insert(index, item); } } } }