コード例 #1
0
    private Sprite GetSprite(AssetBundle assetBundle, long requestId, SpriteCacheInfo info, Action <Sprite> callback)
    {
        Sprite sprite = m_AtlusList[info.atlusIndex].SetSprite(assetBundle, requestId, info, callback);

        m_cache.Register(info.name, info);
        return(sprite);
    }
コード例 #2
0
    /// <summary>
    /// キャッシュからスプライト取得
    /// </summary>
    /// <param name="unCharaFixID"></param>
    /// <returns>スプライト</returns>
    private Sprite GetCharaIconFromChash(SpriteCacheInfo info)
    {
        if (info == null)
        {
            return(null);
        }

        return(m_AtlusList[info.atlusIndex].Sprites[info.spriteIndex]);
    }
コード例 #3
0
    public void SetCharaIconReady(string icon_name)
    {
        SpriteCacheInfo info = m_cache.GetSpriteInfo(icon_name);

        if (info != null)
        {
            info.ready = true;
        }
    }
コード例 #4
0
ファイル: UnitIconAtlas.cs プロジェクト: mliuzailin/GitGame
    public void AddRequestCallBack(SpriteCacheInfo info, Action <Sprite> callback)
    {
        IconApplyRequest request = applyRequest.Find(t => t.info.name.Equals(info.name));

        if (request != null)
        {
            request.callback += callback;
        }
    }
コード例 #5
0
    /// <summary>
    /// 再利用するスプライト情報取得
    /// </summary>
    /// <returns>スプライト情報</returns>
    private SpriteCacheInfo GetReplaceSpriteInfo()
    {
        SpriteCacheInfo info = m_cache.GetSpriteInfoOldItem();

        if (info == null)
        {
            return(null);
        }

        return(info);
    }
コード例 #6
0
    /// <summary>
    /// キャッシュ済みスプライト情報取得
    /// </summary>
    /// <returns>スプライト情報</returns>
    private SpriteCacheInfo GetCacheSpriteInfo(string key)
    {
        SpriteCacheInfo info = m_cache.GetSpriteInfo(key);

        if (info == null)
        {
            return(null);
        }

        return(info);
    }
コード例 #7
0
ファイル: UnitIconAtlas.cs プロジェクト: mliuzailin/GitGame
    public Sprite SetSprite(AssetBundle assetbundle, long requestId, SpriteCacheInfo info, Action <Sprite> callback)
    {
        Sprite ret_sprite = addRequest(assetbundle, requestId, info, callback);

        if (ret_sprite == null)
        {
            return(null);
        }

        return(ret_sprite);
    }
コード例 #8
0
ファイル: UnitIconAtlas.cs プロジェクト: mliuzailin/GitGame
    protected virtual Sprite addRequest(AssetBundle assetBundle, long requestId, SpriteCacheInfo info, Action <Sprite> callback)
    {
        IconApplyRequest request = new IconApplyRequest();

        request.requestId   = requestId;
        request.info        = info;
        request.assetBundle = assetBundle;
        request.callback    = callback;

        applyRequest.Add(request);

        return(null);
    }
コード例 #9
0
    public void Reset(uint fix_id)
    {
        if (fix_id == 0)
        {
            return;
        }

        SpriteCacheInfo ci = GetSpriteInfo(GetCharaIconSpriteName(fix_id));

        if (ci != null)
        {
            ci.ResetPriority();
        }
    }
コード例 #10
0
    /// <summary>
    /// 未使用のスプライト情報を取得
    /// </summary>
    /// <returns>スプライト情報</returns>
    private SpriteCacheInfo GetFreeSpriteInfo()
    {
        int atlusIndex  = -1;
        int spriteIndex = -1;

        for (int i = 0; i < ATLUS_NUM; i++)
        {
            spriteIndex = m_AtlusList[i].GetFreeIndex();
            if (spriteIndex != -1)
            {
                atlusIndex = i;
                break;
            }
        }

        if (spriteIndex == -1)
        {
            return(null);
        }

        SpriteCacheInfo info = new SpriteCacheInfo(atlusIndex, spriteIndex);

        return(info);
    }
