using System; using System.Collections.Generic; using System.Diagnostics; using SUISS.Core; using UnityEngine; using UnityEngine.UI; public sealed class OverlayManager : SingletonMonobehaviour { //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event OverlayManager.InteractionEnabledChangedEventHandler InteractionEnabledChangedEvent; private void FireInteractionEnabledChangedEvent(bool interactionEnabled) { if (this.InteractionEnabledChangedEvent != null) { this.InteractionEnabledChangedEvent(interactionEnabled); } } public GameObject ButtonsPrefab { get { return this._buttonsPrefab; } } public GameObject ProgressPrefab { get { return this._progressPrefab; } } public GameObject TitlePrefab { get { return this._titlePrefab; } } public bool InteractionDisabled { get { return this._disableInteractionRequestSources.Count > 0; } } protected override void Awake() { if (this._overlayCanvas == null) { this._overlayCanvas = base.gameObject.GetComponent(); } base.Awake(); } public void DisableInteractionRequest(object source) { this.DisableInteraction(); this._disableInteractionRequestSources.Add(source); } public void EnableInteractionRequest(object source) { this._disableInteractionRequestSources.Remove(source); if (this._disableInteractionRequestSources.Count == 0) { this.EnableInteraction(); } } public GameObject CreateOverlay(GameObject linkedTo, GameObject overlayPrefab) { OverlayLink overlayLink = linkedTo.GetComponent(); if (overlayLink == null) { overlayLink = linkedTo.AddComponent(); GameObject gameObject = new GameObject("Overlay(" + linkedTo.name + ")"); RectTransform rectTransform = gameObject.AddComponent(); rectTransform.SetParent(this._overlayCanvas, false); overlayLink.OverlayParent = rectTransform; } else { overlayLink.UpdateOverlayPosition(); } GameObject gameObject2 = UnityEngine.Object.Instantiate(overlayPrefab); gameObject2.transform.SetParent(overlayLink.OverlayParent, false); RectTransform component = gameObject2.GetComponent(); if (component == null) { UnityEngine.Debug.LogError(string.Format("OverlayManager was unable to find '{0}' component in '{1}' prefab!", typeof(RectTransform).Name, overlayPrefab.name)); UnityEngine.Object.Destroy(gameObject2); return null; } return gameObject2; } public T CreateOverlay(GameObject linkedTo, GameObject overlayPrefab) where T : MonoBehaviour { GameObject gameObject = this.CreateOverlay(linkedTo, overlayPrefab); T component = gameObject.GetComponent(); if (component == null) { UnityEngine.Debug.LogError(string.Format("Overlay prefab '{0}' does not have a '{1}' component ", overlayPrefab.name, typeof(T).Name)); return (T)((object)null); } return component; } public Pling CreatePling(Pling plingPrefab, Vector3 position) { return UnityEngine.Object.Instantiate(plingPrefab, position, Quaternion.identity, this._overlayCanvas); } private void EnableInteraction() { this._raycaster.enabled = true; this.FireInteractionEnabledChangedEvent(true); } private void DisableInteraction() { this._raycaster.enabled = false; this.FireInteractionEnabledChangedEvent(false); } [SerializeField] private RectTransform _overlayCanvas; [SerializeField] private GraphicRaycaster _raycaster; [SerializeField] private GameObject _buttonsPrefab; [SerializeField] private GameObject _progressPrefab; [SerializeField] private GameObject _titlePrefab; private readonly List _disableInteractionRequestSources = new List(); public delegate void InteractionEnabledChangedEventHandler(bool interactionEnabled); }