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, 
 | 
    } 
 | 
  
 | 
} 
 |