Files
BH3/Assets/Scripts/Assembly-CSharp/MoleMole/SlideWithScroll.cs
2025-08-13 09:26:42 +08:00

105 lines
2.3 KiB
C#

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace MoleMole
{
public class SlideWithScroll : MonoBehaviour
{
private const float TRANSIT_LINEAR_LERP_TIME = 1f;
public ScrollRect scrollRect;
private float _orginPosition;
private float _targetPosition;
private float _timer;
private RectTransform _rectTrans;
private float _step;
private void Start()
{
_timer = 0f;
scrollRect.horizontalNormalizedPosition = 0f;
_orginPosition = scrollRect.horizontalNormalizedPosition;
_targetPosition = _orginPosition;
_rectTrans = base.transform as RectTransform;
_step = 1f / (float)_rectTrans.childCount;
OnScrollView();
}
private void Update()
{
if (_orginPosition != _targetPosition)
{
_timer += Time.deltaTime;
if (_timer < 1f)
{
scrollRect.horizontalNormalizedPosition = Mathf.Lerp(_orginPosition, _targetPosition, _timer / 1f);
}
else
{
scrollRect.horizontalNormalizedPosition = _targetPosition;
_orginPosition = _targetPosition;
_timer = 0f;
}
}
OnScrollView();
}
public void SetTargetPosition(float targetPosition)
{
_targetPosition = targetPosition;
}
public void Next()
{
if (_orginPosition + _step > 1f)
{
_targetPosition = 1f;
}
else
{
_targetPosition = _orginPosition + _step;
}
}
public void Last()
{
if (_orginPosition - _step < 0f)
{
_targetPosition = 0f;
}
else
{
_targetPosition = _orginPosition - _step;
}
}
private void OnScrollView()
{
Vector2 position = _rectTrans.TransformPoint(_rectTrans.rect.position);
Vector2 size = _rectTrans.TransformVector(_rectTrans.rect.size);
Rect rect = new Rect(position, size);
Transform transform = base.transform.Find("Content");
for (int i = 0; i < transform.childCount; i++)
{
Transform child = transform.GetChild(i);
RectTransform rectTransform = child as RectTransform;
Vector2 position2 = rectTransform.TransformPoint(rectTransform.rect.position);
Vector2 size2 = rectTransform.TransformVector(rectTransform.rect.size);
Rect other = new Rect(position2, size2);
bool active = rect.Overlaps(other, true);
child.gameObject.SetActive(active);
}
}
public void OnEndDrag(PointerEventData data)
{
}
}
}