chip-gameV3/Assets/Scripts/Common/VitrinaCatcher.cs
sega 8a6d23b77d Реорг Scripts
Разделено на 4 модуля
- Menu
- Gameplay
- Settings
- Common
2026-07-15 10:49:55 +03:00

109 lines
2.9 KiB
C#

using System;
using System.Collections;
using TMPro;
using UnityEngine;
public class VitrinaCatcher : MonoBehaviour
{
[Header("Ссылки")]
[SerializeField] private RectTransform Panel;
[SerializeField] private CanvasGroup MainCanvasGroup;
[SerializeField] private CanvasGroup SuccessCanvasGroup;
[SerializeField] private CanvasGroup ErrorCanvasGroup;
[SerializeField] private TextMeshProUGUI DateLabel;
[SerializeField] private TextMeshProUGUI TimeToCloseLabel;
[Header("Настройки анимации")]
[SerializeField] private float MinY = -200;
[SerializeField] private float MaxY = 0;
[SerializeField] private float AppearTime = 0.5f;
[SerializeField] private float DisappearTimeSuccess = 5;
[SerializeField] private float DisappearTimeError = 60;
private bool animating = false;
public static VitrinaCatcher Instance { get; private set; }
public void Initialize()
{
Instance = this;
PrizeStandController.OpeningFinished += DisplayOpenResult;
}
private void Update()
{
if (animating && In.GetButtonDownAnyPlayer(PlayerAction.right))
{
StopAllCoroutines();
Hide();
}
}
private void Hide()
{
MainCanvasGroup.alpha = 0;
SuccessCanvasGroup.gameObject.SetActive(false);
ErrorCanvasGroup.gameObject.SetActive(false);
animating = false;
}
public void DisplayOpenResult(bool success, string message)
{
InitializeBySuccess(success);
}
private void InitializeBySuccess(bool success)
{
MainCanvasGroup.alpha = 0;
SuccessCanvasGroup.alpha = 0;
ErrorCanvasGroup.alpha = 0;
SuccessCanvasGroup.gameObject.SetActive(success);
ErrorCanvasGroup.gameObject.SetActive(!success);
if(!success)
DateLabel.text = DateTime.Now.ToString("G");
StartCoroutine(Show(success));
}
private IEnumerator Show(bool success)
{
animating = true;
float t = 0;
float startTime = Time.time;
while (t < 1)
{
float elapsed = Time.time - startTime;
t = elapsed / AppearTime;
Panel.position = new Vector2(0, Mathf.Lerp(MinY, MaxY, t));
MainCanvasGroup.alpha = t;
yield return null;
}
CanvasGroup cg = success ? SuccessCanvasGroup : ErrorCanvasGroup;
startTime = Time.time;
while (Time.time < startTime + AppearTime)
{
float elapsed = Time.time - startTime;
cg.alpha = elapsed/AppearTime;
yield return null;
}
float disappearTime = success ? DisappearTimeSuccess : DisappearTimeError;
for(int i = (int)disappearTime; i >= 0; i--)
{
TimeToCloseLabel.text = i.ToString();
yield return new WaitForSeconds(1);
}
Hide();
}
}