/// <summary>
 /// 打开窗口
 /// </summary>
 /// <typeparam name="W">窗口类型</typeparam>
 /// <param name="_windowId">窗口Id</param>
 /// <param name="_onCallback">回调</param>
 /// <param name="_parameters">参数组</param>
 public void OpenWindow <W>(int _windowId, UIWindowEntityEventHandler <W> _onCallback, params object[] _parameters)
     where W : AbsUIWindowView
 {
     OpenWindow <W>(new int[1] {
         _windowId
     }, _onCallback, _parameters);
 }
Esempio n. 2
0
 /// <summary>
 /// 检测窗口实例化是否完成
 /// </summary>
 /// <typeparam name="W">窗口类型</typeparam>
 /// <param name="_hasInstanceCallback">是否有实例回调</param>
 /// <param name="_completeCallback">完成回调</param>
 /// <param name="_winCfgs">窗口配置</param>
 /// <param name="_callback">回调</param>
 /// <param name="_parameters">参数</param>
 public void CheckInstanceLoadComplete <W>(
     UIWindowHasInstanceEventHandle <W> _hasInstanceCallback,
     UIWindowCheckInstanceCompleteEventHandle <W> _completeCallback,
     XLS_Config_Table_UIWindowSetting[] _winCfgs, UIWindowEntityEventHandler <W> _callback,
     params object[] _parameters)
     where W : AbsUIWindowView
 {
     mWinCfgs             = _winCfgs;
     mHasInstanceCallback = (XLS_Config_Table_UIWindowSetting cfg) => { return(_hasInstanceCallback(cfg)); };
     mCompleteCallback    = () => { _completeCallback(_winCfgs, _callback, _parameters); };
     isRunCheck           = true;
     gameObject.SetActive(true);
     OnResetName();
 }
 /// <summary>
 /// 获得窗口
 /// </summary>
 /// <typeparam name="W">窗口类型</typeparam>
 /// <param name="_winCfgs">窗口配置</param>
 /// <param name="_callback">回调</param>
 /// <param name="_parameters">参数组</param>
 void OnGetWindow <W>(XLS_Config_Table_UIWindowSetting[] _winCfgs, UIWindowEntityEventHandler <W> _callback, params object[] _parameters)
     where W : AbsUIWindowView
 {
     W[] wins = new W[0];
     if (_winCfgs != null && _winCfgs.Length > 0)
     {
         wins = new W[_winCfgs.Length];
         for (int i = 0; i < _winCfgs.Length; i++)
         {
             if (mWindowHolderMaping.ContainsKey(_winCfgs[i].id))
             {
                 wins[i] = (W)mWindowHolderMaping[_winCfgs[i].id].window;
             }
         }
     }
     _callback(wins, _parameters);
 }
 /// <summary>
 /// 打开窗口
 /// </summary>
 /// <typeparam name="W">窗口类型</typeparam>
 /// <param name="_winCfgs">窗口配置</param>
 /// <param name="_callback">回调</param>
 /// <param name="_parameters">参数组</param>
 public void OnOpenWindow <W>(XLS_Config_Table_UIWindowSetting[] _winCfgs, UIWindowEntityEventHandler <W> _callback, params object[] _parameters)
     where W : AbsUIWindowView
 {
     OnCreateWindowHolder(_winCfgs);
     OnSettingWindowSerialize(_winCfgs);
     foreach (XLS_Config_Table_UIWindowSetting cfg in _winCfgs)
     {
         mWindowHolderMaping[cfg.id].SetTargetActive(true);
     }
     OnLoadWindowInMemory(_winCfgs, true, (cfgs, args) =>
     {
         Dictionary <int, IAssetBundleOutput> memoryAssetResult = (Dictionary <int, IAssetBundleOutput>)args[0];
         object[] memoryArgs = (object[])args[1];
         UIWindowEntityEventHandler <W> call = (UIWindowEntityEventHandler <W>)memoryArgs[0];
         object[] extArgs = (object[])memoryArgs[1];
         OnInstanceWindow(cfgs, memoryAssetResult, call, extArgs);
     }, _callback, _parameters);
 }
    /// <summary>
    /// 检测窗口实例化是否完成
    /// </summary>
    /// <typeparam name="W">窗口类型</typeparam>
    /// <param name="_winCfgs">窗口配置</param>
    /// <param name="_callback">回调</param>
    /// <param name="_parameters">参数</param>
    void OnCheckInstanceComplete <W>(XLS_Config_Table_UIWindowSetting[] _winCfgs, UIWindowEntityEventHandler <W> _callback, params object[] _parameters)
        where W : AbsUIWindowView
    {
        List <int> winIds = new List <int>();

        foreach (XLS_Config_Table_UIWindowSetting cfg in _winCfgs)
        {
            mWindowHolderMaping[cfg.id].ToggleSiblingIndex();
            if (!winIds.Contains(cfg.id))
            {
                winIds.Add(cfg.id);
            }
        }

        W[] windows = new W[winIds.Count];
        for (int i = 0; i < winIds.Count; i++)
        {
            mWindowHolderMaping[winIds[i]].ToggleActive();
            windows[i] = (W)mWindowHolderMaping[winIds[i]].window;
        }

        _callback(windows, _parameters);
        OnOpenWindowEventHandler?.Invoke(windows, _parameters);
    }
    /// <summary>
    /// 检测窗口实例化是否完成
    /// </summary>
    /// <typeparam name="W">窗口类型</typeparam>
    /// <param name="_winCfgs">窗口配置</param>
    /// <param name="_callback">回调</param>
    /// <param name="_parameters">参数</param>
    void OnCheckInstance <W>(XLS_Config_Table_UIWindowSetting[] _winCfgs, UIWindowEntityEventHandler <W> _callback, params object[] _parameters)
        where W : AbsUIWindowView
    {
        bool isRunCheck = false;

        foreach (UIWindowCheckInstance check in mUIWindowCheckInstanceMaping)
        {
            isRunCheck |= !check.isRunCheck;
            if (isRunCheck)
            {
                check.CheckInstanceLoadComplete <W>(OnUIWindowHasInstance <W>, OnCheckInstanceComplete, _winCfgs, _callback, _parameters);
                break;
            }
        }
        if (!isRunCheck)
        {
            GameObject go = new GameObject();
            go.transform.SetParent(gameObject.transform);
            go.hideFlags = gameObject.hideFlags;
            UIWindowCheckInstance check = go.AddDynamicComponent <UIWindowCheckInstance>();
            check.CheckInstanceLoadComplete <W>(OnUIWindowHasInstance <W>, OnCheckInstanceComplete, _winCfgs, _callback, _parameters);
            mUIWindowCheckInstanceMaping.Add(check);
        }
    }
 /// <summary>
 /// 打开窗口
 /// </summary>
 /// <typeparam name="W">窗口类型</typeparam>
 /// <param name="_folderIds">文件夹id组</param>
 /// <param name="_fileIds">文件id组</param>
 /// <param name="_onCallback">回调</param>
 /// <param name="_parameters">参数组</param>
 public void OpenWindow <W>(int[] _folderIds, int[] _fileIds, UIWindowEntityEventHandler <W> _onCallback, params object[] _parameters)
     where W : AbsUIWindowView
 {
     OpenWindow <W>(OnGetWindowSetting(_folderIds, _fileIds), _onCallback, _parameters);
 }
 /// <summary>
 /// 打开窗口
 /// </summary>
 /// <param name="_folderIds">文件夹id组</param>
 /// <param name="_fileIds">文件id组</param>
 /// <param name="_onCallback">回调</param>
 /// <param name="_parameters">参数组</param>
 public void OpenWindow(int[] _folderIds, int[] _fileIds, UIWindowEntityEventHandler <AbsUIWindowView> _onCallback, params object[] _parameters)
 {
     OpenWindow <AbsUIWindowView>(_folderIds, _fileIds, _onCallback, _parameters);
 }
 /// <summary>
 /// 打开窗口
 /// </summary>
 /// <param name="_windowId">窗口Id</param>
 /// <param name="_onCallback">回调</param>
 /// <param name="_parameters">参数组</param>
 public void OpenWindow(int _windowId, UIWindowEntityEventHandler <AbsUIWindowView> _onCallback, params object[] _parameters)
 {
     OpenWindow <AbsUIWindowView>(_windowId, _onCallback, _parameters);
 }
