sea-battle/Assets/Scripts/UI/Coin/CoinFlipUI.cs

70 lines
1.9 KiB
C#

using UnityEngine;
using UnityEngine.UI;
public class CoinFlipUI : MonoBehaviour
{
[Header("UI")]
public Image coinImage; // ńŕě UI-îáúĺęň ń ęŕđňčíęîé
public Sprite headsSprite; // îđ¸ë
public Sprite tailsSprite; // đĺřęŕ
[Header("Spin Settings")]
public float spinSpeed = 360f; // ăđŕäóńîâ â ńĺęóíäó
public bool autoSpin = true; // ęđóňčňń˙ ďîńňî˙ííî
private bool showingHeads = true;
private Color originalColor;
private bool frozen = false; // ôëŕă Ťçŕěîđîçęčť
private void Awake()
{
if (coinImage != null)
originalColor = coinImage.color; // ńîőđŕí˙ĺě čńőîäíűé öâĺň
}
/// <summary>Äĺëŕĺě ěîíĺňó ńĺđîé č îńňŕíŕâëčâŕĺě âđŕůĺíčĺ</summary>
public void FreezeCoin()
{
if (coinImage != null)
{
coinImage.color = Color.grey;
coinImage.sprite = headsSprite; // âńĺăäŕ ďîęŕçűâŕĺě ďĺđâűé ńďđŕéň
// ńáđŕńűâŕĺě âđŕůĺíčĺ, ÷ňîáű ěîíĺňŕ ńěîňđĺëŕ "âďĺđ¸ä"
coinImage.rectTransform.localEulerAngles = Vector3.zero;
}
frozen = true;
}
/// <summary>Âîçâđŕůŕĺě ěîíĺňó â íîđěŕëüíîĺ ńîńňî˙íčĺ č âęëţ÷ŕĺě âđŕůĺíčĺ</summary>
public void UnfreezeCoin()
{
if (coinImage != null)
coinImage.color = originalColor;
frozen = false;
}
void Update()
{
if (frozen || !autoSpin) return;
// ęđóňčě ěîíĺňęó
coinImage.rectTransform.Rotate(Vector3.up * spinSpeed * Time.deltaTime);
float yAngle = coinImage.rectTransform.localEulerAngles.y;
// ěĺí˙ĺě ńďđŕéň íŕ îáîđîňíîé ńňîđîíĺ
if (yAngle > 90f && yAngle < 270f && showingHeads)
{
coinImage.sprite = tailsSprite;
showingHeads = false;
}
else if ((yAngle <= 90f || yAngle >= 270f) && !showingHeads)
{
coinImage.sprite = headsSprite;
showingHeads = true;
}
}
}