/// <summary>
    /// 创建窗口SiblingIndex占位符
    /// </summary>
    /// <param name="_winCfg">窗口配置</param>
    /// <returns>占位符</returns>
    public RectTransform CreateWindowSiblingIndexHolder(XLS_Config_Table_UIWindowSetting _winCfg)
    {
        int layer = _winCfg.layer;

        if (!mLayerMaping.ContainsKey(layer))
        {
            int siblingIndex = 0;
            foreach (KeyValuePair <int, RectTransform> key in mLayerMaping)
            {
                if (key.Key < layer)
                {
                    siblingIndex = Mathf.Max(siblingIndex, key.Value.GetSiblingIndex() + 1);
                }
            }
            GameObject go = new GameObject(mLayerNameMaping[_winCfg.layer]);
            go.layer = gameObject.layer;
            RectTransform rt = go.AddComponent <RectTransform>();
            rt.SetParent(gameObject.transform, false);
            rt.SetSiblingIndex(siblingIndex);
            rt.anchorMin        = Vector2.zero;
            rt.anchorMax        = Vector2.one;
            rt.anchoredPosition = Vector2.zero;
            rt.sizeDelta        = Vector2.zero;
            mLayerMaping.Add(layer, rt);
        }
        return(mLayerMaping[layer]);
    }
 /// <summary>
 /// 实例化窗口
 /// </summary>
 /// <typeparam name="W">窗口类型</typeparam>
 /// <param name="_winCfgs">窗口配置</param>
 /// <param name="_memoryAssetResult">内存结果</param>
 /// <param name="_callback">回调</param>
 /// <param name="_parameters">参数</param>
 void OnInstanceWindow <W>(XLS_Config_Table_UIWindowSetting[] _winCfgs, Dictionary <int, IAssetBundleOutput> _memoryAssetResult, UIWindowEntityEventHandler <W> _callback, params object[] _parameters)
     where W : AbsUIWindowView
 {
     OnCheckInstance <W>(_winCfgs, _callback, _parameters);
     //创建实例
     foreach (XLS_Config_Table_UIWindowSetting cfg in _winCfgs)
     {
         if (!mWindowHolderMaping[cfg.id].isMarkLoadedWindowInstace)
         {
             mWindowHolderMaping[cfg.id].MarkLoadedWindowInstace();
             _memoryAssetResult[cfg.id].Instantiate <GameObject>(false, (result) =>
             {
                 XLS_Config_Table_UIWindowSetting winCfg = (XLS_Config_Table_UIWindowSetting)result.extraParemeter[0];
                 GameObject prefab = (GameObject)result.asset;
                 if (prefab != null)
                 {
                     prefab.name = winCfg.name + "[" + winCfg.id + "]";
                     Type type   = Type.GetType(winCfg.name);
                     W window    = default(W);
                     if (type == null)
                     {
                         window = (W)(AbsUIWindowView)prefab.AddDynamicComponent <UIXLuaWindow>();
                     }
                     else
                     {
                         window = prefab.AddDynamicComponent <W>(type);
                     }
                     window.SetConfig(winCfg);
                     window.OnCloseWindow += Window_OnCloseWindow;
                     mWindowHolderMaping[winCfg.id].SetWindow(window);
                 }
             }, cfg, _winCfgs, _callback, _parameters);
         }
     }
 }
    /// <summary>
    /// 加载窗口到内存
    /// </summary>
    /// <param name="_winCfgs">窗口配置</param>
    /// <param name="_isInstance">是否实例化窗口</param>
    /// <param name="_callback">回调</param>
    /// <param name="_parameters">参数组</param>
    void OnLoadWindowInMemory(XLS_Config_Table_UIWindowSetting[] _winCfgs, bool _isInstance, UIWindowSettingEventHandler _callback, params object[] _parameters)
    {
        Dictionary <int, IAssetBundleOutput> outputMaping = new Dictionary <int, IAssetBundleOutput>();

        foreach (XLS_Config_Table_UIWindowSetting cfg in _winCfgs)
        {
            StrayFogGamePools.assetBundleManager.LoadAssetInMemory(cfg.fileId, cfg.folderId,
                                                                   (output) =>
            {
                bool isInstance = (bool)output.input.extraParameter[0];
                XLS_Config_Table_UIWindowSetting winCfg        = (XLS_Config_Table_UIWindowSetting)output.input.extraParameter[1];
                Dictionary <int, IAssetBundleOutput> winMemory = (Dictionary <int, IAssetBundleOutput>)output.input.extraParameter[2];
                XLS_Config_Table_UIWindowSetting[] cfgs        = (XLS_Config_Table_UIWindowSetting[])output.input.extraParameter[3];
                #region 添加内存映射
                if (!winMemory.ContainsKey(winCfg.id))
                {
                    winMemory.Add(winCfg.id, output);
                }
                else
                {
                    winMemory[winCfg.id] = output;
                }
                #endregion

                bool isAllLoad = true;
                #region 是否所有配置窗口已加载到内存
                if (cfgs != null && cfgs.Length > 0)
                {
                    foreach (XLS_Config_Table_UIWindowSetting c in cfgs)
                    {
                        isAllLoad &= winMemory.ContainsKey(c.id);
                    }
                }
                #endregion

                if (isAllLoad)
                {
                    #region 内存加载完成回调
                    if (isInstance)
                    {
                        UIWindowSettingEventHandler callback = (UIWindowSettingEventHandler)output.input.extraParameter[4];
                        object[] extralParameter             = (object[])output.input.extraParameter[5];
                        callback(cfgs, winMemory, extralParameter);
                    }
                    else
                    {
                        UIWindowSettingEventHandler callback = (UIWindowSettingEventHandler)output.input.extraParameter[4];
                        object[] extralParameter             = (object[])output.input.extraParameter[5];
                        callback(cfgs, extralParameter);
                    }
                    #endregion
                }
            }, _isInstance, cfg, outputMaping, _winCfgs, _callback, _parameters);
        }
    }
