public void LoadWindow(string windowName, bool isBackground = false, WindowLoadFinishHandle callback = null) { WindowInfo windowInfo = WindowInfoTable.Instance.GetWindowInfo(windowName); if (windowInfo != null) { ResourceRequest request = Resources.LoadAsync(windowInfo.path); WindowLoadInfo info = new WindowLoadInfo(); info.mResourceRequest = request; info.info = windowInfo; info.isBackground = isBackground; info.callback = callback; mWindowLoadInfoList.Add(info); } }
public void Update(float deltaTime) { for (int i = mWindowLoadInfoList.Count - 1; i >= 0; i--) { WindowLoadInfo loadInfo = mWindowLoadInfoList[i]; ResourceRequest request = loadInfo.mResourceRequest; if (request.isDone) { GameObject prefab = request.asset as GameObject; WindowInfo info = loadInfo.info; System.Type windowType = System.Type.GetType("LClient." + info.className); if (windowType != null) { BaseWindow window = (BaseWindow)System.Activator.CreateInstance(windowType); GameObject instance = GameObject.Instantiate(prefab); if (mCanvas.ContainsKey(info.layer)) { RectTransform rect = instance.GetComponent <RectTransform>(); rect.SetParent(mCanvas[info.layer], false); if (!loadInfo.isBackground) { window.Create(instance, true); mFrontWindows.Add(info.name, window); } else { window.Create(instance, false); mBackgroundWindows.Add(info.name, window); } WindowLoadFinishHandle callback = loadInfo.callback; if (callback != null) { callback.Invoke(window); } } } mWindowLoadInfoList.RemoveAt(i); } } }