private bool Exist(IUIDlg dlg) { if (dlg.pushStack) { var e = m_stack.GetEnumerator(); while (e.MoveNext()) { if (e.Current.id == dlg.id) { return(true); } } } else { var e2 = m_list.GetEnumerator(); while (e2.MoveNext()) { if (e2.Current.id == dlg.id) { return(true); } } } return(false); }
public bool Unload(IUIDlg dlg) { if (Exist(dlg)) { if (dlg.pushStack) { var v = m_stack.Peek(); if (v.id == dlg.id) { DestroyDlg(dlg); m_stack.Pop(); } else { XDebug.LogError("dlg is not in stack ", dlg.fileName); } } else { for (int i = 0, max = m_list.Count; i < max; i++) { if (m_list[i].id == dlg.id) { DestroyDlg(dlg); m_list.RemoveAt(i); break; } } } return(true); } return(false); }
public bool Hide(IUIDlg dlg) { if (Exist(dlg)) { if (dlg.pushStack) { var v = m_stack.Peek(); if (v.id == dlg.id) { HideDlg(dlg); m_stack.Pop(); } } else { for (int max = m_list.Count, i = max - 1; i >= 0; i--) { if (m_list[i].id == dlg.id) { HideDlg(dlg); m_list.RemoveAt(i); break; } } } } return(true); }
public void LoadDlg(IUIDlg dlg) { if (!Exist(dlg)) { if (m_recycle == null) { m_recycle = new Dictionary <uint, IUIDlg>(); } if (m_recycle.ContainsKey(dlg.id)) { m_recycle.Remove(dlg.id); dlg.innerBehaviour.gameObject.SetActive(true); } else { GameObject go = XResources.Load <GameObject>(dlg.fileName, AssetType.Prefab); go.transform.SetParent(dlg.shareCanvas ? _canvas.transform : _uiCamera.transform); if (!dlg.shareCanvas) { Canvas cans = go.GetComponent <Canvas>(); if (cans != null) { cans.worldCamera = _uiCamera; } } go.transform.localPosition = Vector3.zero; go.transform.localRotation = Quaternion.identity; go.transform.localScale = Vector3.one; dlg.SetBehaviour(go); dlg.OnLoad(); } if (dlg.pushStack) { m_stack.Push(dlg); _sort = dlg.innerBehaviour.SortDepth(_sort) + _gap; dlg.OnShow(); } else { m_list.Add(dlg); } } if (!dlg.pushStack) //不在栈中的ui 每次调用的时候都展示在最前 不管之前是否cache { if (dlg.type == DlgType.Top) { dlg.innerBehaviour.SortDepth(_top); } else if (dlg.type == DlgType.Surface) { _sort = dlg.innerBehaviour.SortDepth(_sort) + _gap; } dlg.OnShow(); } }
private void DestroyDlg(IUIDlg dlg) { dlg.OnDestroy(); XResources.Destroy(dlg.innerBehaviour.gameObject); }
private void HideDlg(IUIDlg dlg) { dlg.OnHide(); dlg.innerBehaviour.gameObject.SetActive(false); m_recycle[dlg.id] = dlg; }