| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using UnityEngine.UI; | 
|   | 
| [DisallowMultipleComponent] | 
| [RequireComponent(typeof(Canvas))] | 
| public class CanvasAddition : MonoBehaviour | 
| { | 
|     [SerializeField] | 
|     Canvas m_Canvas; | 
|     public Canvas canvas { | 
|         get { | 
|             return this.m_Canvas ?? (this.m_Canvas = this.GetComponent<Canvas>()); | 
|         } | 
|     } | 
|   | 
|     [SerializeField] | 
|     CullingFullScreenType m_Culling = CullingFullScreenType.None; | 
|   | 
|     Material m_SpriteGrayMaterial; | 
|     public Material spriteGrayMaterial { | 
|         get { | 
|             return this.m_SpriteGrayMaterial ?? (this.m_SpriteGrayMaterial = MaterialUtility.GetInstantiatedSpriteGrayMaterial()); | 
|         } | 
|     } | 
|   | 
|     private void Awake() | 
|     { | 
|         m_Canvas = this.GetComponent<Canvas>(); | 
|   | 
|         UIManager.Instance.OnOpenWindow += OnWindowOpen; | 
|         UIManager.Instance.OnCloseWindow += OnWindowClose; | 
|     } | 
|   | 
|     private void OnDestroy() | 
|     { | 
|         UIManager.Instance.OnOpenWindow -= OnWindowOpen; | 
|         UIManager.Instance.OnCloseWindow -= OnWindowClose; | 
|     } | 
|   | 
|     private void OnWindowOpen(UIBase _window) | 
|     { | 
|         var culling = false; | 
|         switch (m_Culling) | 
|         { | 
|             case CullingFullScreenType.None: | 
|                 culling = false; | 
|                 break; | 
|                  | 
|             // TODO YYL | 
|             // case CullingFullScreenType.Any: | 
|             //     culling = UIManager.Instance.ExistAnyFullScreenOrMaskWin(); | 
|             //     break; | 
|             // default: | 
|             //     culling = UIManager.Instance.ExistAnyFullScreenOrMaskWinLEqual((WindowType)m_Culling); | 
|             //     break; | 
|             default: | 
|                 break; | 
|         } | 
|   | 
|         canvas.gameObject.SetLayer(culling ? LayerUtility.DevisableUI : LayerUtility.UILayer, false); | 
|     } | 
|   | 
|     private void OnWindowClose(UIBase _window) | 
|     { | 
|         var culling = false; | 
|         switch (m_Culling) | 
|         { | 
|             case CullingFullScreenType.None: | 
|                 culling = false; | 
|                 break; | 
|   | 
|             // TODO YYL | 
|             // case CullingFullScreenType.Any: | 
|             //     culling = WindowCenter.Instance.ExistAnyFullScreenOrMaskWin(); | 
|             //     break; | 
|             // default: | 
|             //     culling = WindowCenter.Instance.ExistAnyFullScreenOrMaskWinLEqual((WindowType)m_Culling); | 
|             //     break; | 
|             default: | 
|                 break; | 
|         } | 
|   | 
|         canvas.gameObject.SetLayer(culling ? LayerUtility.DevisableUI : LayerUtility.UILayer, false); | 
|     } | 
|   | 
|     private void Start() | 
|     { | 
|         var canvasScaler = this.GetComponent<CanvasScaler>(); | 
|         if (canvasScaler != null && canvasScaler.screenMatchMode == CanvasScaler.ScreenMatchMode.MatchWidthOrHeight) | 
|         { | 
|             var screenAspect = Screen.width / (float)Screen.height; | 
|             var referenceAspect = canvasScaler.referenceResolution.x / (float)canvasScaler.referenceResolution.y; | 
|   | 
|             if ((screenAspect - referenceAspect) > 0.0001f) | 
|             { | 
|                 canvasScaler.matchWidthOrHeight = 1f; | 
|             } | 
|             else | 
|             { | 
|                 canvasScaler.matchWidthOrHeight = 0f; | 
|             } | 
|         } | 
|   | 
|     } | 
|   | 
|     public enum CullingFullScreenType | 
|     { | 
|         Base = 0, | 
|         Normal = 1, | 
|         Modal = 2, | 
|         Tip = 3, | 
|         System = 4, | 
|         Loading = 5, | 
|         None = 6, | 
|         Any = 7, | 
|     } | 
|   | 
| } |