You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
3.0 KiB
C#

using System;
using Unity.BossRoom.Gameplay.GameState;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using VContainer;
namespace Unity.BossRoom.Gameplay.UI
{
/// <summary>
/// Provides backing logic for all of the UI that runs in the PostGame stage.
/// </summary>
public class PostGameUI : MonoBehaviour
{
[SerializeField]
private Light m_SceneLight;
[SerializeField]
private TextMeshProUGUI m_WinEndMessage;
[SerializeField]
private TextMeshProUGUI m_LoseGameMessage;
[SerializeField]
private GameObject m_ReplayButton;
[SerializeField]
private GameObject m_WaitOnHostMsg;
[SerializeField]
private Color m_WinLightColor;
[SerializeField]
private Color m_LoseLightColor;
ServerPostGameState m_PostGameState;
[Inject]
void Inject(ServerPostGameState postGameState)
{
m_PostGameState = postGameState;
// only hosts can restart the game, other players see a wait message
if (NetworkManager.Singleton.IsHost)
{
m_ReplayButton.SetActive(true);
m_WaitOnHostMsg.SetActive(false);
}
else
{
m_ReplayButton.SetActive(false);
m_WaitOnHostMsg.SetActive(true);
}
}
void Start()
{
m_PostGameState.NetworkPostGame.WinState.OnValueChanged += OnWinStateChanged;
SetPostGameUI(m_PostGameState.NetworkPostGame.WinState.Value);
}
void OnDestroy()
{
if (m_PostGameState != null)
{
m_PostGameState.NetworkPostGame.WinState.OnValueChanged -= OnWinStateChanged;
}
}
void OnWinStateChanged(WinState previousValue, WinState newValue)
{
SetPostGameUI(newValue);
}
void SetPostGameUI(WinState winState)
{
switch (winState)
{
// Set end message and background color based last game outcome
case WinState.Win:
m_SceneLight.color = m_WinLightColor;
m_WinEndMessage.gameObject.SetActive(true);
m_LoseGameMessage.gameObject.SetActive(false);
break;
case WinState.Loss:
m_SceneLight.color = m_LoseLightColor;
m_WinEndMessage.gameObject.SetActive(false);
m_LoseGameMessage.gameObject.SetActive(true);
break;
case WinState.Invalid:
Debug.LogWarning("PostGameUI encountered Invalid WinState");
break;
}
}
public void OnPlayAgainClicked()
{
m_PostGameState.PlayAgain();
}
public void OnMainMenuClicked()
{
m_PostGameState.GoToMainMenu();
}
}
}