You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/3rd/StompyRobot/SRF/Scripts/UI/ScrollToBottomBehaviour.cs

99 lines
2.3 KiB
C#

3 months ago
namespace SRF.UI
{
using System;
using Internal;
using UnityEngine;
using UnityEngine.UI;
[ExecuteInEditMode]
[RequireComponent(typeof(RectTransform))]
[AddComponentMenu(ComponentMenuPaths.ScrollToBottom)]
public class ScrollToBottomBehaviour : MonoBehaviour
{
#pragma warning disable 649
[SerializeField]
private ScrollRect _scrollRect;
[SerializeField]
private CanvasGroup _canvasGroup;
[SerializeField]
private bool _scrollToTop;
#pragma warning restore 649
public void Start()
{
if (_scrollRect == null)
{
Debug.LogError("[ScrollToBottomBehaviour] ScrollRect not set");
return;
}
if (_canvasGroup == null)
{
Debug.LogError("[ScrollToBottomBehaviour] CanvasGroup not set");
return;
}
_scrollRect.onValueChanged.AddListener(OnScrollRectValueChanged);
Refresh();
}
void OnEnable()
{
Refresh();
}
public void Trigger()
{
if (_scrollToTop)
{
_scrollRect.normalizedPosition = new Vector2(0, 1);
}
else
{
_scrollRect.normalizedPosition = new Vector2(0, 0);
}
}
private void OnScrollRectValueChanged(Vector2 position)
{
Refresh();
}
private void Refresh()
{
if (_scrollRect == null)
return;
var position = _scrollRect.normalizedPosition;
if (position.y < 0.001f || (_scrollToTop && position.y >= 0.999f))
{
SetVisible(false);
}
else
{
SetVisible(true);
}
}
void SetVisible(bool truth)
{
if (truth)
{
_canvasGroup.alpha = 1f;
_canvasGroup.interactable = true;
_canvasGroup.blocksRaycasts = true;
}
else
{
_canvasGroup.alpha = 0f;
_canvasGroup.interactable = false;
_canvasGroup.blocksRaycasts = false;
}
}
}
}