92 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			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);
 | |
|     }
 | |
| }
 | 
