Example #1
0
        public void Open(UI ui, UIOpenMode mode)
        {
            // Expensive call
            // Search main canvas
            if (_mainCanvas == null)
            {
                SearchMainCanvas();
                if (_mainCanvas == null)
                {
                    return;
                }
            }

            // Ensure that instantiation is valid
            BaseUI instantiation = null;

            if (ui.Instantiated == false)
            {
                instantiation = ui.InstantiateUI(_mainCanvas);
            }
            else
            {
                instantiation = ui.Instantiation;
            }

            // Show / Focus
            ManageOpenMode(mode);
            instantiation.Show(_canvasOrder);
            instantiation.Focus(true);
            _queue.Add(ui);
            _canvasOrder++;
        }
Example #2
0
        private void ManageOpenMode(UIOpenMode mode)
        {
            switch (mode)
            {
            case UIOpenMode.Single:
                _canvasOrder = 1;
                _queue.ForEach(element => element.DestroyUI());
                _queue.Clear();
                break;

            case UIOpenMode.Additive:
                UI last = _queue.LastOrDefault();
                if (last != null)
                {
                    last.Instantiation.Focus(false);
                }
                break;
            }
        }
Example #3
0
        private void RecalulateMainUIlayer()
        {
            List <string> mainUILayerUIPathList = null;
            Dictionary <string, UIOpenMode> mainUILayerUIOpenModeDic = null;

            if (!_layerDic.TryGetValue(EUISortingLayer.MainUI, out mainUILayerUIPathList))
            {
                return;
            }
            if (mainUILayerUIPathList.Count <= 0)
            {
                return;
            }
            if (!_layerUIOpenModeDic.TryGetValue(EUISortingLayer.MainUI, out mainUILayerUIOpenModeDic))
            {
                return;
            }

            int        layerTypeValue = (int)Enums.LayerType.UI;
            UIOpenMode uiOpenMode     = UIOpenMode.Overlay;
            string     uiPath         = null;

            for (int index = mainUILayerUIPathList.Count - 1; index >= 0; index--)
            {
                uiPath = mainUILayerUIPathList[index];
                if (_uiDic[uiPath].gameObject.layer != layerTypeValue)
                {
                    TransformUtil.SwitchLayer(_uiDic[uiPath].transform, layerTypeValue);
                }
                if (mainUILayerUIOpenModeDic.TryGetValue(uiPath, out uiOpenMode))
                {
                    if (uiOpenMode == UIOpenMode.Replace)
                    {
                        layerTypeValue = (int)Enums.LayerType.UIHide;
                    }
                }
            }
            _lastOpenedUIPath = mainUILayerUIPathList.Last <string>();
            if (onUIViewOpenDelegate != null)
            {
                onUIViewOpenDelegate(_lastOpenedUIPath);
            }
        }
Example #4
0
        public T Open <T>(string uiPath, EUISortingLayer uiSortingLayer = EUISortingLayer.MainUI, UIOpenMode uiOpenMode = UIOpenMode.Replace) where T : MonoBehaviour
        {
            GameObject go = Open(uiPath, uiSortingLayer, uiOpenMode);

            return(go.GetComponent <T>());
        }
Example #5
0
        public GameObject Open(string uiPath, EUISortingLayer uiSortingLayer = EUISortingLayer.MainUI, UIOpenMode uiOpenMode = UIOpenMode.Replace)
        {
            GameObject result = null;

            if (!_uiDic.TryGetValue(uiPath, out result))
            {
                GameObject prefab = ResMgr.instance.Load <GameObject>(uiPath);
                if (prefab == null)
                {
                    return(null);
                }
                result = GameObject.Instantiate(prefab);
                result.transform.SetParent(ui2DRoot, false);
                result.name = uiPath;

                RectTransform rectTransform = result.GetComponent <RectTransform>();
                if (rectTransform != null)
                {
                    rectTransform.anchorMin          = Vector2.zero;
                    rectTransform.anchorMax          = Vector3.one;
                    rectTransform.anchoredPosition3D = Vector3.zero;
                    rectTransform.offsetMin          = Vector2.zero;
                    rectTransform.offsetMax          = Vector2.zero;
                    rectTransform.pivot      = new Vector2(0.5f, 0.5f);
                    rectTransform.localScale = Vector3.one;
                }
            }
            SetLayerAndOrder(result, uiSortingLayer, GetTopSortingOrderAtLayer(uiSortingLayer), GetTopPlaneDistance(uiSortingLayer));

            _uiDic.AddOrReplace(uiPath, result);
            _goLayerDic.AddOrReplace(result, uiSortingLayer);

            if (!_layerDic.ContainsKey(uiSortingLayer))
            {
                _layerDic[uiSortingLayer] = new List <string>();
            }
            _layerDic[uiSortingLayer].Remove(uiPath);
            _layerDic[uiSortingLayer].Add(uiPath);

            if (!_layerUIOpenModeDic.ContainsKey(uiSortingLayer))
            {
                _layerUIOpenModeDic[uiSortingLayer] = new Dictionary <string, UIOpenMode>();
            }
            _layerUIOpenModeDic[uiSortingLayer].AddOrReplace(uiPath, uiOpenMode);

            Observers.Facade.Instance.SendNotification(uiPath, result, "open");
            Observers.Facade.Instance.SendNotification("OpenUIView", uiPath, "open");

            if (uiSortingLayer == EUISortingLayer.MainUI)
            {
                RecalulateMainUIlayer();
            }
            return(result);
        }