using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class SelectLevelPanel : MonoBehaviour,IBeginDragHandler,IDragHandler,IEndDragHandler
{
public enum GuessDir
{
//无
none = 0,
//上
up = 1,
//下
down = 2
}
Scrollbar scrollBar;
float y;
GuessDir dir = GuessDir.none;
float k;
private Coroutine con;
private float allHeight = 3200; //n-1个子物体之和
void Start()
{
scrollBar = GameObject.Find("Scrollbar").GetComponent<Scrollbar>();
dir = GuessDir.none;
k = 1f / allHeight; // allHeight 是Grid总宽度 - 1个子物体的宽度
}
public void OnBeginDrag(PointerEventData eventData)
{
if (eventData.pointerEnter == null)
{
return;
}
y = Input.GetAxis("Mouse Y");
if (y < 0)
{
dir = GuessDir.down;
if (scrollBar.value >= 0)
{
if (con != null)
{
StopCoroutine(con);
}
con = StartCoroutine(OnScrollLerpRight(dir, eventData.pointerEnter.transform));
}
}
else if (y > 0)
{
dir = GuessDir.up;
if (scrollBar.value <= 1)
{
if (con != null)
{
StopCoroutine(con);
}
con = StartCoroutine(OnScrollLerpRight(dir, eventData.pointerEnter.transform));
}
}
}
IEnumerator OnScrollLerpRight(GuessDir dir, Transform trans)
{
Debug.LogError(dir);
while (true)
{
if (dir == GuessDir.up)
{
scrollBar.value = Mathf.Lerp(scrollBar.value, (trans.localPosition.y + 1600 + allHeight) * k, 0.05f); // 1600 是每个子物体的高度
if (scrollBar.value == (trans.localPosition.y + 1600 + allHeight) * k)
{
break;
}
}
else if (dir == GuessDir.down)
{
scrollBar.value = Mathf.Lerp(scrollBar.value, (trans.localPosition.y - 1600 + allHeight) * k , 0.05f);
if (scrollBar.value == -(trans.localPosition.y - 1600 + allHeight) * k)
{
break;
}
}
yield return 1;
}
}
public void OnDrag(PointerEventData eventData)
{
}
public void OnEndDrag(PointerEventData eventData)
{
}
}