Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 

152 righe
3.9 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using SUISS.Core;
  5. using UnityEngine;
  6. using UnityEngine.UI;
  7. public sealed class OverlayManager : SingletonMonobehaviour<OverlayManager>
  8. {
  9. //[DebuggerBrowsable(DebuggerBrowsableState.Never)]
  10. public event OverlayManager.InteractionEnabledChangedEventHandler InteractionEnabledChangedEvent;
  11. private void FireInteractionEnabledChangedEvent(bool interactionEnabled)
  12. {
  13. if (this.InteractionEnabledChangedEvent != null)
  14. {
  15. this.InteractionEnabledChangedEvent(interactionEnabled);
  16. }
  17. }
  18. public GameObject ButtonsPrefab
  19. {
  20. get
  21. {
  22. return this._buttonsPrefab;
  23. }
  24. }
  25. public GameObject ProgressPrefab
  26. {
  27. get
  28. {
  29. return this._progressPrefab;
  30. }
  31. }
  32. public GameObject TitlePrefab
  33. {
  34. get
  35. {
  36. return this._titlePrefab;
  37. }
  38. }
  39. public bool InteractionDisabled
  40. {
  41. get
  42. {
  43. return this._disableInteractionRequestSources.Count > 0;
  44. }
  45. }
  46. protected override void Awake()
  47. {
  48. if (this._overlayCanvas == null)
  49. {
  50. this._overlayCanvas = base.gameObject.GetComponent<RectTransform>();
  51. }
  52. base.Awake();
  53. }
  54. public void DisableInteractionRequest(object source)
  55. {
  56. this.DisableInteraction();
  57. this._disableInteractionRequestSources.Add(source);
  58. }
  59. public void EnableInteractionRequest(object source)
  60. {
  61. this._disableInteractionRequestSources.Remove(source);
  62. if (this._disableInteractionRequestSources.Count == 0)
  63. {
  64. this.EnableInteraction();
  65. }
  66. }
  67. public GameObject CreateOverlay(GameObject linkedTo, GameObject overlayPrefab)
  68. {
  69. OverlayLink overlayLink = linkedTo.GetComponent<OverlayLink>();
  70. if (overlayLink == null)
  71. {
  72. overlayLink = linkedTo.AddComponent<OverlayLink>();
  73. GameObject gameObject = new GameObject("Overlay(" + linkedTo.name + ")");
  74. RectTransform rectTransform = gameObject.AddComponent<RectTransform>();
  75. rectTransform.SetParent(this._overlayCanvas, false);
  76. overlayLink.OverlayParent = rectTransform;
  77. }
  78. else
  79. {
  80. overlayLink.UpdateOverlayPosition();
  81. }
  82. GameObject gameObject2 = UnityEngine.Object.Instantiate<GameObject>(overlayPrefab);
  83. gameObject2.transform.SetParent(overlayLink.OverlayParent, false);
  84. RectTransform component = gameObject2.GetComponent<RectTransform>();
  85. if (component == null)
  86. {
  87. UnityEngine.Debug.LogError(string.Format("OverlayManager was unable to find '{0}' component in '{1}' prefab!", typeof(RectTransform).Name, overlayPrefab.name));
  88. UnityEngine.Object.Destroy(gameObject2);
  89. return null;
  90. }
  91. return gameObject2;
  92. }
  93. public T CreateOverlay<T>(GameObject linkedTo, GameObject overlayPrefab) where T : MonoBehaviour
  94. {
  95. GameObject gameObject = this.CreateOverlay(linkedTo, overlayPrefab);
  96. T component = gameObject.GetComponent<T>();
  97. if (component == null)
  98. {
  99. UnityEngine.Debug.LogError(string.Format("Overlay prefab '{0}' does not have a '{1}' component ", overlayPrefab.name, typeof(T).Name));
  100. return (T)((object)null);
  101. }
  102. return component;
  103. }
  104. public Pling CreatePling(Pling plingPrefab, Vector3 position)
  105. {
  106. return UnityEngine.Object.Instantiate<Pling>(plingPrefab, position, Quaternion.identity, this._overlayCanvas);
  107. }
  108. private void EnableInteraction()
  109. {
  110. this._raycaster.enabled = true;
  111. this.FireInteractionEnabledChangedEvent(true);
  112. }
  113. private void DisableInteraction()
  114. {
  115. this._raycaster.enabled = false;
  116. this.FireInteractionEnabledChangedEvent(false);
  117. }
  118. [SerializeField]
  119. private RectTransform _overlayCanvas;
  120. [SerializeField]
  121. private GraphicRaycaster _raycaster;
  122. [SerializeField]
  123. private GameObject _buttonsPrefab;
  124. [SerializeField]
  125. private GameObject _progressPrefab;
  126. [SerializeField]
  127. private GameObject _titlePrefab;
  128. private readonly List<object> _disableInteractionRequestSources = new List<object>();
  129. public delegate void InteractionEnabledChangedEventHandler(bool interactionEnabled);
  130. }