using UnityEngine; using Arena.Characters; namespace Arena.UI { /// /// Single entry point of the UI: connects the views to the player and switches screens. /// 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 } }