79 lines
2.3 KiB
C#
79 lines
2.3 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
public class RankView : MonoBehaviour
|
|
{
|
|
[SerializeField] private RectTransform RankSpawnPoint;
|
|
[SerializeField] private RectTransform RankEndPoint;
|
|
|
|
[SerializeField] private RankFrame RankFramePrefab;
|
|
|
|
[SerializeField] private RankFrame CurrentRankFrame;
|
|
[SerializeField] private float AnimationSpeed;
|
|
[SerializeField] private AnimationCurve Curve;
|
|
|
|
[SerializeField] private CanvasGroup NewRankLabel;
|
|
|
|
public void Initialize()
|
|
{
|
|
NewRankLabel.alpha = 0;
|
|
RankSystem.OnNewRank += RankSystem_OnNewRank;
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
RankSystem.OnNewRank -= RankSystem_OnNewRank;
|
|
}
|
|
|
|
private void RankSystem_OnNewRank(RankSystem.RankInfo rankInfo)
|
|
{
|
|
StartCoroutine(ShowNewRank(rankInfo));
|
|
}
|
|
|
|
IEnumerator ShowNewRank(RankSystem.RankInfo rankInfo)
|
|
{
|
|
//Заспавнить и настроить новый ранг
|
|
var newRankGO = Instantiate(RankFramePrefab.gameObject, RankSpawnPoint.position, Quaternion.identity, GetComponent<RectTransform>());
|
|
var newRankFrame = newRankGO.GetComponent<RankFrame>();
|
|
newRankFrame.SetAlpha(0);
|
|
newRankFrame.SetRank(rankInfo);
|
|
|
|
var rect = newRankGO.GetComponent<RectTransform>();
|
|
rect.localRotation = Quaternion.identity;
|
|
|
|
//проявить новый ранг
|
|
float t = 0;
|
|
while (t < 1)
|
|
{
|
|
t += Time.deltaTime * AnimationSpeed*2;
|
|
t = Mathf.Clamp01(t);
|
|
|
|
NewRankLabel.alpha = t;
|
|
newRankFrame.SetAlpha(t);
|
|
yield return null;
|
|
}
|
|
|
|
yield return new WaitForSeconds(3);
|
|
|
|
//переместить новый на место старого + растворить старый
|
|
t = 0;
|
|
while (t < 1)
|
|
{
|
|
t += Time.deltaTime * AnimationSpeed;
|
|
t = Mathf.Clamp01(t);
|
|
|
|
float t1 = Curve.Evaluate(t);
|
|
|
|
rect.anchoredPosition = Vector2.Lerp(RankSpawnPoint.anchoredPosition, RankEndPoint.anchoredPosition, t1);
|
|
|
|
NewRankLabel.alpha = 1-t1;
|
|
CurrentRankFrame.SetAlpha(1-t);
|
|
yield return null;
|
|
}
|
|
|
|
Destroy(CurrentRankFrame.gameObject);
|
|
CurrentRankFrame = newRankFrame;
|
|
|
|
yield return null;
|
|
}
|
|
} |