feat(battle-engine): close the AI-simulation subsystem (verbatim)
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.
This commit is contained in:
139
SVSim.BattleEngine/Engine/Wizard/UIMarquee.cs
Normal file
139
SVSim.BattleEngine/Engine/Wizard/UIMarquee.cs
Normal file
@@ -0,0 +1,139 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user