using System; using UnityEngine; using UnityEngine.Video; using DG.Tweening; public class Promo : MonoBehaviour, IControlable { [Header("Анимация")] [SerializeField] private RectTransform _panel; [SerializeField] private float _openedAnchorY; [SerializeField] private float _closedAnchorY; [SerializeField] private Ease _openEase; [SerializeField] private Ease _closeEase; [SerializeField] private float _openDuration; [SerializeField] private float _closeDuration; [Header("Видео")] [SerializeField] private VideoPlayer _videoPlayer; [SerializeField] private AudioSource _audioSource; [Header("Transit")] [SerializeField] MenuPromoTransit _menuPromoTransit; private Sequence _animation; public bool ControlsEnabled { get; set; } public void Open(Action callback) { KillActiveAnimation(); ControlsEnabled = true; _audioSource.volume = SoundManager.instance.PromoVolume; _panel.gameObject.SetActive(true); _videoPlayer.Play(); _videoPlayer.loopPointReached += VideoEnded; _animation = GetTransitionSequence(open: true); _animation.onComplete += () => callback?.Invoke(); _animation.PlayForward(); } private void VideoEnded(VideoPlayer source) => _menuPromoTransit.GotoMenu(); public void Close(Action callback) { ControlsPerformer.Instance.SetControlable(null); ControlsEnabled = false; KillActiveAnimation(); _animation = GetTransitionSequence(open: false); _animation.onComplete += () => { _videoPlayer.Stop(); _panel.gameObject.SetActive(false); callback?.Invoke(); }; _animation.PlayForward(); } private Sequence GetTransitionSequence(bool open) { float targetY = open ? _openedAnchorY : _closedAnchorY; float duration = open ? _openDuration : _closeDuration; Ease ease = open ? _openEase : _closeEase; Sequence seq = DOTween.Sequence(); seq.Append(_panel.DOAnchorPosY(targetY, duration).SetEase(ease)); return seq; } private void KillActiveAnimation() { if (_animation == null) return; _animation.Kill(); _animation = null; } public void UpdateControls() { if (In.AnyButton()) _menuPromoTransit.GotoMenu(); } }