Beispiel #1
0
    public void Initialize()
    {
        m_dicLocalResData = new Dictionary <uint, CMResourceDefine.LocalResourceData>();

        m_atlas = new Dictionary <string, CMAtlas>();

        m_fonts = new Dictionary <string, CMFont>();

        m_objs = new Dictionary <string, CMObj>();

        m_texs = new Dictionary <string, CMTexture>();


        List <table.UIResourceDataBase> resList = GameTableManager.Instance.GetTableList <table.UIResourceDataBase>();

        if (null != resList)
        {
            table.UIResourceDataBase           db        = null;
            CMResourceDefine.LocalResourceData localData = null;
            for (int i = 0, max = resList.Count; i < max; i++)
            {
                db        = resList[i];
                localData = CMResourceDefine.LocalResourceData.Create(db.ID);
                m_dicLocalResData.Add(db.ID, localData);
            }
        }
    }
Beispiel #2
0
    /// <summary>
    /// 预加载
    /// </summary>
    private void DoPreLoadSceneUI()
    {
        int max = 0;

        table.UIResourceDataBase tempRes = null;
        //1、获取预加载资源列表
        List <uint> needPreLoadRes = new List <uint>();
        List <table.UIResourceDataBase> resList = GameTableManager.Instance.GetTableList <table.UIResourceDataBase>();

        if (null != resList)
        {
            for (int i = 0, maxR = resList.Count; i < maxR; i++)
            {
                tempRes = resList[i];
                if (IsPreLoadMaskMatch(tempRes.resPreloadMask))
                {
                    needPreLoadRes.Add(tempRes.ID);
                }
            }
            max = needPreLoadRes.Count;
        }
        //取消预加载
        //max = 0;
        //2、执行预加载
        if (max == 0)
        {
            OnResPreLoad(1f);
            return;
        }
        int            loadCount = 0;
        AssetLoadFinsh callBack  = (resObj, param1, param2, parm3) =>
        {
            uint resID = 0;
            if (null != param1 && param1 is uint)
            {
                resID = (uint)param1;
                if (needPreLoadRes.Contains(resID))
                {
                    loadCount++;
                    OnResPreLoad((float)loadCount / max);
                }
            }
            if (null == resObj)
            {
                Engine.Utility.Log.Error("UIManager->Preload AssetError ResID:{0}", resID);
            }
        };

        for (int i = 0; i < max; i++)
        {
            tempRes = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(needPreLoadRes[i]);
            if (null == tempRes)
            {
                callBack.Invoke(null, needPreLoadRes[i], null, null);
                continue;
            }
            DataManager.Manager <CMAssetBundleLoaderMgr>().CreateAssetAsyn(true, tempRes.assetbundlePath, tempRes.resRelativePath, callBack, tempRes.ID);
        }
    }
Beispiel #3
0
 /// <summary>
 /// 获取字体(同步)
 /// </summary>
 /// <param name="resID"></param>
 /// <returns></returns>
 public static IUIFont GetFont(uint resID)
 {
     table.UIResourceDataBase rsDb = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID);
     if (null == rsDb)
     {
         return(null);
     }
     return(DataManager.Manager <CMResourceMgr>().GetFont(rsDb.assetbundlePath, rsDb.resRelativePath, rsDb.idle2releaseTime, 10));
 }
Beispiel #4
0
 public static void ReleaseObjs(uint resID, Transform trans)
 {
     table.UIResourceDataBase db = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID);
     if (null == db)
     {
         Engine.Utility.Log.Error("UIManager->ReleaseObjs failed, assetDB not found resId =", resID);
         return;
     }
     DataManager.Manager <CMObjPoolManager>().DespawnObj(db.resRelativePath, trans);
 }
Beispiel #5
0
    //public static CMAtlas GetAtlas(AtlasID atlasID)
    //{
    //    return GetAtlas((uint)atlasID);
    //}
    #endregion

    #region Font
    /// <summary>
    ///  获取字图(异步)
    /// </summary>
    /// <param name="resID"></param>
    /// <param name="font"></param>
    /// <param name="fe"></param>
    /// <param name="param"></param>
    public static void GetFontAsyn(uint resID, ref CMResAsynSeedData <CMFont> seedData, CMResEvent <CMFont> fe, object param = null)
    {
        table.UIResourceDataBase rsDb = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID);
        if (null == rsDb)
        {
            if (null != fe)
            {
                fe.Invoke(null, param, null, null);
            }
            return;
        }

        DataManager.Manager <CMResourceMgr>().GetFontAsyn(rsDb.assetbundlePath, rsDb.resRelativePath, ref seedData, fe, rsDb.idle2releaseTime, 10, param);
    }