Esempio n. 10
0
 /// <summary>
 /// 关闭窗口
 /// </summary>
 /// <typeparam name="W">窗口类型</typeparam>
 /// <param name="_folderId">文件夹id</param>
 /// <param name="_fileId">文件id</param>
 /// <param name="_onCallback">回调</param>
 /// <param name="_parameters">参数组</param>
 public void CloseWindow <W>(int _folderId, int _fileId, UIWindowEntityEventHandler <W> _onCallback, params object[] _parameters)
     where W : AbsUIWindowView
 {
     CloseWindow <W>(OnGetWindowSetting(_folderId, _fileId), _onCallback, _parameters);
 }
Esempio n. 11
0
 /// <summary>
 /// 关闭窗口
 /// </summary>
 /// <param name="_folderId">文件夹id</param>
 /// <param name="_fileId">文件id</param>
 /// <param name="_onCallback">回调</param>
 /// <param name="_parameters">参数组</param>
 public void CloseWindow(int _folderId, int _fileId, UIWindowEntityEventHandler <AbsUIWindowView> _onCallback, params object[] _parameters)
 {
     CloseWindow <AbsUIWindowView>(_folderId, _fileId, _onCallback, _parameters);
 }
Esempio n. 12
0
 /// <summary>
 /// 关闭窗口
 /// </summary>
 /// <typeparam name="W">窗口类型</typeparam>
 /// <param name="_windowIds">窗口Id组</param>
 /// <param name="_onCallback">回调</param>
 /// <param name="_parameters">参数组</param>
 public void CloseWindow <W>(int[] _windowIds, UIWindowEntityEventHandler <W> _onCallback, params object[] _parameters)
     where W : AbsUIWindowView
 {
     OnCloseWindow <W>(OnGetWindowSetting(_windowIds), _onCallback, _parameters);
 }
