Files
SVSimServer/SVSim.BattleEngine/Engine/MyPageCardPanelAnimation.cs
gamer147 957af3d1ec feat(battle-engine): full Unity/VFX/god-object shims + expanded copy closure (2570 files)
Authored Unity primitive/object-model shim, VFX layer (control-flow-preserving, InstantVfx never invokes its action -- headless suppression), god-object stubs (GameMgr/EffectMgr/UIManager with faithfully-extracted nested enums), View/UI/Touch tree, LitJson+BetterList+Tuple copied, third-party stubs. Discovered Roslyn header-error masking: fixing class-header type errors unmasks body references, so the true copy closure is ~2570 files (was 782 under masking). Errors: masked-25720 -> 268; our shim files compile clean. Remaining: ~50 residual shim/external types, 24 NGUI UI-base overrides, static-type fixes, plus likely 1-2 more unmask waves.
2026-06-05 17:22:20 -04:00

302 lines
6.6 KiB
C#

using UnityEngine;
public class MyPageCardPanelAnimation : MonoBehaviour
{
public enum State
{
Start,
Move,
Color,
End
}
private const float RANDOM_TIMER_RANGE = 0.3f;
private const float ORIGINAL_POS_X = -22100f;
private const float COLOR_TIME = 0.6f;
private const float START_WAIT_TIMER = 0.05f;
private static readonly float[] ANGLES_3 = new float[3] { 5f, 0f, -5f };
private static readonly float[] ANGLES_2 = new float[2] { 5f, -5f };
private static readonly float[] ANGLES_1 = new float[1];
private const float CARD_ORIGINAL_POS_X = -1000f;
private const float CARD_DELAY_FACTOR = 0.03f;
private const float CARD_TIME_MOTION = 0.0001f;
private const float CARD_TIME_BASE = 0.2f;
private const float CARD_TIME_FACTOR = 0.03f;
private const float RANDOM_FACTOR = 5f;
private const float ALPHA_FACTOR = 4f;
private float ClickRotateTimeTotal;
private float ClickRotateTime;
private float ClickIndex;
private bool _isCutCardMotion;
private State _state = State.End;
private float _timer;
private float[] _randomTimer;
private int[] _randomDir;
private GameObject[] _cardPanel;
private UIPanel[] _panel;
private Vector3[] _defaultPosition;
public bool IsCardMoving
{
get
{
if (!(ClickRotateTime > 0f))
{
return _state != State.End;
}
return true;
}
}
public void SetCardPanelList(GameObject[] list)
{
_cardPanel = new GameObject[list.Length];
for (int i = 0; i < list.Length; i++)
{
_cardPanel[i] = list[i];
MyPageCardPanel component = list[i].GetComponent<MyPageCardPanel>();
if (component != null)
{
component.Index = i;
}
}
InitRandom();
InitializePanel();
}
public void UpdateCardPanelDefaultPosition(Vector3[] newPosition)
{
_defaultPosition = newPosition;
}
public void PanelClear()
{
_panel = null;
}
private void InitializePanel()
{
if (_panel == null)
{
_panel = new UIPanel[_cardPanel.Length];
_defaultPosition = new Vector3[_cardPanel.Length];
for (int i = 0; i < _cardPanel.Length; i++)
{
GameObject gameObject = _cardPanel[i];
_panel[i] = gameObject.GetComponent<UIPanel>();
_defaultPosition[i] = gameObject.transform.localPosition;
}
}
}
public void StartCardPanelAnimation(bool isCutCardMotion)
{
_state = State.Start;
_timer = 0f;
_isCutCardMotion = isCutCardMotion;
for (int i = 0; i < _cardPanel.Length; i++)
{
GameObject obj = _cardPanel[i];
Vector3 localPosition = obj.transform.transform.localPosition;
localPosition.x = -22100f;
obj.transform.transform.localPosition = localPosition;
iTween.Stop(obj);
}
}
public void SkipMoveAnimation()
{
_state = State.End;
ColorChange(isForceOpacity: true);
}
private void Update()
{
if (_panel != null)
{
UpdateCard();
}
}
private void UpdateCard()
{
float[] array = (new float[4][] { null, ANGLES_1, ANGLES_2, ANGLES_3 })[_cardPanel.Length];
if (_panel == null)
{
return;
}
switch (_state)
{
case State.Start:
{
ClickRotateTime = 0f;
_timer += Time.deltaTime;
for (int k = 0; k < _cardPanel.Length; k++)
{
GameObject obj = _cardPanel[k];
Vector3 localPosition = obj.transform.transform.localPosition;
localPosition.x = -1000f;
localPosition.y = _defaultPosition[k].y;
obj.transform.transform.localPosition = localPosition;
obj.transform.transform.localEulerAngles = new Vector3(0f, 0f, array[k]);
}
for (int l = 0; l < _cardPanel.Length; l++)
{
_panel[l].alpha = 0f;
}
if (_timer >= 0.05f)
{
_state++;
}
break;
}
case State.Move:
{
for (int j = 0; j < _cardPanel.Length; j++)
{
float x = _defaultPosition[j].x;
iTween.MoveTo(_cardPanel[j], iTween.Hash("x", x, "time", _isCutCardMotion ? 0.0001f : (0.2f + (float)j * 0.03f), "delay", (float)j * 0.03f, "islocal", true, "easetype", iTween.EaseType.easeOutExpo));
}
if (!_isCutCardMotion)
{
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_SWITCH_MENU_CARD);
}
_state++;
break;
}
case State.Color:
_timer += Time.deltaTime;
ColorChange();
if (_timer >= 0.6f)
{
ColorChange(isForceOpacity: true);
_state++;
_timer = 0f;
InitRandom();
}
break;
case State.End:
{
for (int i = 0; i < _cardPanel.Length; i++)
{
float num = 0f;
if ((float)i == ClickIndex && ClickRotateTime > 0f)
{
ClickRotateTime -= Time.deltaTime;
if (ClickRotateTime < 0f)
{
ClickRotateTime = 0f;
_state = State.End;
}
float num2 = (ClickRotateTimeTotal - ClickRotateTime) / ClickRotateTimeTotal;
num2 -= 1f;
num2 = 0f - (num2 * num2 * num2 * num2 - 1f);
num = 720f * num2;
}
_randomTimer[i] += Time.deltaTime;
if (_randomTimer[i] >= 0f)
{
_cardPanel[i].transform.localEulerAngles = new Vector3(0f, num + (float)_randomDir[i] * 5f * Mathf.Sin(_randomTimer[i] / 2f), array[i] + (float)_randomDir[i] * Mathf.Sin(_randomTimer[i]));
}
}
break;
}
}
}
public void SetCardPanelAngle()
{
float[] array = (new float[4][] { null, ANGLES_1, ANGLES_2, ANGLES_3 })[_cardPanel.Length];
for (int i = 0; i < _cardPanel.Length; i++)
{
_cardPanel[i].transform.transform.localEulerAngles = new Vector3(0f, 0f, array[i]);
}
}
private void ColorChange(bool isForceOpacity = false)
{
if (_panel == null)
{
return;
}
for (int i = 0; i < _cardPanel.Length; i++)
{
if (_panel[i].alpha < 1f && !isForceOpacity)
{
float alpha = _panel[i].alpha;
alpha += Time.deltaTime * 4f;
if (alpha >= 1f)
{
alpha = 1f;
}
_panel[i].alpha = alpha;
}
else
{
_panel[i].alpha = 1f;
}
}
}
public void OnClicked(int i, bool isPlaySe = true)
{
ClickRotateTimeTotal = 1f;
ClickRotateTime = ClickRotateTimeTotal;
ClickIndex = i;
if (isPlaySe)
{
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_MENU_CARD);
}
}
public void StopMove()
{
_state = State.End;
for (int i = 0; i < _cardPanel.Length; i++)
{
iTween.Stop(_cardPanel[i]);
if (_panel != null)
{
_panel[i].alpha = 1f;
}
}
InitRandom();
ColorChange(isForceOpacity: true);
}
private void InitRandom()
{
_randomDir = new int[_cardPanel.Length];
_randomTimer = new float[_cardPanel.Length];
for (int i = 0; i < _cardPanel.Length; i++)
{
_randomDir[i] = (((double)Random.value > 0.5) ? 1 : (-1));
_randomTimer[i] = Random.Range(-0.3f, 0f);
}
}
}