Files
ImaageQ_Unity_App/Assets/Common/Scripts/SwipeController.cs
Ignacio Gómez Puga 5847d844a5 Removed TOTU 103
2025-03-04 12:04:52 -06:00

92 lines
2.1 KiB
C#

// Copyright 2022-2024 Niantic.
using System.Collections;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class SwipeController : MonoBehaviour, IEndDragHandler
{
[SerializeField]
private int _maxPage =2;
int _currentPage;
Vector3 _targetPos;
float _dragThreshold;
[SerializeField]
Vector3 _pageStep;
[SerializeField]
RectTransform _levelPagesRect;
[SerializeField]
float _lerpTime;
[SerializeField]
Image[] _slideImage;
[SerializeField]
Sprite _open;
[SerializeField]
Sprite _close;
// Start is called before the first frame update
void Awake()
{
_currentPage = 1;
_targetPos = _levelPagesRect.localPosition;
_dragThreshold = Screen.width * 0.01f;
UpdateSlider();
}
public void Next(){
if(_currentPage < _maxPage){
_currentPage++;
_targetPos += _pageStep;
StartCoroutine(MovePage());
}else{
StartCoroutine(MovePage());
}
}
public void Previous(){
if(_currentPage > 1){
_currentPage--;
_targetPos -= _pageStep;
StartCoroutine(MovePage());
}else{
StartCoroutine(MovePage());
}
}
IEnumerator MovePage(){
var t = 0f;
var Start = _levelPagesRect.localPosition;
while(t < 1){
t += Time.deltaTime / _lerpTime;
if(t > 1)
t = 1;
_levelPagesRect.localPosition = Vector3.Lerp(Start, _targetPos, t);
yield return null;
}
}
public void OnEndDrag(PointerEventData eventData)
{
if(Mathf.Abs(eventData.delta.x) > _dragThreshold){
if(eventData.delta.x > 0){
Previous();
}else{
Next();
}
}else{
MovePage();
}
UpdateSlider();
}
void UpdateSlider(){
foreach(var image in _slideImage){
image.color = new Color(0,0,0,0.5f);
}
_slideImage[_currentPage-1].color = new Color(0,0,0,1);
}
}