Esempio n. 13
0
 /// <summary>
 /// 关闭窗口
 /// </summary>
 /// <param name="_windowIds">窗口Id组</param>
 /// <param name="_onCallback">回调</param>
 /// <param name="_parameters">参数组</param>
 public void CloseWindow(int[] _windowIds, UIWindowEntityEventHandler <AbsUIWindowView> _onCallback, params object[] _parameters)
 {
     CloseWindow <AbsUIWindowView>(_windowIds, _onCallback, _parameters);
 }
    /// <summary>
    /// 关闭窗口
    /// </summary>
    /// <typeparam name="W">窗口类型</typeparam>
    /// <param name="_winCfgs">窗口配置</param>
    /// <param name="_callback">回调</param>
    /// <param name="_parameters">参数组</param>
    void OnCloseWindow <W>(XLS_Config_Table_UIWindowSetting[] _winCfgs, UIWindowEntityEventHandler <W> _callback, params object[] _parameters)
        where W : AbsUIWindowView
    {
        List <int>            closeWinIds = new List <int>();
        Dictionary <int, int> sameLayerLessThenSiblingIndex = new Dictionary <int, int>();
        List <int>            lessThenSiblingIndex          = new List <int>();

        foreach (XLS_Config_Table_UIWindowSetting cfg in _winCfgs)
        {
            if (mWindowHolderMaping.ContainsKey(cfg.id))
            {
                mWindowHolderMaping[cfg.id].SetTargetActive(false);
                if (!closeWinIds.Contains(cfg.id))
                {
                    closeWinIds.Add(cfg.id);
                }
                #region 统计需要隐藏的各层级的最大SiblingIndex
                switch (cfg.winCloseMode)
                {
                case enUIWindowCloseMode.WhenCloseHiddenSameLayerAndMoreThanSiblingIndex:
                    if (!sameLayerLessThenSiblingIndex.ContainsKey(cfg.layer))
                    {
                        sameLayerLessThenSiblingIndex.Add(cfg.layer, mWindowHolderMaping[cfg.id].windowSiblingIndex);
                    }
                    else
                    {
                        sameLayerLessThenSiblingIndex[cfg.layer] = Mathf.Max(sameLayerLessThenSiblingIndex[cfg.layer], mWindowHolderMaping[cfg.id].windowSiblingIndex);
                    }
                    break;

                case enUIWindowCloseMode.WhenCloseHiddenMoreThanSiblingIndex:
                    if (!lessThenSiblingIndex.Contains(mWindowHolderMaping[cfg.id].windowSiblingIndex))
                    {
                        lessThenSiblingIndex.Add(mWindowHolderMaping[cfg.id].windowSiblingIndex);
                    }
                    else
                    {
                        lessThenSiblingIndex[0] = Mathf.Max(lessThenSiblingIndex[0], mWindowHolderMaping[cfg.id].windowSiblingIndex);
                    }
                    break;
                }
                #endregion
            }
        }

        #region 设置要隐藏的窗口ID
        foreach (KeyValuePair <int, UIWindowHolder> holder in mWindowHolderMaping)
        {
            if (
                sameLayerLessThenSiblingIndex.ContainsKey(holder.Value.winCfg.layer) &&
                holder.Value.windowSiblingIndex < sameLayerLessThenSiblingIndex[holder.Value.winCfg.layer]
                )
            {
                holder.Value.SetTargetActive(false);
            }
            if (
                lessThenSiblingIndex.Count > 0 &&
                holder.Value.windowSiblingIndex < lessThenSiblingIndex[0]
                )
            {
                holder.Value.SetTargetActive(false);
            }
        }
        #endregion

        List <int> autoOpenWindows = OnGetWindowSerialize().GetAutoRestoreSequence(closeWinIds);
        foreach (int id in autoOpenWindows)
        {
            if (mWindowHolderMaping.ContainsKey(id))
            {
                mWindowHolderMaping[id].SetTargetActive(true);
            }
        }

        foreach (UIWindowHolder holder in mWindowHolderMaping.Values)
        {
            holder.ToggleActive();
        }

        W[] windows = new W[closeWinIds.Count];
        for (int i = 0; i < closeWinIds.Count; i++)
        {
            windows[i] = (W)mWindowHolderMaping[closeWinIds[i]].window;
        }
        _callback?.Invoke(windows, _parameters);
        OnCloseWindowEventHandler?.Invoke(windows, _parameters);
    }
 /// <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);
         }
     }
 }