Beispiel #1
0
        private void AfterLoadAssetBundle(Type fairyGUIWindowType, FairyGUIBaseWindow bw, FairyGUIWindowInfo fairyGuiWindowInfo, object sourceData)
        {
            string   windowName = fairyGUIWindowType.Name;
            string   typeName   = fairyGUIWindowType.FullName;
            Assembly assembly   = Assembly.LoadFrom(fairyGUIWindowType.Assembly.Location);
            Type     type       = assembly.GetType(typeName);

            if (type == null)
            {
                Debug.LogError("导入的" + fairyGuiWindowInfo.packageName + "包,并没有为其创建对应脚本文件,请创建" + windowName + "脚本并继承自FairyGUIBaseWindow。");
                return;
            }
            object obj = type.Assembly.CreateInstance(typeName);

            bw = obj as FairyGUIBaseWindow;
            bw.Copy(fairyGuiWindowInfo);
            bw.AssetLoaded = true;
            bw.Name        = windowName;
            GComponent view = UIPackage.CreateObject(bw.FairyGuiWindowInfo.packageName, windowName).asCom;

            bw.SetWindowView(view);
            _windowList.Add(bw);
            bw.Init();
            AfterOpenWindow(bw, sourceData);
        }
Beispiel #2
0
        /// <summary>
        /// 销毁所有窗体
        /// </summary>
        private void DestroyAllWindow()
        {
            var bw = _showWindowList.First;
            FairyGUIBaseWindow view = null;

            while (bw != null)
            {
                view = bw.Value;
                view.OnClose();
                view.Hide();
                bw = bw.Next;
            }
            _showWindowList.Clear();
            _fairyGUIPackageManager.RemoveAllPackage();
        }
Beispiel #3
0
        protected void AfterOpenWindow(FairyGUIBaseWindow bw, object sourceData)
        {
            if (!bw.AssetLoaded)
            {
                _fairyGUIPackageManager.ReloadAssets(bw.FairyGuiWindowInfo.packageName);
            }

            if (!bw.HasOpen)
            {
                _showWindowList.AddLast(bw);
                bw.HasOpen = true;
                bw.OnOpen(sourceData);
                bw.Show();
            }
            else
            {
                bw.OnResume();
            }
        }
Beispiel #4
0
        /// <summary>
        /// 暂时隐藏窗体
        /// </summary>
        /// <param name="FairyGUIWindowName">窗体类型枚举</param>
        public void HideWindow(Type FairyGUIWindowType, bool isHide = true, bool unLoadAssets = false)
        {
            FairyGUIBaseWindow bw = GetFairyGUIBaseWindow(FairyGUIWindowType);

            if (bw == null)
            {
                Debug.LogError("要关闭的不是窗体,请检查HideWindow函数的参数是否为FairyGUIBaseWindow的子类并且已在注册表注册!");
                return;
            }

            bw = null;
            foreach (var view in _showWindowList)
            {
                if (view.Name == FairyGUIWindowType.Name)
                {
                    bw = view;
                    break;
                }
            }

            if (bw != null)
            {
                if (isHide)
                {
                    bw.OnClose();
                    bw.Hide();
                    bw.HasOpen = false;
                    _showWindowList.Remove(bw);
                }
                else
                {
                    bw.OnPause();
                    unLoadAssets = false;
                }

                if (unLoadAssets)
                {
                    _fairyGUIPackageManager.UnloadAssets(bw.FairyGuiWindowInfo.packageName);
                    bw.AssetLoaded = false;
                }
            }
        }