Ejemplo n.º 1
0
    public void openWindow(string windowName, CallBack <WindowBase> onWindowAwake, bool isDialog, bool closeOld, bool hideOld)
    {
        WindowBase oldWindow = null;

        if (!isDialog && windowStack.Count > 0)
        {
            while (windowStack.Count > 0)
            {
                oldWindow = windowStack.Peek();
                if (oldWindow.IsDestoryed)
                {
                    windowStack.Pop();
                }
                else
                {
                    break;
                }
            }
        }

        //主窗口特别处理
        if (windowName == typeof(MainWindow).Name)
        {
            MainWindow mainWindow = null;
            foreach (WindowBase w in windowStack)
            {
                if (mainWindow == null && w is MainWindow && !w.IsDestoryed)
                {
                    mainWindow = w as MainWindow;
                }
                else if (!w.IsDestoryed)
                {
                    w.destoryWindow();
                }
            }
            windowStack.Clear();

            if (mainWindow != null)
            {
                windowStack.Push(mainWindow);
                mainWindow.restoreWindow();
                if (onWindowAwake != null)
                {
                    onWindowAwake(mainWindow as WindowBase);
                }
                return;
            }
        }


        string perfabName = windowName;

        perfabName = perfabName.Substring(0, 1).ToLower() + perfabName.Substring(1);

        if (ResourcesManager.Instance.allowLoadFromRes)
        {
            GameManager.Instance.StartCoroutine(Utils.DelayRun(
                                                    () =>
            {
                passObj tmp = MonoBase.CreateNGUIObj("UI/" + perfabName);
                OnWindowLoaded(windowName, tmp, onWindowAwake, isDialog);

                dealWithOldWindow(oldWindow, closeOld, hideOld);
            }, 0.1f));
        }
        else
        {
            ResourcesManager.Instance.cacheData("UI/" + perfabName, (List <ResourcesData> cacheList) =>
            {
                passObj tmp = MonoBase.CreateNGUIObj("UI/" + perfabName);
//				tmp.data.ResourcesBundle.Unload(false);
                OnWindowLoaded(windowName, tmp, onWindowAwake, isDialog);
                dealWithOldWindow(oldWindow, closeOld, hideOld);
            }, "ui");
        }
    }