study/first_study/Library/PackageCache/com.unity.inputsystem@02433b2481ab/Samples~/RebindingUI/Game/Message.cs

88 lines
2.5 KiB
C#
Raw Normal View History

using System;
using UnityEngine;
using UnityEngine.UI;
namespace UnityEngine.InputSystem.Samples.RebindUI
{
/// <summary>
/// A UI to show messages reflecting changes to gameplay state.
/// </summary>
public class Message : MonoBehaviour
{
[Tooltip("The associated gameplay manager.")]
public GameplayManager gameplayManager;
[Tooltip("The associated UI root to hide/show.")]
public GameObject root;
[Tooltip("The associated UI text to be altered to show messages.")]
public Text text;
private Action m_TimeoutCallback;
private void OnEnable()
{
// Monitor changes to gameplay state and game pause state.
gameplayManager.GameplayStateChanged += OnGameplayStateChanged;
gameplayManager.PauseChanged += OnPauseChanged;
// Initialize
OnGameplayStateChanged(gameplayManager.state);
}
private void OnDisable()
{
// Unsubscribe from monitoring gameplay and pause state.
gameplayManager.GameplayStateChanged += OnGameplayStateChanged;
gameplayManager.PauseChanged -= OnPauseChanged;
}
private void OnPauseChanged(bool paused)
{
OnGameplayStateChanged(gameplayManager.state);
}
private void Hide()
{
root.SetActive(false);
}
private void Show(string message)
{
text.text = message;
root.SetActive(true);
}
private void Show(string message, float duration)
{
Show(message);
}
private void OnGameplayStateChanged(GameplayManager.GameplayState state)
{
if (gameplayManager.paused)
{
Show("PAUSED");
return;
}
switch (state)
{
case GameplayManager.GameplayState.None:
break;
case GameplayManager.GameplayState.StartLevel:
Show($"ROUND {gameplayManager.level}");
break;
case GameplayManager.GameplayState.CompleteLevel:
break;
case GameplayManager.GameplayState.Playing:
Hide();
break;
case GameplayManager.GameplayState.GameOver:
Show("GAME OVER");
break;
}
}
}
}