コード例 #1
0
ファイル: AbMgr.cs プロジェクト: wuhuolong/MaxBooks
 public void OnAbAsyncDownloadOver(int hash)
 {
     if (m_loading_Dic.ContainsKey(hash))
     {
         AbAbstractLoader loader = m_loading_Dic[hash];
         m_Ab_Dic.Add(hash, loader);
         if (!(loader as AbAsyncLoader).Tick())
         {
             m_delay.Add(hash);
         }
         m_loading_Dic.Remove(hash);
         Debuger.Log(Tag, "transfer ", loader.AbName);
         bool issuc;
         for (int i = m_delay.Count - 1; i > -1; i--)
         {
             issuc = (m_Ab_Dic[m_delay[i]] as AbAsyncLoader).Tick();
             if (issuc)
             {
                 m_delay.RemoveAt(i);
             }
         }
     }
     else
     {
         Debuger.Log(Tag, "transfer ", "this should never happen too !!!!!");
     }
 }
コード例 #2
0
ファイル: AbMgr.cs プロジェクト: wuhuolong/MaxBooks
    public bool isHaveAb(string abname)
    {
        int hash = abname.GetHashCode();
        AbAbstractLoader loader = null;

        return(m_Ab_Dic.TryGetValue(hash, out loader));
    }
コード例 #3
0
ファイル: AbMgr.cs プロジェクト: wuhuolong/MaxBooks
    public void AsyncLoad(string path, Action <AssetBundle> callback, bool isdepend = false)
    {
        if (m_manifest == null)
        {
            ResMgr.Log(Tag, "AsyncLoad", "manifest is null");
            return;
        }
        string abname;

        if (isdepend)
        {
            abname = path;
        }
        else
        {
            abname = XGamePath.Path2ResName(path);
        }
        int hash = abname.GetHashCode();
        AbAbstractLoader loader = null;

        if (m_Ab_Dic.TryGetValue(hash, out loader))
        {
            if (callback != null)
            {
                callback(loader.Bundle);
            }
            return;
        }

        string[] depends = AbMgr.GetInstance().GetDepends(abname);
        for (int i = 0; i < depends.Length; i++)
        {
            ResMgr.Log(Tag, "AsyncLoad|depends", depends[i]);
            int hash2 = depends[i].GetHashCode();
            AbAbstractLoader loader2 = null;
            if (m_Ab_Dic.TryGetValue(hash2, out loader2))
            {
                continue;
            }
            if (m_loading_Dic.ContainsKey(hash2))
            {
                AbAsyncLoader asyncloader = m_loading_Dic[hash2] as AbAsyncLoader;
                asyncloader.request.priority++;
                continue;
            }
            AbMgr.GetInstance().AsyncLoad(depends[i], null, true);
        }

        loader = new AbAsyncLoader(path, abname, callback);
        path   = XGamePath.GetStreamingAbPath(abname);
        loader.LoadAsset(path);
        m_loading_Dic.Add(hash, loader as AbAsyncLoader);
    }
コード例 #4
0
ファイル: AbMgr.cs プロジェクト: wuhuolong/MaxBooks
    public bool isHaveAb(int hash)
    {
        AbAbstractLoader loader = null;

        return(m_Ab_Dic.TryGetValue(hash, out loader));
    }
コード例 #5
0
ファイル: AbMgr.cs プロジェクト: wuhuolong/MaxBooks
    public AssetBundle SyncLoad(string path, bool isdepend = false)
    {
        if (m_manifest == null)
        {
            return(null);
        }
        string abname;

        if (isdepend)
        {
            abname = path;
        }
        else
        {
            abname = XGamePath.Path2ResName(path);
        }
        string fullpath = XGamePath.GetStreamingAbPath(abname);
        int    hash     = abname.GetHashCode();//path.GetHashCode();

        string[] depends = AbMgr.GetInstance().GetDepends(abname);
        for (int i = 0; i < depends.Length; i++)
        {
            ResMgr.Log(Tag, "SyncLoad|depends", depends[i]);
            int hash2 = depends[i].GetHashCode();
            AbAbstractLoader loader2 = null;
            if (m_Ab_Dic.TryGetValue(hash2, out loader2))
            {
                continue;
            }
            if (m_loading_Dic.ContainsKey(hash2))
            {
                AbAsyncLoader asyncloader = m_loading_Dic[hash2] as AbAsyncLoader;
                asyncloader.request.priority++;
                continue;
            }
            AbMgr.GetInstance().SyncLoad(depends[i], true);
        }
        AbAbstractLoader loader;

        if (m_Ab_Dic.TryGetValue(hash, out loader))
        {
            switch (loader.State)
            {
            case AbBundleState.success:
                return(loader.Bundle);

            case AbBundleState.loading:
                if (!loader.isSync)
                {
                    //todo 转同步加载
                }
                break;

            case AbBundleState.none:
            default:
                break;
            }
            return(loader.Bundle);
        }
        loader = new AbSyncLoader(fullpath, abname);
        loader.LoadAsset(fullpath);
        m_Ab_Dic.Add(hash, loader);
        return(m_Ab_Dic[hash].Bundle);
    }