Exemple #1
0
    private static void UpdateLoadingSkin()
    {
        if (m_AsyncLoadSkinRequestTable.Count <= 0)
        {
            return;
        }
        LoadCompleteList.Clear();
        foreach (KeyValuePair <int, SkinAsyncLoadingObj> var in m_AsyncLoadSkinRequestTable)
        {
            Skin sk = null;
            if (!m_SkinMap.TryGetValue(var.Key, out sk))
            {
                continue;
            }
            LoadCompleteList.Add(var.Key);
        }

        foreach (int id in LoadCompleteList)
        {
            SkinAsyncLoadingObj var = null;
            m_AsyncLoadSkinRequestTable.TryGetValue(id, out var);
            m_AsyncLoadSkinRequestTable.Remove(id);

            Skin sk = null;
            m_SkinMap.TryGetValue(id, out sk);
            sk.AddRef(var.ReferenceCount);
            foreach (System.Action <Skin> callback in var.callbackList)
            {
                callback(sk);
            }
        }
    }
Exemple #2
0
    public static void DeleteSkinAsync(int SkinID, System.Action <Skin> CallBack, bool NotReleaseFromCache = false)
    {
        Skin sk = null;
        SkinAsyncLoadingObj obj = null;

        m_AsyncLoadSkinRequestTable.TryGetValue(SkinID, out obj);
        //首先看是不是已经加载出来了
        if (m_SkinMap.TryGetValue(SkinID, out sk))
        {
            DeleteSkinAsync(ref sk, CallBack, NotReleaseFromCache);
        }
        //没有加载出来
        else
        {
            if (null != obj)
            {
                int refCount = --obj.ReferenceCount;
                if (refCount <= 0)
                {
                    RemoveAllCallBack(SkinID);
                    AssetBundleManager.DeleteAssetsAsync(ref obj.loadingResNode, ResLoadCallBack, ImmdieateUnLoadSkin);
                }
                else
                {
                    RemoveCallBack(SkinID, CallBack);
                }
            }
        }
    }
Exemple #3
0
    /// <summary>
    /// 加载模型
    /// </summary>
    /// <param name="SkinID">模型ID</param>
    /// <param name="strPrefabPath">模型路径</param>
    /// <returns>是否成功</returns>
    private static Skin LoadSkinSynchronous(SkinModelInfo info)
    {
        Skin reslut = null;

        //已经有这个皮肤,不加载了
        if (m_SkinMap.TryGetValue(info.nSkinID, out reslut))
        {
            return(reslut);
        }


        ResNode obj = AssetBundleManager.GetAssets(AssetType.Asset_Prefab, info.strPatch);

        if (null != obj)
        {
            reslut = BuildSkin(info, obj, obj.isAsync);
            if (reslut != null)
            {
                reslut.AddRef();
                SkinAsyncLoadingObj asyncObj = null;
                if (m_AsyncLoadSkinRequestTable.TryGetValue(info.nSkinID, out asyncObj))
                {
                    reslut.AddRef(asyncObj.ReferenceCount);
                    asyncObj.ReferenceCount = 0;
                }
            }
            return(reslut);
        }
        else
        {
            obj = null;
            Trace.Warning("加载皮肤模型失败,ID:" + info.nSkinID + ",路径:" + info.strPatch + ",请[--策划--]检查配置");
            return(reslut);
        }
    }
Exemple #4
0
    static void RemoveAllCallBack(int nSkinID)
    {
        SkinAsyncLoadingObj obj = null;

        if (m_AsyncLoadSkinRequestTable.TryGetValue(nSkinID, out obj))
        {
            m_AsyncLoadSkinRequestTable.Remove(nSkinID);
        }
    }
Exemple #5
0
    static void RemoveCallBack(int nSkinID, System.Action <Skin> CallBack)
    {
        SkinAsyncLoadingObj obj = null;

        if (m_AsyncLoadSkinRequestTable.TryGetValue(nSkinID, out obj))
        {
            for (int i = 0; i < obj.callbackList.Count; i++)
            {
                if (obj.callbackList[i] == CallBack)
                {
                    obj.callbackList.RemoveAt(i);
                    break;
                }
            }
        }
    }
Exemple #6
0
    public static void DeleteSkinAsync(ref Skin sk, System.Action <Skin> CallBack, bool NotReleaseFromCache = false)
    {
        if (null == sk)
        {
            return;
        }
        SkinAsyncLoadingObj obj = null;
        int SkinID = sk.nSkinID;

        m_AsyncLoadSkinRequestTable.TryGetValue(SkinID, out obj);

        int refcount = sk.Release();

        if (refcount <= 0)
        {
            UnLoadSkin(ref sk, NotReleaseFromCache);
            RemoveAllCallBack(SkinID);
        }
        else
        {
            RemoveCallBack(SkinID, CallBack);
        }
    }
Exemple #7
0
    /// <summary>
    /// 异步取得Skin
    /// </summary>
    /// <param name="SkinID"></param>
    /// <param name="CallBack"></param>
    /// <returns></returns>
    private static bool GetSkinAsyncImpl(int SkinID, System.Action <Skin> CallBack, AssetLoadPriority priority = AssetLoadPriority.Priority_Normal)
    {
        SkinModelInfo info = null;

        if (!m_SkinConfigMap.TryGetValue(SkinID, out info))
        {
            Debug.LogWarning("找不到皮肤配置,ID:" + SkinID);
            return(false);
        }
        Skin sk = null;
        SkinAsyncLoadingObj loadingObj = null;

        sk = GetSkinFromCache(SkinID);
        if (sk != null)
        {
            sk.AddRef();
            m_SkinMap.Add(sk.nSkinID, sk);

            if (m_AsyncLoadSkinRequestTable.TryGetValue(SkinID, out loadingObj))
            {
                loadingObj.callbackList.Add(CallBack);
            }
            else
            {
                loadingObj = new SkinAsyncLoadingObj();
                loadingObj.callbackList.Add(CallBack);
                m_AsyncLoadSkinRequestTable.Add(SkinID, loadingObj);
            }

            return(true);
        }


        if (m_SkinMap.TryGetValue(SkinID, out sk))
        {
            if (m_AsyncLoadSkinRequestTable.TryGetValue(SkinID, out loadingObj))
            {
                sk.AddRef();
                loadingObj.callbackList.Add(CallBack);
            }
            else
            {
                loadingObj = new SkinAsyncLoadingObj();
                loadingObj.callbackList.Add(CallBack);
                sk.AddRef();
                m_AsyncLoadSkinRequestTable.Add(SkinID, loadingObj);
            }
            return(true);
        }


        if (m_AsyncLoadSkinRequestTable.TryGetValue(SkinID, out loadingObj))
        {
            loadingObj.ReferenceCount++;
            loadingObj.callbackList.Add(CallBack);
        }
        else
        {
            ResNode obj = AssetBundleManager.GetAssetsAsync(AssetType.Asset_Prefab, ResLoadCallBack, info.strPatch, false, info, priority);
            if (obj != null)
            {
                loadingObj = new SkinAsyncLoadingObj();
                loadingObj.callbackList.Add(CallBack);
                loadingObj.ReferenceCount++;
                loadingObj.loadingResNode = obj;
                m_AsyncLoadSkinRequestTable.Add(SkinID, loadingObj);
            }
            else
            {
                Trace.Warning("加载皮肤模型失败,ID:" + info.nSkinID + ",路径:" + info.strPatch + ",请[--策划--]检查配置");
                return(false);
            }
        }
        return(true);
    }