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 Sequence GetOpenSequence() => GetSequenceByState(true); public Sequence GetCloseSequence() => GetSequenceByState(false); private Sequence GetSequenceByState(bool open) { float leftTarget = open ? _leftOpenedPosition : 0; float boardTarget = open ? _boardOpenedY : _boardClosedY; Ease boardEase = open ? _boardOpenEase : _boardCloseEase; Ease panelsEase = open ? _panelsOpenEase : _panelsCloseEase; return GetTransitionSequence(leftTarget, boardTarget, boardEase, panelsEase); } private Sequence GetTransitionSequence(float targetLeftX, float targetBoardY, Ease boardEase, Ease panelsEase) { if (_leftPanel == null || _board == null) throw new Exception("Панели или доска не назначены!"); var sequence = DOTween.Sequence(); Tween left = _leftPanel.DOAnchorPosX(targetLeftX, _panelsTransitionDuration) .SetEase(panelsEase); Tween board = _board.DOMoveY(targetBoardY, _boardTransitionDuration) .SetEase(boardEase); sequence.Append(left); sequence.Append(board); return sequence; } }