|
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using SUISS.Core;
- using UnityEngine;
- using UnityEngine.UI;
-
- public sealed class OverlayManager : SingletonMonobehaviour<OverlayManager>
- {
- //[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<RectTransform>();
- }
- 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<OverlayLink>();
- if (overlayLink == null)
- {
- overlayLink = linkedTo.AddComponent<OverlayLink>();
- GameObject gameObject = new GameObject("Overlay(" + linkedTo.name + ")");
- RectTransform rectTransform = gameObject.AddComponent<RectTransform>();
- rectTransform.SetParent(this._overlayCanvas, false);
- overlayLink.OverlayParent = rectTransform;
- }
- else
- {
- overlayLink.UpdateOverlayPosition();
- }
- GameObject gameObject2 = UnityEngine.Object.Instantiate<GameObject>(overlayPrefab);
- gameObject2.transform.SetParent(overlayLink.OverlayParent, false);
- RectTransform component = gameObject2.GetComponent<RectTransform>();
- 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<T>(GameObject linkedTo, GameObject overlayPrefab) where T : MonoBehaviour
- {
- GameObject gameObject = this.CreateOverlay(linkedTo, overlayPrefab);
- T component = gameObject.GetComponent<T>();
- 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<Pling>(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<object> _disableInteractionRequestSources = new List<object>();
-
- public delegate void InteractionEnabledChangedEventHandler(bool interactionEnabled);
- }
|