using DG.Tweening; using System; using UnityEngine; public class GameplayLayoutController : MonoBehaviour { [Header("Панели")] [SerializeField] private RectTransform _leftPanel; [SerializeField] private float _leftOpenedPosition = 506.9099f; [SerializeField] private float _panelsTransitionDuration; [SerializeField] private Ease _panelsOpenEase; [SerializeField] private Ease _panelsCloseEase; [Header("Доска")] [SerializeField] private Transform _board; [SerializeField] private float _boardOpenedY = -5.93f; [SerializeField] private float _boardClosedY = 8; [SerializeField] private float _boardTransitionDuration = 1; [SerializeField] private Ease _boardOpenEase; [SerializeField] private Ease _boardCloseEase; public void Open(Action callback) { Sequence seq = GetSequenceByState(open: true); seq.onComplete += () => callback?.Invoke(); seq.PlayForward(); } public void Close(Action callback) { Sequence seq = GetSequenceByState(open: false); seq.onComplete += () => callback?.Invoke(); seq.PlayForward(); } private Sequence GetSequenceByState(bool open) { if (_leftPanel == null || _board == null) throw new Exception("Панели или доска не назначены!"); float leftTarget = open ? _leftOpenedPosition : 0; float boardTarget = open ? _boardOpenedY : _boardClosedY; Ease boardEase = open ? _boardOpenEase : _boardCloseEase; Ease panelsEase = open ? _panelsOpenEase : _panelsCloseEase; var sequence = DOTween.Sequence(); Tween left = _leftPanel.DOAnchorPosX(leftTarget, _panelsTransitionDuration) .SetEase(panelsEase); Tween board = _board.DOMoveY(boardTarget, _boardTransitionDuration) .SetEase(boardEase); sequence.Append(left); sequence.Append(board); return sequence; } }