Beispiel #6
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="resID"></param>
    /// <param name="tsEvent"></param>
    /// <param name="param"></param>
    public void SpawnObjAsyn(uint resID, CMResEvent <Transform> tsEvent, object param1 = null, object param2 = null, object param3 = null)
    {
        table.UIResourceDataBase rsDb = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID);
        if (null == rsDb)
        {
            if (null != tsEvent)
            {
                tsEvent.Invoke(null, param1, param2, param3);
            }
            return;
        }

        CMObjPool pool = null;

        if (m_pools.TryGetValue(rsDb.resRelativePath, out pool) && pool.State != CMObjPool.CMObjPoolState.Release)
        {
            if (null != tsEvent)
            {
                tsEvent.Invoke(pool.SpawnInstance(Vector3.zero, Quaternion.identity, true), param1, param2, param3);
            }
        }
        else
        {
            if (null != pool)
            {
                pool = null;
                RemovePool(rsDb.resRelativePath);
            }
            DataManager.Manager <CMResourceMgr>().GetGameObjAsyn(rsDb.assetbundlePath, rsDb.resRelativePath, (obj, passParam1, passParam2, passParam3) =>
            {
                CMObjPool newpool = CreatePool(
                    rsDb.resRelativePath
                    , obj.GetGameObj().transform
                    , rsDb.resKeepType != 2
                    , (int)rsDb.resPreloadNum
                    , (int)rsDb.resCloneNumLimit
                    , (rsDb.releaseCullAboveMask != 0)
                    , (int)rsDb.releaseCullAboveNum
                    , (int)rsDb.resIdleKeepNum
                    , rsDb.idle2releaseTime
                    , rsDb.active2idleTime
                    , (rsDb.cloneAddScriptState == 1) ? rsDb.resName : "");
                if (null != tsEvent)
                {
                    tsEvent.Invoke(newpool.SpawnInstance(Vector3.zero, Quaternion.identity), passParam1, passParam2, passParam3);
                }
            }, param1, param2, param3);
        }
    }
Beispiel #7
0
    /// <summary>
    /// 获取贴图(异步)
    /// </summary>
    /// <param name="resID"></param>
    /// <param name="tex"></param>
    /// <param name="te"></param>
    /// <param name="param"></param>
    private static void GetTextureAsyn(uint resID, ref CMResAsynSeedData <CMTexture> seedData, CMResEvent <CMTexture> te, object param1 = null, object param2 = null, object param3 = null)
    {
        table.UIResourceDataBase rsDb = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID);
        if (null == rsDb)
        {
            if (null != te)
            {
                te.Invoke(null, param1, param2, param3);
            }
            return;
        }

        DataManager.Manager <CMResourceMgr>().GetTextureAsyn(rsDb.assetbundlePath, rsDb.resRelativePath,
                                                             ref seedData, te,
                                                             rsDb.idle2releaseTime, 10f,
                                                             param1, param2, param3);
    }
Beispiel #8
0
 /// <summary>
 /// 获取图集(异步)
 /// </summary>
 /// <param name="resID"></param>
 /// <param name="atlas"></param>
 /// <param name="ae"></param>
 /// <param name="param"></param>
 public static void GetAtlasAsyn(uint resID, ref CMResAsynSeedData <CMAtlas> seedData, CMResEvent <CMAtlas> createDlg,
                                 object param1 = null, object param2 = null, object param3 = null)
 {
     table.UIResourceDataBase rsDb = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID);
     if (null == rsDb)
     {
         if (null != createDlg)
         {
             createDlg.Invoke(null, param1, param2, param3);
         }
         return;
     }
     DataManager.Manager <CMResourceMgr>().GetAtlasAsyn(rsDb.assetbundlePath, rsDb.resRelativePath,
                                                        ref seedData, createDlg,
                                                        rsDb.idle2releaseTime, 10
                                                        , param1, param2, param3);
 }
Beispiel #9
0
    /// <summary>
    /// 获取实例(同步)
    /// </summary>
    /// <param name="abPath"></param>
    /// <param name="assetName"></param>
    public Transform SpawnObj(uint resID, bool setActive = true)
    {
        table.UIResourceDataBase rsDb = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID);
        if (null == rsDb)
        {
            return(null);
        }
        Transform ts   = null;
        CMObjPool pool = null;

        if (m_pools.TryGetValue(rsDb.resRelativePath, out pool) && pool.State != CMObjPool.CMObjPoolState.Release)
        {
            ts = pool.SpawnInstance(Vector3.zero, Quaternion.identity, setActive);
        }
        else
        {
            if (null != pool)
            {
                RemovePool(rsDb.resRelativePath);
            }
            IUIGameObj ig = DataManager.Manager <CMResourceMgr>().GetGameObj(rsDb.assetbundlePath, rsDb.resRelativePath);
            if (null == ig.GetGameObj())
            {
                Engine.Utility.Log.Error("ObjPoolManager->ig.GetGameObj() null, assetName:{0}", rsDb.resRelativePath);
                return(null);
            }
            CMObjPool newpool = CreatePool(
                rsDb.resRelativePath
                , ig.GetGameObj().transform
                , rsDb.resKeepType != 2
                , (int)rsDb.resPreloadNum
                , (int)rsDb.resCloneNumLimit
                , (rsDb.releaseCullAboveMask != 0)
                , (int)rsDb.releaseCullAboveNum
                , (int)rsDb.resIdleKeepNum
                , rsDb.idle2releaseTime
                , rsDb.active2idleTime
                , ((rsDb.cloneAddScriptState == 1) ? rsDb.resName : ""));
            ts = newpool.SpawnInstance(Vector3.zero, Quaternion.identity, setActive);
        }
        return(ts);
    }
Beispiel #10
0
 public static GameObject GetResGameObj(uint resID)
 {
     table.UIResourceDataBase resDB = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID);
     return(GetResGameObj(resDB.assetbundlePath, resDB.resRelativePath));
 }