69 lines
1.3 KiB
C#
69 lines
1.3 KiB
C#
using UnityEngine;
|
|
using Arena.Characters;
|
|
|
|
namespace Arena.UI
|
|
{
|
|
/// <summary>
|
|
/// Single entry point of the UI: connects the views to the player and switches screens.
|
|
/// </summary>
|
|
public class UiManager : MonoBehaviour
|
|
{
|
|
[System.Serializable]
|
|
public struct References
|
|
{
|
|
[Tooltip("In-game screen: health, ammo.")]
|
|
public GameObject Hud;
|
|
public HealthView HealthView;
|
|
public AmmoView AmmoView;
|
|
public GameOverView GameOverView;
|
|
}
|
|
|
|
#region Fields
|
|
|
|
[SerializeField] private References _references;
|
|
|
|
private Player _player;
|
|
|
|
#endregion
|
|
|
|
#region Unity Lifecycle
|
|
|
|
private void Start()
|
|
{
|
|
// Start: every Awake has run, so Player.Instance is set
|
|
_player = Player.Instance;
|
|
|
|
if (_player == null)
|
|
{
|
|
Debug.LogError("UiManager: no Player in the scene.");
|
|
return;
|
|
}
|
|
|
|
_references.HealthView.Bind(_player.Health);
|
|
_references.AmmoView.Bind(_player.Launcher);
|
|
_player.Health.OnDied += HandlePlayerDied;
|
|
|
|
_references.Hud.SetActive(true);
|
|
_references.GameOverView.Hide();
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (_player != null)
|
|
_player.Health.OnDied -= HandlePlayerDied;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Private Methods
|
|
|
|
private void HandlePlayerDied()
|
|
{
|
|
_references.Hud.SetActive(false);
|
|
_references.GameOverView.Show();
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|