powerfun-unity/Assets/Scripts/UI/Prefab/Login/QuickLoginScroll.cs
2021-08-25 15:35:41 +08:00

167 lines
4.9 KiB
C#

using Assets.Scripts;
using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;
public class QuickLoginScroll : MonoBehaviour
{
// Start is called before the first frame update
private ScrollRect scroll;
private Transform content,lightbg;
private float contentSize;
private int count;
[SerializeField] Button L, R;
void Start()
{
scroll = gameObject.GetComponent<ScrollRect>();
//scroll.onValueChanged.AddListener((a) =>
//{
// Debug.Log(a);
//});
content = gameObject.transform.Find("Viewport").Find("Content");
lightbg = transform.parent.Find("Light");
//Initial();
if (L != null)
{
UIManager.AddEvent(L.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick,(b)=>
{
goLeft();
});
//L.onClick.AddListener(goLeft);
}
if (R != null)
{
UIManager.AddEvent(R.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, (b) =>
{
goRight();
});
//R.onClick.AddListener(goRight);
}
}
private void doAni()
{
lightbg.GetComponent<Image>().color = Utils.HexToColorHtml("#ffffff00");
lightbg.GetComponent<Image>().gameObject.SetActive(false);
int index = GetIndex();
content.GetChild(index).GetComponent<QuickLoginUser>().setNoActive();
//lightbg.GetComponent<Image>().DOFade(0, 0.15f);
}
public void Initial()
{
count = content.childCount;
#if !(UNITY_ANDROID || UNITY_IOS)
if (content.childCount - 2 > 0)
{
contentSize = 1f / (content.childCount - 2);
}
else
{
contentSize = 0;
}
#else
if (content.childCount - 3 > 0)
{
contentSize = 1f / (content.childCount - 3);
}
else
{
contentSize = 0;
}
#endif
//scroll.horizontalNormalizedPosition = 0;
Canvas.ForceUpdateCanvases();
var i = PlayerPrefs.GetInt("UserInfoIndex");
Debug.Log($"51 {i}");
#if !(UNITY_ANDROID || UNITY_IOS)
scroll.horizontalNormalizedPosition = contentSize/2+i*contentSize;
#else
scroll.horizontalNormalizedPosition = i * contentSize;
Debug.Log(scroll.horizontalNormalizedPosition);
#endif
SetColor();
}
void goLeft()
{
Debug.Log($"{scroll.horizontalNormalizedPosition},{contentSize}");
if (scroll.horizontalNormalizedPosition+0.0001 <= contentSize) return;
goMove(-1);
}
void goRight()
{
Debug.Log(scroll.horizontalNormalizedPosition);
if (scroll.horizontalNormalizedPosition+0.0001 >= 1) return;
goMove();
}
void goMove(int i = 1)
{
doAni();
if (!start) startPosition = scroll.horizontalNormalizedPosition;
start = true;
scrollValue = i*contentSize / 10;
}
private bool start = false;
private float scrollValue = 0, totalScrollValue = 0, startPosition = 0;
int GetIndex()
{
#if !(UNITY_ANDROID || UNITY_IOS)
return (int)System.Math.Round(
(scroll.horizontalNormalizedPosition + (contentSize / 2)) / contentSize,
0);
#else
if (contentSize == 0)
{
return 1;
}
return (int)System.Math.Round(
(scroll.horizontalNormalizedPosition+ contentSize) / contentSize,
0);
#endif
}
void SetColor()
{
int index = GetIndex();
//lightbg.GetComponent<Image>().gameObject.SetActive(true);
//lightbg.GetComponent<Image>().DOFade(1, 0.2f);
//content.GetChild(index).GetComponent<QuickLoginUser>().setActive();
for (int i = 1; i < content.childCount - 1; i++)
{
string c;
if (i == index)
{
lightbg.GetComponent<Image>().gameObject.SetActive(true);
lightbg.GetComponent<Image>().DOFade(1, 0.2f);
content.GetChild(i).GetComponent<QuickLoginUser>().setActive();
//
}
else
{
content.GetChild(i).GetComponent<QuickLoginUser>().setNoActive();
}
}
}
// Update is called once per frame
void FixedUpdate()
{
if (start)
{
scroll.horizontalNormalizedPosition += scrollValue;
totalScrollValue += scrollValue;
if (System.Math.Abs(totalScrollValue) >= contentSize)
{
scrollValue = 0;
start = false;
scroll.horizontalNormalizedPosition = startPosition + (totalScrollValue<0?-1:1)*contentSize;
//Debug.Log();
SetColor();
totalScrollValue = 0;
}
}
}
}