using System; using System.Collections.Generic; using System.Linq; using DG.Tweening; using TMPro; using UnityEngine; using UnityEngine.UI; namespace Panels { public enum PopUpType { Information, Error } public class PopUpPanel : PanelBase { [Serializable] private struct PopUpData { public PopUpType type; public Sprite boxImage; public Sprite buttonImage; } private event Action OnConfirmExit; [SerializeField] private List popUps; [SerializeField] private Image textBox; [SerializeField] private TextMeshProUGUI message; [SerializeField] private Button closeBtn; [SerializeField] private float scaleDuration; [SerializeField] private Ease scaleEase; [SerializeField] private Ease exitScaleEase; private RectTransform _boxTransform; private void Start() { _boxTransform = textBox.rectTransform; closeBtn.onClick.AddListener(ClosePopUp); } public void OpenPopUp(PopUpType inType, string inMsg, Action onClose = null) { if (IsOpen) return; _boxTransform.localScale = Vector3.zero; OpenPanel(); var data = popUps.FirstOrDefault(popUp => popUp.type == inType); OnConfirmExit += onClose; textBox.sprite = data.boxImage; closeBtn.image.sprite = data.buttonImage; message.text = inMsg; _boxTransform.DOScale(Vector3.one, scaleDuration) .SetEase(scaleEase); } private void ClosePopUp() { _boxTransform.DOScale(Vector3.zero, scaleDuration) .SetEase(exitScaleEase) .OnComplete(() => { ClosePanelImmediately(); OnConfirmExit?.Invoke(); OnConfirmExit = null; }); } } }