57 lines
2.0 KiB
C#
57 lines
2.0 KiB
C#
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;
|
|
}
|
|
} |