Untitled
unknown
csharp
a month ago
3.2 kB
12
Indexable
using UnityEngine;
using TMPro;
using NUnit.Framework;
using System.Collections.Generic;
public class IntermissionUI : MonoBehaviour
{
[Header("Labels")]
public TMP_Text statusLabel;
public TMP_Text countdownLabel;
public TMP_Text minigameNameLabel;
[Header("Panels")]
public GameObject intermissionPanel;
public GameObject waitingPanel;
public GameObject roundActivePanel;
private void OnEnable()
{
GameManager.Instance.OnStateChanged += HandleStateChanged;
GameManager.Instance.OnIntermissionTick += HandleTick;
GameManager.Instance.OnRoundEnd += HandleWinner;
}
private void OnDisable()
{
if (GameManager.Instance == null) return;
GameManager.Instance.OnStateChanged -= HandleStateChanged;
GameManager.Instance.OnIntermissionTick -= HandleTick;
GameManager.Instance.OnRoundEnd -= HandleWinner;
}
private void HandleStateChanged(GameState state)
{
SetPanel(state);
switch (state)
{
case GameState.WaitingForPlayers:
SetStatus("Waiting for players…");
SetCountdown("");
break;
case GameState.Intermission:
SetStatus("Round starting in…");
if (GameManager.Instance.ActiveMinigame != null)
SetMinigameName($"Next: {GameManager.Instance.ActiveMinigame.displayName}");
break;
case GameState.InRound:
SetStatus("Round in progress!");
SetCountdown("");
break;
case GameState.RoundOver:
SetStatus("Round over!");
SetCountdown("");
break;
}
}
private void HandleTick(float remaining)
{
SetCountdown(Mathf.CeilToInt(remaining).ToString());
}
private void HandleWinner(List<int> actorNumbers)
{
if (actorNumbers.Count == 0)
SetStatus("Round ended — no winner!");
else
{
foreach(int actorNumber in actorNumbers)
{
var player = Photon.Pun.PhotonNetwork.CurrentRoom.GetPlayer(actorNumber);
string name = player != null ? player.NickName : "Unknown";
SetStatus($"{actorNumbers.Count} winers!");
}
}
}
private void SetPanel(GameState state)
{
if (waitingPanel) waitingPanel.SetActive(state == GameState.WaitingForPlayers);
if (intermissionPanel) intermissionPanel.SetActive(state == GameState.Intermission || state == GameState.RoundOver);
if (roundActivePanel) roundActivePanel.SetActive(state == GameState.InRound);
}
private void SetStatus(string text)
{
if (statusLabel) statusLabel.text = text;
}
private void SetCountdown(string text)
{
if (countdownLabel) countdownLabel.text = text;
}
private void SetMinigameName(string text)
{
if (minigameNameLabel) minigameNameLabel.text = text;
}
}
Editor is loading...
Leave a Comment