Untitled

 avatar
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