using System.Collections.Generic; using System.Reflection; using GameKit.Dependencies.Utilities; using log4net; using UnityEngine; namespace Managers { /// /// Manages dynamic UI elements which can be triggered from everywhere. /// public class UIManager : MonoBehaviour { private static ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); [SerializeField] public bool IsUIActiveScene { get; set; } public HUD HUD { get; private set; } public Announcments Announcments { get; private set; } public PauseMenu PauseMenu { get; private set; } public MatchEndMenu MatchEndMenu { get; private set; } public OffScreenIndicatorManager OffScreenManager; public ManageableAudio MatchMusic; /// /// Globally accessible member to use manager with. /// public static UIManager G { get; private set; } void Awake() { G = this; Log.Info("Awake"); } public bool StartManagingMatchUI() { if (!StartManagingHUD() || !StartManagingAnnouncements() || !StartManagingPauseMenu() || !StartManagingMatchEndMenu()) { Log.Error("Problems when starting in game match UI."); return false; } return true; } public bool StartManagingHUD() { if (HUD == null) { GameObject go = GameObject.Find("HUD"); if (go == null) { Log.Error("Could not find HUD GameObject in loaded scenes!"); return false; } HUD = go.GetComponent(); } return true; } public bool StartManagingPauseMenu() { if (PauseMenu == null) { GameObject go = GameObject.Find("Paused Menu"); if (go == null) { Log.Error("Could not find Pause Menu GameObject in loaded scenes!"); return false; } PauseMenu = go.GetComponent(); } return true; } public bool StartManagingMatchEndMenu() { if (MatchEndMenu == null) { GameObject go = GameObject.Find("Match End Menu"); if (go == null) { Log.Error("Could not find Match End Menu GameObject in loaded scenes!"); return false; } MatchEndMenu = go.GetComponent(); } return true; } public bool StartManagingAnnouncements() { if (Announcments == null) { GameObject go = GameObject.Find("Announcer UI"); if (go == null) { Log.Error("Could not find Pause Menu GameObject in loaded scenes!"); return false; } Announcments = go.GetComponent(); } return true; } public void AssignHUDElementsToPlayers(List players) { foreach (Player p in players) { IHUDOwner s = p.spawnedCharacter.GetComponent(); // var BoostUI = HUD.boostCapacities[p.playerNumber - 1].GetComponent(); // BoostUI.SetPlayerName(p); // BoostUI.gameObject.SetActive(true); // s.BoostUpdated += BoostUI.UpdateFill; GameObject lm = Instantiate(HUD.LifeMeter); Vector3 pos = lm.transform.localPosition; Vector3 angles = lm.transform.localEulerAngles; Vector3 scale = lm.transform.localScale; lm.transform.SetParent(p.spawnedCharacter.transform); lm.transform.localPosition = pos; lm.transform.localEulerAngles = angles; lm.transform.localScale = scale; var LifeMeter = lm.GetComponent(); s.LifeUpdated += LifeMeter.SetFill; GameObject bm = Instantiate(HUD.BoostMeter); pos = bm.transform.localPosition; angles = bm.transform.localEulerAngles; scale = bm.transform.localScale; bm.transform.SetParent(p.spawnedCharacter.transform); bm.transform.localPosition = pos; bm.transform.localEulerAngles = angles; bm.transform.localScale = scale; var BoostMeter = bm.GetComponent(); s.BoostUpdated += BoostMeter.SetFill; OffScreenManager.AddTarget(p.spawnedCharacter, p.character.ShipHullColor); } // TODO: This belongs somewhere? MatchMusic = AudioManager.G.GetGlobalSoundRandom("match_music", true); MatchMusic.PlayAudio(true); } public void StartInputPrompt(Dictionary unassignedPlayers) { foreach (int playerNumber in unassignedPlayers.Keys) { HUD.StartJoinPrompt(unassignedPlayers[playerNumber]); } } public void ShowMatchStartPrompt() { Announcments.AnnounceText("Press Start/Enter \n to start the match!"); } public void HideAnnouncement() { Announcments.StopAnnouncement(); } public void ShowPauseMenu(Transform transform) { HUD?.Hide(); PauseMenu?.Show(transform); } public void HidePauseMenu() { PauseMenu?.Hide(); HUD?.Show(); } public void ShowMatchEndMenu(Transform transform) { HUD?.Hide(); MatchEndMenu?.Show(transform); } public void HideMatchEndMenu() { MatchEndMenu?.Hide(); HUD?.Show(); } public void ShowHUD() { HUD?.Show(); } public void HideHUD() { HUD?.Hide(); } } }