using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Rendering.HighDefinition; using TMPro; using UnityEngine.Playables; using UnityEngine.EventSystems; using UnityEngine.Localization; public class UIManager : MonoBehaviour { [Header("Raycast UI")] public GameObject raycastDefault; public GameObject raycastInteractabe; public GameObject raycastLocked; [Header("Spherecast UI")] public GameObject sphereInteractable; #region sanity related [Header("Sanity")] public RawImage SanityMeterUI; //The RawImage meter UI for the sanity of the player. public float minimumAlphaColor = 0.0f; //The minimum alpha color of the sprite. public float maximumAlphaColor = 1f; //The maximum alpha color of the sprite. public float sanityDuration = 300f; // It must be the same with the _sanity from the sanity script to work. [HideInInspector] public float startTime; #endregion #region Notifications [Header("Notifications")] public GameObject messagesContainer; public TextMeshProUGUI MessageText; public LocalizedString localizedMessageText; //public LocalizedString localizedMessageText; public Animator AnimatorLabel; public Image labelImage; public bool messagesContainerIsEnabled = true; #endregion #region MouseUI [Header("Mouse UI")] public GameObject mouseUIMiddle; public TextMeshProUGUI mouseUIMiddleText; public LocalizedString localizedMouseUIMiddleLabel; public GameObject mouseUILeft; public TextMeshProUGUI mouseUILeftText; public LocalizedString localizedMouseUILeftLabel; public GameObject mouseUIRight; public TextMeshProUGUI mouseUIRightText; public LocalizedString localizedMouseUIRightLabel; #endregion [Header("Pocket Watch UI")] public GameObject pocketWatchIndicationsPanel; [Header("Tutorial UI")] public Image tutorialHintBackgroundPanel; public TextMeshProUGUI tutorialHintText; [Header("Important Tutorial Hint")] public RawImage importantTutorialHintImage; public TextMeshProUGUI importantTutorialHintTitleText; public TextMeshProUGUI importantTutorialHintDescriptionText; public TextMeshProUGUI importantTutorialHintKeyToPressToClose; public PlayableDirector tutorialHintFadeInPlayable; public PlayableDirector tutorialHintFadeOutPlayable; [HideInInspector] public ImportantTutorialHint currentImportantTutorialHint; #region Cutscenes UI [Header("Cutscenes UI")] public TextMeshProUGUI TitlesUI; #endregion #region WorldUI [Header("World UI")] public GameObject worldUI_Icon; public bool updateUI = false; public bool userInterfaceIsOnScreen; #endregion public CustomPassVolume customPassUIRenderOnTop; public LayerMask customPassUIRenderOnTopObjectsToExclude; #region Inventory Related [Header("Inventory UI Related")] public CustomPassVolume customPassUIRenderOnTop_UIAndModels; public CustomPassVolume CustomPassUIRenderOnTop_UIOnly; #endregion public EventSystem eventSystem; private static UIManager _instance; public static UIManager GetInstance() { return _instance; } void Awake() { if (!_instance) { _instance = this; } #region Sanity related //SanityMeterUI.color = new Color(1f, 1f, 1f, 0f); //Sets the alpha of the image to 0 as default before the game starts. startTime = Time.time; #endregion #region MouseUI related MouseUIMiddleDisable(); MouseUILeftDisable(); MouseUIRightDisable(); #endregion } private void Update() { if (userInterfaceIsOnScreen) { if (messagesContainerIsEnabled) { labelImage.enabled = false; MessageText.enabled = false; tutorialHintBackgroundPanel.enabled = false; tutorialHintText.enabled = false; messagesContainerIsEnabled = false; } } else { if (messagesContainerIsEnabled == false) { labelImage.enabled = true; MessageText.enabled = true; tutorialHintBackgroundPanel.enabled = true; tutorialHintText.enabled = true; messagesContainerIsEnabled = true; } } } private void Start() { eventSystem = FindObjectOfType(); // Force refresh των TMP Texts που έχουν tags if (tutorialHintText != null) tutorialHintText.ForceMeshUpdate(); if (importantTutorialHintDescriptionText != null) importantTutorialHintDescriptionText.ForceMeshUpdate(); if (importantTutorialHintKeyToPressToClose != null) importantTutorialHintKeyToPressToClose.ForceMeshUpdate(); if (mouseUIMiddleText != null) mouseUIMiddleText.ForceMeshUpdate(); if (mouseUILeftText != null) mouseUILeftText.ForceMeshUpdate(); if (mouseUIRightText != null) mouseUIRightText.ForceMeshUpdate(); if (MessageText != null) MessageText.ForceMeshUpdate(); Debug.Log(" UIManager TMP Texts refreshed at Start!"); } public IEnumerator DisplayMessage(LocalizedString messageText) { MessageText.text = messageText.GetLocalizedString(localizedMessageText); AnimatorLabel.SetBool("IsFadedIn", true); yield return new WaitForSeconds(3.5f); AnimatorLabel.SetBool("IsFadedIn", false); } public void DisplayMessageOnScreen(LocalizedString messageText) { StartCoroutine(DisplayMessage(messageText)); } public void DisplayPrompt(LocalizedString promptText) { MessageText.text = promptText.GetLocalizedString(); } #region Mouse UI #region Mouse UI Activation public void MouseUIMiddleDisplay(LocalizedString text) { mouseUIMiddle.SetActive(true); mouseUIMiddleText.text = localizedMouseUIMiddleLabel.GetLocalizedString(); } public void MouseUILeftDisplay(LocalizedString text) { mouseUILeft.SetActive(true); mouseUILeftText.text = localizedMouseUILeftLabel.GetLocalizedString(); } public void MouseUIRightDisplay(LocalizedString text) { mouseUIRight.SetActive(true); mouseUIRightText.text = localizedMouseUIRightLabel.GetLocalizedString(); } #endregion #region MouseUI Disable public void MouseUIMiddleDisable() { mouseUIMiddle.SetActive(false); mouseUIMiddleText.text = ""; } public void MouseUILeftDisable() { mouseUILeft.SetActive(false); mouseUILeftText.text = ""; } public void MouseUIRightDisable() { mouseUIRight.SetActive(false); mouseUIRightText.text = ""; } #endregion #endregion #region World UI Icons public void DisableWorldUIIcon() { worldUI_Icon.SetActive(false); } public void DisableUIItemIconVisibility() { customPassUIRenderOnTop.gameObject.SetActive(false); // Set the camera's culling mask to exclude objects on the specified layer Camera.main.cullingMask &= ~customPassUIRenderOnTopObjectsToExclude.value; } public void EnableUIItemIconVisibility() { customPassUIRenderOnTop.gameObject.SetActive(true); // Set the camera's culling mask to include the objects on the specified layer Camera.main.cullingMask |= customPassUIRenderOnTopObjectsToExclude.value; } #endregion #region Important Tutorial Hint public void UpdateImportantTutorialHintInput() { currentImportantTutorialHint.UpdateTutorialInput(); } #endregion public void OpenPocketWatchIndicationsPanel() { pocketWatchIndicationsPanel.SetActive(true); } public void ClosePocketWatchIndicationsPanel() { pocketWatchIndicationsPanel.SetActive(false); } }