public void OpenUIWindow(UIWindows windowKey, object args) { if (_windowsStack.Count != 0) { _windowsStack[_windowsStack.Count - 1].BecomeInvisible(); SetVisible(_windowsStack[_windowsStack.Count - 1].gameObject, false); } // 注意释放该window变量 GetWindow(windowKey, args); // if (windowID == (int)UIWindows.StatusWindow)//statuswindow特殊,不在windowStack中 // { // defaultWindowList.Add(windowID, window); // return; // } // // TODO UI转换效果 // var canvasGroup = window.GetComponent<CanvasGroup>(); // if (canvasGroup != null) // { // canvasGroup.alpha = 0; // DOTween.To(() => canvasGroup.alpha, x => canvasGroup.alpha = x, 1f, 0.5f); // } // // var requestWindow = window.GetComponent<UIWindow>(); // if (_windowsStack.Contains(requestWindow)) _windowsStack.Remove(requestWindow); // _windowsStack.Add(requestWindow); }
public void OpenWindow(UIWindows windowType, WindowConfig config = null) { if (!IsWindowExists(windowType)) { Debug.Log($" # -UI- # Window not defined for window type: `{windowType}`"); return; } if (IsWindowOpened(windowType)) { Debug.Log($" # -UI- # Window `{windowType}` already opened!"); return; } var newWindow = uiWindows[windowType]; if (newWindow.CloseOthers) { CloseAllWindows(); } if (config != null) { newWindow.SetConfig(config); } newWindow.Open(); newWindow.transform.SetAsLastSibling(); currentWindows.Add(newWindow); }
public bool IsWindowOpened(UIWindows type) { if (!IsWindowExists(type)) { return(false); } return(currentWindows.Exists(x => x == uiWindows[type])); }
public void CloseWindow(UIWindows type) { if (!IsWindowExists(type)) { return; } var window = currentWindows.Find(x => x == uiWindows[type]); currentWindows.Remove(window); window.Close(); }
public IObservable <UIWindow> OpenWindow(UIWindows window) { return(OpenWindow(window.ToString())); }
public void OpenWindow(UIWindows windowType) { m_windows[windowType].SetActive(true); }
private void GetWindow(UIWindows windowKey, object args) { if (_windowPool == null) { _windowPool = new List <UIWindow>(); } UIWindow requestWindow = null; // 如果缓存池中有,则直接加载 for (var i = 0; i < _windowPool.Count; i++) { if (_windowPool[i].windowKey == windowKey) { requestWindow = _windowPool[i]; requestWindow.lastOpenTime = DateTime.Now; break; } } if (requestWindow != null) { if (_windowsStack.Contains(requestWindow)) { _windowsStack.Remove(requestWindow); } _windowsStack.Add(requestWindow); SetVisible(requestWindow.gameObject, true); requestWindow.Set(args); } else { // 如果缓存池中没有,则从硬盘加载 var windowName = Enum.GetName(typeof(UIWindows), windowKey); var resourcePath = UIWindowDir; var resourceName = resourcePath + windowName; // requesetWindow = Instantiate(ResourceLoader.GetObjectDirectly<GameObject>(resourceName)).GetComponent<UIWindow>(); if (Resources.Load(resourceName, typeof(GameObject)) != null) { requestWindow = (Instantiate(Resources.Load(resourceName, typeof(GameObject))) as GameObject) .GetComponent <UIWindow>(); requestWindow.transform.SetParent(UIRoot.transform); // 设置camera var canvases = requestWindow.transform.GetComponentsInChildren <Canvas>(true); for (var i = 0; i < canvases.Length; i++) { canvases[i].worldCamera = UICamera; } var rect = requestWindow.GetComponent <RectTransform>(); rect.pivot = new Vector2(0.5f, 0.5f); rect.localPosition = Vector3.zero; rect.localScale = Vector3.one; rect.sizeDelta = Vector2.zero; requestWindow.Init(args); requestWindow.lastOpenTime = DateTime.Now; _windowPool.Add(requestWindow); // 如果超出缓存容量,删除最早打开的window if (_windowPool.Count > _poolCapacity) { var forDestroyWindow = _windowPool[0]; for (var i = 1; i < _windowPool.Count; i++) { if (_windowPool[i].lastOpenTime < forDestroyWindow.lastOpenTime) { forDestroyWindow = _windowPool[i]; } } LogManager.Log("Remove Window:" + forDestroyWindow.gameObject.name); _windowPool.Remove(forDestroyWindow); forDestroyWindow.Clear(); TryUnloadAtlas(forDestroyWindow); Destroy(forDestroyWindow.gameObject); forDestroyWindow = null; } var canvasGroup = requestWindow.GetComponent <CanvasGroup>(); if (canvasGroup != null) { canvasGroup.alpha = 0; DOTween.To(() => canvasGroup.alpha, x => canvasGroup.alpha = x, 1f, 0.5f); } if (_windowsStack.Contains(requestWindow)) { _windowsStack.Remove(requestWindow); } _windowsStack.Add(requestWindow); } else { ResourceManager.Instance.CreatePrefabObjectAsync(windowName, delegate(GameObject obj) { requestWindow = obj.GetComponent <UIWindow>(); requestWindow.transform.SetParent(UIRoot.transform); // 设置camera var canvases = requestWindow.transform.GetComponentsInChildren <Canvas>(true); for (var i = 0; i < canvases.Length; i++) { canvases[i].worldCamera = UICamera; } var rect = requestWindow.GetComponent <RectTransform>(); rect.pivot = new Vector2(0.5f, 0.5f); rect.localPosition = Vector3.zero; rect.localScale = Vector3.one; rect.sizeDelta = Vector2.zero; requestWindow.Init(args); requestWindow.lastOpenTime = DateTime.Now; _windowPool.Add(requestWindow); // 如果超出缓存容量,删除最早打开的window if (_windowPool.Count > _poolCapacity) { var forDestroyWindow = _windowPool[0]; for (var i = 1; i < _windowPool.Count; i++) { if (_windowPool[i].lastOpenTime < forDestroyWindow.lastOpenTime) { forDestroyWindow = _windowPool[i]; } } LogManager.Log("Remove Window:" + forDestroyWindow.gameObject.name); _windowPool.Remove(forDestroyWindow); forDestroyWindow.Clear(); TryUnloadAtlas(forDestroyWindow); Destroy(forDestroyWindow.gameObject); forDestroyWindow = null; } var canvasGroup = requestWindow.GetComponent <CanvasGroup>(); if (canvasGroup != null) { canvasGroup.alpha = 0; DOTween.To(() => canvasGroup.alpha, x => canvasGroup.alpha = x, 1f, 0.5f); } if (_windowsStack.Contains(requestWindow)) { _windowsStack.Remove(requestWindow); } _windowsStack.Add(requestWindow); }); } } /* * //整理层,把默认window放到最上面,刚刚打开的window放到默认window下 * windowObj.window.transform.SetAsLastSibling(); * * var itr = defaultWindowList.GetEnumerator(); * while (itr.MoveNext()) * { * itr.Current.Value.transform.SetAsLastSibling(); * } * //如果打开的是enforcewindow,那么必须在billboardwindow下面,所以移到最上面 * if (enforceWindow) * windowObj.window.transform.SetAsFirstSibling(); */ //return requesetWindow.gameObject; }
public void OpenUIWindow(UIWindows windowKey) { OpenUIWindow(windowKey, null); }
private void Close() { UIWindows.Close(WindowType.Testing).OnComplete(() => Debug.Log("Closed")); }
private void Open() { UIWindows.Open(WindowType.Testing).OnComplete(() => Debug.Log("Opened")); }
public bool IsWindowExists(UIWindows type) { return(uiWindows.ContainsKey(type)); }