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.
302 lines
6.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|