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++; }
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; } }
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); } }
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>()); }
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); }