2025-01-30 23:38:06 +01:00

135 lines
3.9 KiB
C#

using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
namespace Michsky.MUIP
{
public class DemoListShadow : MonoBehaviour, IBeginDragHandler
{
[Header("Resources")]
[SerializeField] private Scrollbar listScrollbar;
[SerializeField] private CanvasGroup leftCG;
[SerializeField] private CanvasGroup rightCG;
[Header("Settings")]
[SerializeField] private float scrollTime = 5;
[SerializeField] private float transitionSpeed = 4;
void Awake()
{
CheckForValue(0);
}
public void CheckForValue(float value)
{
if (value > 0.05)
{
StopCoroutine("LeftCGFadeOut");
StartCoroutine("LeftCGFadeIn");
}
else
{
StopCoroutine("LeftCGFadeIn");
StartCoroutine("LeftCGFadeOut");
}
if (value < 0.95)
{
StopCoroutine("RightCGFadeOut");
StartCoroutine("RightCGFadeIn");
}
else
{
StopCoroutine("RightCGFadeIn");
StartCoroutine("RightCGFadeOut");
}
}
public void ScrollUp() { StopCoroutine("ScrollDownHelper"); StartCoroutine("ScrollUpHelper"); }
public void ScrollDown() { StopCoroutine("ScrollUpHelper"); StartCoroutine("ScrollDownHelper"); }
public void OnBeginDrag(PointerEventData data) { StopCoroutine("ScrollUpHelper"); StopCoroutine("ScrollDownHelper"); }
IEnumerator ScrollUpHelper()
{
float elapsedTime = 0;
while (elapsedTime < scrollTime)
{
listScrollbar.value = Mathf.Lerp(listScrollbar.value, 0, elapsedTime / scrollTime);
elapsedTime += Time.unscaledDeltaTime;
yield return new WaitForEndOfFrame();
}
}
IEnumerator ScrollDownHelper()
{
float elapsedTime = 0;
while (elapsedTime < scrollTime)
{
listScrollbar.value = Mathf.Lerp(listScrollbar.value, 1, elapsedTime / scrollTime);
elapsedTime += Time.unscaledDeltaTime;
yield return new WaitForEndOfFrame();
}
}
IEnumerator LeftCGFadeIn()
{
leftCG.interactable = true;
leftCG.blocksRaycasts = true;
while (leftCG.alpha < 0.99f)
{
leftCG.alpha += Time.unscaledDeltaTime * transitionSpeed;
yield return new WaitForEndOfFrame();
}
leftCG.alpha = 1;
}
IEnumerator LeftCGFadeOut()
{
leftCG.interactable = false;
leftCG.blocksRaycasts = false;
while (leftCG.alpha > 0.01f)
{
leftCG.alpha -= Time.unscaledDeltaTime * transitionSpeed;
yield return new WaitForEndOfFrame();
}
leftCG.alpha = 0;
}
IEnumerator RightCGFadeIn()
{
rightCG.interactable = true;
rightCG.blocksRaycasts = true;
while (rightCG.alpha < 0.99f)
{
rightCG.alpha += Time.unscaledDeltaTime * transitionSpeed;
yield return new WaitForEndOfFrame();
}
rightCG.alpha = 1;
}
IEnumerator RightCGFadeOut()
{
rightCG.interactable = false;
rightCG.blocksRaycasts = false;
while (rightCG.alpha > 0.01f)
{
rightCG.alpha -= Time.unscaledDeltaTime * transitionSpeed;
yield return new WaitForEndOfFrame();
}
rightCG.alpha = 0;
}
}
}