コード例 #11
0
    // ================================ take sprite from icon pack

    // TODO : refactor
    private long GetCharaIcon(uint unCharaFixID, System.Action <Sprite> callback = null, bool hipriority = false)
    {
        long requestId = 0;

        if (unCharaFixID == 0)
        {
            Call(m_DefaultIcon, callback);
            return(requestId);
        }

        requestId = getRequestId();

        switch (m_loaderType)
        {
        case LoaderType.Atlus:
        {
            GetCharaIconAtlas(unCharaFixID, atlas =>
                {
                    var strSpriteName = UnitIconImageCache.GetCharaIconSpriteName(unCharaFixID);

                    if (atlas == null)
                    {
                        Debug.LogError("Atlas None! - " + " , charaID:" + unCharaFixID);
                        Call(m_DefaultIcon, callback);

                        return;
                    }

                    var sprire = atlas.GetSprite(strSpriteName);
                    if (sprire == null)
                    {
                        Debug.LogError("Atlas Inside None! - " + strSpriteName);
                    }

                    Call(sprire, callback);
                });
        }
        break;

        case LoaderType.Sprite:
        {
            GetCharaIconSprite(unCharaFixID, callback);
        }
        break;

        case LoaderType.AssetBundle:
        {
            string spritename = UnitIconImageCache.GetCharaIconSpriteName(unCharaFixID);

            //すでにキャッシュされている
            SpriteCacheInfo cacheInfo = m_cache.GetSpriteInfo(spritename);
            if (cacheInfo != null)
            {
                if (hipriority)
                {
                    cacheInfo.HiPriority = true;
                }

                if (cacheInfo.ready)
                {
                    //準備完了
                    Sprite chashSprite = GetCharaIconFromChash(cacheInfo);
                    if (chashSprite != null)
                    {
                        Call(chashSprite, callback);
                    }
                }
                else
                {
                    //まだリクエスト中

                    //リクエストにアクション追加
                    m_AtlusList[cacheInfo.atlusIndex].AddRequestCallBack(cacheInfo, callback);

                    //デフォルトアイコンを設定
                    Call(m_DefaultIcon, callback);
                }

                return(0);
            }

            //デフォルトアイコンを設定
            Call(m_DefaultIcon, callback);

            //アセットバンドルから読み込んで追加
            GetCharaIconAssetBundle(unCharaFixID, assetbundle =>
                {
                    //アセットバンドルがない
                    if (assetbundle == null)
                    {
                        Debug.LogError("AssetBundle None! - " + " , charaID:" + unCharaFixID);
                        Call(m_DefaultIcon, callback);

                        return;
                    }

                    //すでにキャッシュ済みになっていないか?
                    SpriteCacheInfo nowInfo = GetCacheSpriteInfo(spritename);
                    if (nowInfo != null)
                    {
                        if (hipriority)
                        {
                            nowInfo.HiPriority = true;
                        }

                        GetSprite(assetbundle, requestId, nowInfo, callback);
                        return;
                    }

                    //アトラスに空きがあるかどうか
                    SpriteCacheInfo freeInfo = GetFreeSpriteInfo();
                    if (freeInfo != null)
                    {
                        //ある場合は追加
                        freeInfo.chara_fix_id = unCharaFixID;
                        freeInfo.name         = spritename;
                        freeInfo.HiPriority   = hipriority;

                        GetSprite(assetbundle, requestId, freeInfo, callback);

                        return;
                    }

                    //ない場合はキャッシュから使用率が低いものを取得して置き換え
                    SpriteCacheInfo replaceInfo = GetReplaceSpriteInfo();
                    if (replaceInfo != null)
                    {
                        replaceInfo.chara_fix_id = unCharaFixID;
                        replaceInfo.name         = spritename;
                        replaceInfo.ready        = false;
                        replaceInfo.HiPriority   = hipriority;

                        GetSprite(assetbundle, requestId, replaceInfo, callback);

                        return;
                    }
                });
        }
        break;
        }

        return(requestId);
    }
コード例 #12
0
 public void Register(string key, SpriteCacheInfo spriteInfo)
 {
     spriteInfo.count   = GetSpriteInfoUseCount();
     m_spriteInfos[key] = spriteInfo;
 }