Exemple #4
0
 /// <summary>
 /// 获得窗口设定
 /// </summary>
 /// <param name="_winIds">窗口Id组</param>
 /// <returns>窗口设定</returns>
 XLS_Config_Table_UIWindowSetting[] OnGetWindowSetting(params int[] _winIds)
 {
     XLS_Config_Table_UIWindowSetting[] result = null;
     if (_winIds != null && _winIds.Length > 0)
     {
         result = new XLS_Config_Table_UIWindowSetting[_winIds.Length];
         for (int i = 0; i < _winIds.Length; i++)
         {
             if (mWindowSettingMaping.ContainsKey(_winIds[i]))
             {
                 result[i] = mWindowSettingMaping[_winIds[i]];
             }
             else
             {
                 Debug.LogErrorFormat("Can't found WindowId【{0}】", _winIds[i]);
             }
         }
     }
     if (result == null)
     {
         result = new XLS_Config_Table_UIWindowSetting[0];
     }
     return(result);
 }
Exemple #5
0
 /// <summary>
 /// 设置设定
 /// </summary>
 /// <param name="_cfg">设定</param>
 public void SetConfig(XLS_Config_Table_UIWindowSetting _cfg)
 {
     config = _cfg;
 }
Exemple #6
0
 /// <summary>
 /// 设置窗口配置
 /// </summary>
 /// <param name="_winCfg">窗口配置</param>
 public void SetWindowConfig(XLS_Config_Table_UIWindowSetting _winCfg)
 {
     winCfg = _winCfg;
 }
 /// <summary>
 /// 窗口是否有实例
 /// </summary>
 /// <param name="_winCfg">窗口配置</param>
 /// <returns>true:有实例,false:无实例</returns>
 bool OnUIWindowHasInstance <W>(XLS_Config_Table_UIWindowSetting _winCfg)
     where W : AbsUIWindowView
 {
     return(mWindowHolderMaping[_winCfg.id].HasWindowInstance <W>());
 }