using DG.Tweening; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class GamemodePanel : MenuPanel { [Header("Анимация рамки")] [SerializeField] List frames; [SerializeField] Vector2 disabledFrameWH; [SerializeField] Vector2 enabledFrameWH; [SerializeField] float frameDuration = 0.15f; [Header("Анимация персонажа")] [SerializeField] Image characterImage; [SerializeField] RectTransform characterRect; [SerializeField] Vector2 disabledCharacterWH; [SerializeField] Vector2 enabledCharacterWH; [SerializeField] Color disabledCharacterColor; [SerializeField] Color enabledCharacterColor; [SerializeField] float characterDelay = 0.1f; [SerializeField] float characterDuration = 0.1f; [Header("Надпись режима")] [SerializeField] RectTransform modeSign; [SerializeField] Vector2 signOffset = new(-200, 0); [Header("Взаимодействие")] [SerializeField] private GameMode gameMode; private Vector2 signStart; private Sequence _animation; private float totalTime => frameDuration + characterDelay + characterDuration; public override void Initialize() { signStart = modeSign.anchoredPosition; } public override void Enable(int _, float delay) { StopAnimation(); _animation = DOTween.Sequence(); foreach (var frame in frames) { Tween tween = frame.DOSizeDelta(enabledFrameWH, frameDuration).SetEase(Ease.OutQuad); _animation.Join(tween); } _animation.Insert(characterDelay, characterRect.DOSizeDelta(enabledCharacterWH, characterDuration).SetEase(Ease.OutQuad)); _animation.Insert(characterDelay, characterImage.DOColor(enabledCharacterColor, characterDuration).SetEase(Ease.OutQuad)); _animation.Append( modeSign.DOAnchorPos(signStart - signOffset, totalTime * 0.15f) .SetEase(Ease.Linear) ); _animation.Append( modeSign.DOAnchorPos(signStart, totalTime * 0.85f) .SetEase(Ease.OutBounce) ); _animation.PlayForward(); } public override void Disable(int _) { StopAnimation(); _animation = DOTween.Sequence(); foreach (var frame in frames) { _animation.Join(frame.DOSizeDelta(disabledFrameWH, frameDuration).SetEase(Ease.InCirc)); } _animation.Join( characterRect.DOSizeDelta(disabledCharacterWH, characterDuration).SetEase(Ease.OutQuad)); _animation.Insert(characterDelay, characterImage.DOColor(disabledCharacterColor, characterDuration).SetEase(Ease.OutQuad)); _animation.PlayForward(); } public override void Interact() => GameManager.Instance.TryEnterGame(gameMode); private void StopAnimation() { if (_animation != null) { _animation.Kill(); _animation = null; } } }