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);
}
}
}
}