using DG.Tweening; using System.Collections.Generic; using UnityEngine; public class PrizesPanel : InfoPanel { [Header("Картинки")] [SerializeField] private float recordDuration; [SerializeField] private float recordOpenY; [SerializeField] private float recordCloseY; [SerializeField] private float recordDelay; [Header("Генерация")] [SerializeField] private RectTransform table; [SerializeField] private PrizeRecord recordPrefab; [Header("Отладочное")] [SerializeField] private List icons; [SerializeField] private List names; [SerializeField] private List prizes; [SerializeField] private List prizeicons; private List records; public override float closeDelay => (Mathf.Max(infoDuration, buttonDuration, titleDuration) + records.Count * recordDelay + titleDuration) / closeSpeedMultiplier; protected override void InitializeBeforeOpen() { // Очистить макет for (int i = table.childCount - 1; i >= 0; i--) { Destroy(table.GetChild(i).gameObject); } records?.Clear(); records = new List(); // Сгенерировать призы for (int i = 0; i < 5; i++) { PrizeRecord record = Instantiate(recordPrefab, table); record.Init(i + 1, icons[i], names[i], prizes[i], prizeicons[i]); records.Add(record); } } protected override Sequence GetOpenSequence(float delay) { Sequence seq = DOTween.Sequence(); float t = 0; seq.AppendInterval(delay); seq.Append(root.DOAnchorPos(Vector2.zero, titleDuration)); seq.Append(titleSign.DOAnchorPosY(titleOpenY, titleDuration)); t = delay + titleDuration * 2 - timeOffset; seq.Insert(t, button.DOAnchorPosX(buttonOpenX, buttonDuration)); seq.Insert(t + buttonDuration - timeOffset, info.DOAnchorPosX(infoOpenX, infoDuration).SetEase(Ease.OutBack)); t += recordDelay; for (int i = records.Count - 1; i >= 0; i--) { var image = records[i].movableGroup; seq.Insert(t, image.DOAnchorPosY(recordOpenY, recordDuration)); t += recordDelay; } return seq; } protected override Sequence GetCloseSequence(Vector2 position) { Sequence seq = DOTween.Sequence(); seq.Join(info.DOAnchorPosX(infoCloseX, infoDuration)); seq.Join(button.DOAnchorPosX(buttonCloseX, buttonDuration)); seq.Join(titleSign.DOAnchorPosY(titleCloseY, titleDuration)); float time = 0; if (records != null) { for (int i = 0; i < records.Count; i++) { var image = records[i].movableGroup; seq.Insert(time, image.DOAnchorPosY(recordCloseY, recordDuration)); time += recordDelay; } } seq.Append(root.DOAnchorPos(position, titleDuration * 4)); seq.timeScale = closeSpeedMultiplier; return seq; } public override void Initialize() { } }