178 lines
5.8 KiB
C#
178 lines
5.8 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
public class MenuUi : MonoBehaviour
|
|
{
|
|
[Header("Время перемещения блока")]
|
|
[SerializeField] float blockMoveDuration = 0.6f;
|
|
|
|
|
|
|
|
[Header("Верхний блок")]
|
|
[SerializeField] RectTransform TopContainer;
|
|
private Vector2 TopMenuPosition;
|
|
[SerializeField] Vector2 TopGameplayOffset = new Vector2(0, 1000);
|
|
|
|
[Header("Нижний блок")]
|
|
[SerializeField] RectTransform BottomContainer;
|
|
private Vector2 BottomMenuPosition;
|
|
[SerializeField] Vector2 BottomGameplayOffset =new Vector2(0, -1000);
|
|
|
|
[Header("Режим на одного")]
|
|
[SerializeField] RectTransform PveContainer;
|
|
private Vector2 PveMenuPosition;
|
|
[SerializeField] Vector2 PveGameplayOffset = new Vector2(-2000, 0);
|
|
|
|
[Header("Режим на двоих")]
|
|
[SerializeField] RectTransform PvpContainer;
|
|
private Vector2 PvpMenuPosition;
|
|
[SerializeField] Vector2 PvpGameplayOffset = new Vector2(2000, 0);
|
|
|
|
[Header("Надпись призы закончились")]
|
|
[SerializeField] RectTransform PrizesOut;
|
|
private Vector2 PrizesOutMenuPosition;
|
|
[SerializeField] Vector2 PrizesOutGameplayOffset = new Vector2(-2000, -409+70);
|
|
[SerializeField] Vector2 PrizesOutGameplayPosition = new Vector2(0, -409);
|
|
|
|
private Vector2 PrizesOutMenuSizeDelta;
|
|
[SerializeField] Vector2 PrizesOutGameplaySizeDelta = new Vector2(660, 100);
|
|
|
|
[Header("Счетчик монет")]
|
|
[SerializeField] Transform CoinCounter;
|
|
private Vector2 CoinCounterMenuPosition;
|
|
[SerializeField] Vector2 CoinCounterGameplayPosition = new Vector3(-8.964f, 3.6f);
|
|
|
|
|
|
[Header("Доска")]
|
|
[SerializeField] Transform Board;
|
|
private Vector2 BoardMenuPosition;
|
|
[SerializeField] Vector2 BoardGameplayPosition = new Vector2(0, -0.5f);
|
|
|
|
|
|
private bool _cached = false;
|
|
bool processing = false;
|
|
|
|
bool Menu;
|
|
bool Gameplay;
|
|
float last_t = 0;
|
|
|
|
|
|
void InitializeIfNeed()
|
|
{
|
|
if (!_cached) CacheStartParametrs();
|
|
}
|
|
void CacheStartParametrs()
|
|
{
|
|
//Кэшируем стартовые позиции и размеры
|
|
TopMenuPosition = TopContainer.anchoredPosition;
|
|
BottomMenuPosition = BottomContainer.anchoredPosition;
|
|
PveMenuPosition = PveContainer.anchoredPosition;
|
|
PvpMenuPosition = PvpContainer.anchoredPosition;
|
|
|
|
PrizesOutMenuPosition = PrizesOut.anchoredPosition;
|
|
PrizesOutMenuSizeDelta = PrizesOut.sizeDelta;
|
|
|
|
CoinCounterMenuPosition = CoinCounter.localPosition;
|
|
BoardMenuPosition = Board.localPosition;
|
|
|
|
|
|
_cached = true;
|
|
}
|
|
|
|
public void OpenMenu()
|
|
{
|
|
InitializeIfNeed();
|
|
StopAllCoroutines();
|
|
}
|
|
|
|
public void CloseMenu()
|
|
{
|
|
InitializeIfNeed();
|
|
|
|
}
|
|
|
|
|
|
IEnumerator OpenGameplayAnim()
|
|
{
|
|
float t = last_t;
|
|
|
|
//ШАГ 1. ПРЯЧЕМ МЕНЮ
|
|
t = 0;
|
|
while (t < 1)
|
|
{
|
|
t += Time.deltaTime * 2;
|
|
t = Mathf.Clamp01(t);
|
|
|
|
|
|
TopContainer.anchoredPosition = Vector2.Lerp(TopMenuPosition, TopMenuPosition + TopGameplayOffset, t);
|
|
|
|
PveContainer.anchoredPosition = Vector2.Lerp(PveMenuPosition, PveMenuPosition + PveGameplayOffset, t);
|
|
PvpContainer.anchoredPosition = Vector2.Lerp(PvpMenuPosition, PvpMenuPosition + PvpGameplayOffset, t);
|
|
|
|
BottomContainer.anchoredPosition = Vector2.Lerp(BottomMenuPosition, BottomMenuPosition + BottomGameplayOffset, t);
|
|
|
|
PrizesOut.anchoredPosition = Vector2.Lerp(PrizesOutMenuPosition, PrizesOutMenuPosition + PrizesOutGameplayOffset, t);
|
|
|
|
CoinCounter.localPosition = Vector2.Lerp(CoinCounterMenuPosition, CoinCounterGameplayPosition, t);
|
|
|
|
|
|
yield return null;
|
|
}
|
|
|
|
//ШАГ 1. Показываем доску
|
|
t = 0;
|
|
|
|
PrizesOut.sizeDelta = PrizesOutGameplaySizeDelta;
|
|
while (t < 1)
|
|
{
|
|
t += Time.deltaTime * 2;//скорость надо высчитывать
|
|
t = Mathf.Clamp01(t);
|
|
|
|
Board.localPosition = Vector2.Lerp(BoardMenuPosition, BoardGameplayPosition, t);
|
|
PrizesOut.anchoredPosition = Vector3.Lerp(PrizesOutMenuPosition + PrizesOutGameplayOffset, PrizesOutGameplayPosition, t);
|
|
|
|
yield return null;
|
|
}
|
|
|
|
}
|
|
IEnumerator OpenMenuAnim()
|
|
{
|
|
//ШАГ 1. УБРАТЬ ДОСКУ
|
|
float t = 0;
|
|
while (t < 1)
|
|
{
|
|
t += Time.deltaTime * 2;//скорости править
|
|
t = Mathf.Clamp01(t);
|
|
|
|
Board.localPosition = Vector2.Lerp(BoardGameplayPosition, BoardMenuPosition, t);
|
|
PrizesOut.anchoredPosition = Vector2.Lerp(PrizesOutGameplayPosition, PrizesOutMenuPosition + PrizesOutGameplayOffset, t);
|
|
CoinCounter.localPosition = Vector2.Lerp(CoinCounterGameplayPosition, CoinCounterMenuPosition, t);
|
|
|
|
yield return null;
|
|
}
|
|
|
|
//ШАГ 2. ПОКАЗАТЬ МЕНЮ
|
|
t = 0;
|
|
|
|
PrizesOut.sizeDelta = PrizesOutMenuSizeDelta;
|
|
while (t < 1)
|
|
{
|
|
t += Time.deltaTime * 2;
|
|
t = Mathf.Clamp01(t);
|
|
|
|
TopContainer.anchoredPosition = Vector2.Lerp(TopMenuPosition + TopGameplayOffset, TopMenuPosition, t);
|
|
BottomContainer.anchoredPosition = Vector2.Lerp(BoardMenuPosition + BottomGameplayOffset, BoardMenuPosition, t);
|
|
|
|
//перемещение кнопок
|
|
PveContainer.anchoredPosition = Vector2.Lerp(PveMenuPosition + PvpGameplayOffset, PveMenuPosition, t);
|
|
PvpContainer.anchoredPosition = Vector2.Lerp(PvpMenuPosition + PvpGameplayOffset, PvpMenuPosition, t);
|
|
|
|
PrizesOut.anchoredPosition = Vector2.Lerp(PrizesOutMenuPosition + PrizesOutGameplayOffset, PrizesOutMenuPosition, t);
|
|
|
|
yield return null;
|
|
}
|
|
}
|
|
|
|
|
|
}
|