2026-07-14 11:14:13 +03:00

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;
}
}
}