Copied the 89 uncopied AI*SimulationUtility/extension files defining the AIVirtualCard/AIVirtualField extension methods; the compile loop then auto-closed the revealed type deps (~3049 files total, drift-clean). 10.0k -> 62 errors.
140 lines
2.5 KiB
C#
140 lines
2.5 KiB
C#
using UnityEngine;
|
|
|
|
namespace Wizard;
|
|
|
|
public class UIMarquee : MonoBehaviour
|
|
{
|
|
private enum State
|
|
{
|
|
Stop,
|
|
WaitForMove,
|
|
Move,
|
|
Reappear
|
|
}
|
|
|
|
[SerializeField]
|
|
[Range(0f, float.MaxValue)]
|
|
private float _secToStartMoving = 1.5f;
|
|
|
|
[SerializeField]
|
|
[Range(0f, float.MaxValue)]
|
|
private float _movePerSec = 100f;
|
|
|
|
[SerializeField]
|
|
[Range(0f, float.MaxValue)]
|
|
private float _secToReappear = 1.5f;
|
|
|
|
[SerializeField]
|
|
private AnimationCurve _reappearCurve = AnimationCurve.Linear(0f, 0f, 1f, 1f);
|
|
|
|
[SerializeField]
|
|
[Range(0f, float.MaxValue)]
|
|
private float _widthOfNeedsToScroll = 256f;
|
|
|
|
[SerializeField]
|
|
private UIPanel _panel;
|
|
|
|
[SerializeField]
|
|
private UIWidget _content;
|
|
|
|
private State _state;
|
|
|
|
private float _timeCount;
|
|
|
|
private float _startX;
|
|
|
|
public void StartMarquee()
|
|
{
|
|
if ((float)_content.width < _widthOfNeedsToScroll)
|
|
{
|
|
SetState(State.Stop);
|
|
}
|
|
else
|
|
{
|
|
SetState(State.WaitForMove);
|
|
}
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
SetState(State.Stop);
|
|
SetAlpha(1f);
|
|
}
|
|
|
|
public void SetWidthOfNeedsToScroll(float width)
|
|
{
|
|
_widthOfNeedsToScroll = width;
|
|
}
|
|
|
|
public void SetDefaultWidthOfNeedsToScroll()
|
|
{
|
|
_widthOfNeedsToScroll = _panel.width;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
_timeCount += Time.deltaTime;
|
|
switch (_state)
|
|
{
|
|
case State.WaitForMove:
|
|
if (_timeCount >= _secToStartMoving)
|
|
{
|
|
SetState(State.Move);
|
|
}
|
|
break;
|
|
case State.Move:
|
|
if (IsScrollComplete())
|
|
{
|
|
SetState(State.Reappear);
|
|
SetAlpha(0f);
|
|
}
|
|
else
|
|
{
|
|
SetContentPosX(_startX - _movePerSec * _timeCount);
|
|
}
|
|
break;
|
|
case State.Reappear:
|
|
SetAlpha(_reappearCurve.Evaluate(_timeCount / _secToReappear));
|
|
if (_timeCount >= _secToReappear)
|
|
{
|
|
SetState(State.WaitForMove);
|
|
SetAlpha(1f);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void SetState(State state)
|
|
{
|
|
_state = state;
|
|
_timeCount = 0f;
|
|
_panel.UpdateAnchors();
|
|
_content.UpdateAnchors();
|
|
_startX = CalcStartX();
|
|
SetContentPosX(_startX);
|
|
}
|
|
|
|
private float CalcStartX()
|
|
{
|
|
return _panel.baseClipRegion.x - _panel.baseClipRegion.z * 0.5f;
|
|
}
|
|
|
|
private void SetContentPosX(float posX)
|
|
{
|
|
Transform obj = _content.transform;
|
|
Vector3 localPosition = obj.localPosition;
|
|
localPosition.x = posX;
|
|
obj.localPosition = localPosition;
|
|
}
|
|
|
|
private bool IsScrollComplete()
|
|
{
|
|
return _content.transform.localPosition.x - _startX <= (float)(-_content.width);
|
|
}
|
|
|
|
private void SetAlpha(float alpha)
|
|
{
|
|
_panel.alpha = alpha;
|
|
}
|
|
}
|