Example #1
0
        //************************************
        // 打开单个指定面板(不包含子面板)
        //************************************
        public void ShowWindow(string winName, params object[] param)
        {
            if (MainCtrl == null)
            {
                return;
            }
            if (CheckWindowDownloaded(winName) == false)
            {
                return;
            }

            if (ModalWindow != null && ModalWindow.IsShow)
            {
                GameDebug.LogWarning(string.Format("当前有模态窗口{0}打开,所以{1}无法打开", ModalWindow.mWndName, winName));
            }

            if (loadingWindows.ContainsKey(winName))
            {
                GameDebug.Log("当前窗口正在加载中:" + winName);
                if (needCloseWindowsAfterResLoad.Contains(winName))
                {
                    needCloseWindowsAfterResLoad.Remove(winName);
                    SetWindowDynOrder(GetExistingWindow(winName));
                }
                return;
            }

            string info = string.Format("show window: {0}", winName);

            BuglyAgent.PrintLog(LogSeverity.LogInfo, info);

            UIBaseWindow baseWin = null;

            if (mWindows.TryGetValue(winName, out baseWin))
            {
                if (baseWin.WinState == WinowState.ResLoadDone)
                {
                    baseWin.ShowParam = param;
                    if (MainCtrl != null)
                    {
                        MainCtrl.CreateAndCheckMoneyBar(baseWin, baseWin.mUIObject, winName, baseWin.CurrencyScale,
                                                        false);
                        //创建概率公示按钮
                        MainCtrl.CreateAndCheckProbabilityBtn(baseWin, baseWin.mUIObject, winName, baseWin.CurrencyScale, false);
                        //创建七日退款按钮
                        MainCtrl.CreateAndCheckRefundBtn(baseWin, baseWin.mUIObject, winName, baseWin.CurrencyScale, false);
                    }

                    baseWin.Show();
                }
            }
            else
            {
#if !DISABLE_LUA
                string lua_script = "";
                string path       = UIHelper.GetLuaWindowPath(winName);
                if (path.CompareTo(string.Empty) == 0)
                {
                    lua_script = string.Format("newUI.{0}", winName);
                }
                else
                {
                    lua_script = string.Format("newUI.{0}.{1}", path, winName);
                }

                //Debug.Log(lua_script);

                if (IsLuaScriptExist(lua_script))
                {
                    baseWin = new UILuaBaseWindow(winName, lua_script);
                }
                else
#endif
                {
                    System.Type t = System.Type.GetType("xc.ui.ugui." + winName);

                    if (t != null)
                    {
                        if (t.IsSubclassOf(typeof(UIBaseWindow)))
                        {
                            baseWin = (UIBaseWindow)System.Activator.CreateInstance(t);
                        }
                        else
                        {
                            GameDebug.Log("use reflection create ugui panel :" + winName);
                            FieldInfo prefabNameField = t.GetField("mWndName", BindingFlags.FlattenHierarchy | BindingFlags.Static | BindingFlags.Public);
                            if (prefabNameField == null)
                            {
                                Debug.LogError(string.Format("the type {0} should cantains a static string field named mPrefabName", t));
                                return;
                            }
                            string prefabName = prefabNameField.GetValue(null) as string;
                            baseWin = new UIBaseWindow(prefabName);
                        }
                    }
                }
                if (baseWin == null)
                {
                    Debug.LogError("UIManager.CreateWindow error:" + winName);
                    return;
                }

                if (baseWin.WinState == WinowState.ResNoLoad)
                {
                    ///这里如果面板时动态的,则预先计算好动态层级
                    this.SetWindowDynOrder(baseWin);

                    baseWin.ShowParam = param;
                    mWindows.Add(winName, baseWin);
                    baseWin.WinState = WinowState.ResLoading;
                    loadingWindows.Add(winName, true);
                    MainCtrl.StartCoroutine(MainCtrl.CreateWindowFromPrefab(baseWin.mWndName, baseWin));
                }
            }

            if (baseWin != null)
            {
                baseWin.IsSystemWindow = false;
            }

            // 如果之前已经设置为true,而在Pop窗口的时候会又调用ShowWindow
            // 此处需要判断下之前是否设置过
            if (!mOpenedSysWindow.ContainsKey(winName))
            {
                mOpenedSysWindow[winName] = false;
            }
        }
Example #2
0
        /// <summary>
        /// 面板资源完成的回调
        /// </summary>
        /// <param name="args"></param>
        private void OnResourceLoadDone(xc.ClientEventBaseArgs args)
        {
            if (args.Arg == null)
            {
                return;
            }
            UIBaseWindow baseWin = (UIBaseWindow)args.Arg;

            //移除加载窗口
            loadingWindows.Remove(baseWin.mWndName);

            //如果资源加载发现字典没有改面板表面是野窗口
            if (mWindows.ContainsValue(baseWin) == false)
            {
                // 如果在字典中找不到,则说明之前进行了销毁操作,不需要再次调用Destroy @fix by raorui
                //baseWin.Destroy();
                DestroyWindowGameObject((GameObject)baseWin.mUIObject);

                return;
            }
            //断线重连中直接销毁窗口
            if (NetReconnect.Instance.IsReconnect && baseWin.mWndName != "UIAutoConnectWindow")
            {
                DestroyWindowGameObject((GameObject)baseWin.mUIObject);
                if (needCloseWindowsAfterResLoad.Contains(baseWin.mWndName))
                {
                    needCloseWindowsAfterResLoad.Remove(baseWin.mWndName);
                }
                if (mWindows.ContainsKey(baseWin.mWndName))
                {
                    mWindows.Remove(baseWin.mWndName);
                }
                return;
            }
            //************************************
            // 资源加载完开始初始化数据调用InitData 跟show同时调整Zorder
            //************************************
            //AddZOrder(baseWin);

            //var go = baseWin.mUIObject;
            //go.SetActive(true);
            baseWin.InitData();
            if (ModalWindow != null && ModalWindow.mWndName != baseWin.mWndName)
            {
                return;
            }
            if (baseWin.IsModal)//模態窗口衹能唯一如果未銷毀不會打開新的模態
            {
                ModalWindow = baseWin;
            }
            baseWin.Show();

            for (int i = 0; i < needCloseWindowsAfterResLoad.Count; i++)
            {
                if (baseWin.mWndName == needCloseWindowsAfterResLoad[i])
                {
                    needCloseWindowsAfterResLoad.RemoveAt(i);
                    CloseWindow(baseWin.mWndName);
                    return;
                }
            }
        }