156 lines
4.0 KiB
C#
156 lines
4.0 KiB
C#
using System.Collections;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class RhythmGameUI : MonoBehaviour
|
|
{
|
|
[Header("Panel")]
|
|
[SerializeField] private GameObject rhythmPanel;
|
|
[SerializeField] private GameObject fishBonusPanel;
|
|
[SerializeField] private GameObject finalResultPanel;
|
|
|
|
[Header("Text")]
|
|
[SerializeField] private TMP_Text songTitleText;
|
|
[SerializeField] private TMP_Text scoreText;
|
|
[SerializeField] private TMP_Text comboText;
|
|
[SerializeField] private TMP_Text judgmentText;
|
|
[SerializeField] private TMP_Text fishBonusText;
|
|
[SerializeField] private TMP_Text guideText;
|
|
[SerializeField] private TMP_Text finalResultText;
|
|
|
|
[Header("Optional Images")]
|
|
[SerializeField] private Image fishIcon;
|
|
|
|
[Header("Settings")]
|
|
[SerializeField] private string defaultSongTitle = "고양이 합창단의 노래";
|
|
[SerializeField] private string defaultGuideText = "박자에 맞춰 양동이를 두드리세요";
|
|
[SerializeField] private float judgmentShowTime = 0.45f;
|
|
[SerializeField] private bool hidePanelOnFinalResult = false;
|
|
|
|
private Coroutine judgmentRoutine;
|
|
|
|
private void Awake()
|
|
{
|
|
InitializeUI(defaultSongTitle);
|
|
}
|
|
|
|
public void InitializeUI(string songTitle = null)
|
|
{
|
|
SetPanelVisible(true);
|
|
HideFinalResult();
|
|
HideJudgment();
|
|
ShowFishBonus(false);
|
|
|
|
SetSongTitle(string.IsNullOrWhiteSpace(songTitle) ? defaultSongTitle : songTitle);
|
|
UpdateScore(0);
|
|
UpdateCombo(0);
|
|
SetGuideText(defaultGuideText);
|
|
}
|
|
|
|
public void SetPanelVisible(bool visible)
|
|
{
|
|
if (rhythmPanel != null)
|
|
rhythmPanel.SetActive(visible);
|
|
}
|
|
|
|
public void SetSongTitle(string title)
|
|
{
|
|
if (songTitleText != null)
|
|
songTitleText.text = title;
|
|
}
|
|
|
|
public void UpdateScore(int score)
|
|
{
|
|
if (scoreText != null)
|
|
scoreText.text = $"점수 {score}";
|
|
}
|
|
|
|
public void UpdateCombo(int combo)
|
|
{
|
|
if (comboText != null)
|
|
comboText.text = $"{combo} COMBO";
|
|
}
|
|
|
|
public void SetGuideText(string text)
|
|
{
|
|
if (guideText != null)
|
|
guideText.text = text;
|
|
}
|
|
|
|
public void ShowFishBonus(bool active)
|
|
{
|
|
if (fishBonusPanel != null)
|
|
fishBonusPanel.SetActive(active);
|
|
|
|
if (fishIcon != null)
|
|
fishIcon.gameObject.SetActive(active);
|
|
|
|
if (fishBonusText != null)
|
|
{
|
|
fishBonusText.gameObject.SetActive(active);
|
|
fishBonusText.text = active ? "생선 사용됨! 난이도 감소" : string.Empty;
|
|
}
|
|
}
|
|
|
|
public void ShowJudgment(string text)
|
|
{
|
|
if (judgmentText == null)
|
|
return;
|
|
|
|
if (judgmentRoutine != null)
|
|
StopCoroutine(judgmentRoutine);
|
|
|
|
judgmentRoutine = StartCoroutine(JudgmentRoutine(text));
|
|
}
|
|
|
|
private IEnumerator JudgmentRoutine(string text)
|
|
{
|
|
judgmentText.gameObject.SetActive(true);
|
|
judgmentText.text = text;
|
|
|
|
yield return new WaitForSeconds(judgmentShowTime);
|
|
|
|
judgmentText.gameObject.SetActive(false);
|
|
judgmentRoutine = null;
|
|
}
|
|
|
|
public void HideJudgment()
|
|
{
|
|
if (judgmentRoutine != null)
|
|
{
|
|
StopCoroutine(judgmentRoutine);
|
|
judgmentRoutine = null;
|
|
}
|
|
|
|
if (judgmentText != null)
|
|
judgmentText.gameObject.SetActive(false);
|
|
}
|
|
|
|
public void ShowFinalResult(string text)
|
|
{
|
|
HideJudgment();
|
|
|
|
if (hidePanelOnFinalResult)
|
|
SetPanelVisible(false);
|
|
|
|
if (finalResultPanel != null)
|
|
finalResultPanel.SetActive(true);
|
|
|
|
if (finalResultText != null)
|
|
{
|
|
finalResultText.gameObject.SetActive(true);
|
|
finalResultText.text = text;
|
|
}
|
|
}
|
|
|
|
public void HideFinalResult()
|
|
{
|
|
if (finalResultPanel != null)
|
|
finalResultPanel.SetActive(false);
|
|
|
|
if (finalResultText != null)
|
|
finalResultText.gameObject.SetActive(false);
|
|
}
|
|
}
|