Exemplo n.º 1
0
        private AssetAssociate GetAssociate(string path)
        {
            AssetAssociate associate = null;

            if (m_assetAssociate.TryGetValue(path, out associate))
            {
                return(associate);
            }
            return(null);
        }
Exemplo n.º 2
0
        public void UnloadAssets(bool unloadAll)
        {
            Dictionary <string, int> safeCount = new Dictionary <string, int>();

            while (m_recycleAsset.Count > 0)
            {
                AssetData asset = m_recycleAsset[0];
                m_recycleAsset.RemoveAt(0);
                if (asset == null)
                {
                    continue;
                }
                AssetAssociate aa = GetAssociate(asset.AssetUrl);
                if (aa != null && aa.HasAssociateInMemory)
                {
                    int nCount = 0;
                    safeCount.TryGetValue(asset.AssetUrl, out nCount);
                    if (nCount < 5)
                    {
                        //确保资源删除时,被访问不要超过5次,5次遍历列表失败,此资源强制删除
                        m_recycleAsset.Add(asset);
                        if (safeCount.ContainsKey(asset.AssetUrl))
                        {
                            safeCount[asset.AssetUrl]++;
                        }
                        else
                        {
                            safeCount.Add(asset.AssetUrl, 1);
                        }
                        continue;
                    }
                }
                if (asset != null && !asset.IsUnLoaded)
                {
                    ChangeAssetState(asset, false);
                    asset.UnLoad(true);
                    m_assetInMemory.Remove(asset.AssetUrl);
                    m_recycleLookUp.Remove(asset.AssetUrl);
                }
            }
        }
Exemplo n.º 3
0
        public void RecordAssociate(string url, string[] depends)
        {
            AssetAssociate aa = null;

            url = AssetUtility.GetAssetRealPath(url);

            if (depends != null)
            {
                for (int i = 0; i < depends.Length; ++i)
                {
                    string tdp = AssetUtility.GetAssetRealPath(depends[i]);
                    if (!m_assetAssociate.TryGetValue(tdp, out aa))
                    {
                        aa     = new AssetAssociate();
                        aa.Url = tdp;
                        m_assetAssociate.Add(tdp, aa);
                    }
                    aa.SetAssociate(url, aa.GetAAState(url));
                }
            }
        }