Пример #1
0
    public void GetAtlas(List <UnitIconImageCacheTestCase.AtlasCache> registerAtlases, List <string> removeAtlases, string argKey, UIAtlas expected)
    {
        var cache = new UnitIconImageCache();

        foreach (var registerAtlas in registerAtlases)
        {
            cache.Register(registerAtlas.key, registerAtlas.atlas);
        }

        foreach (var removeAtlasName in removeAtlases)
        {
            cache.RemoveAtlas(removeAtlasName);
        }

        var result = cache.GetAtlas(argKey);

        if (expected == null)
        {
            Assert.True(result == null);
        }
        else
        {
            Assert.True(
                result != null &&
                result == expected);
        }
    }
Пример #2
0
    private void GetCharaIconSprite(uint unCharaID, System.Action <Sprite> callback)
    {
        var name = UnitIconImageCache.GetCharaIconSpriteName(unCharaID);

        if (name == "")
        {
            Call(m_DefaultIcon, callback);
            return;
        }

        m_loader.SerialLoad(name, callback);
    }
Пример #3
0
    public void Clear()
    {
        foreach (var testCase in UnitIconImageCacheTestCase.GetAtlas)
        {
            var registerAtlases = (List <UnitIconImageCacheTestCase.AtlasCache>)testCase.Arguments[0];

            var cache = new UnitIconImageCache();

            foreach (var registerAtlas in registerAtlases)
            {
                cache.Register(registerAtlas.key, registerAtlas.atlas);
            }

            cache.Clear();

            foreach (var registerAtlas in registerAtlases)
            {
                var result = cache.GetAtlas(registerAtlas.key);
                Assert.True(result == null);
            }

            break;
        }

        foreach (var testCase in UnitIconImageCacheTestCase.GetSprite)
        {
            UnitIconImageCacheTestCase.InitializeSprites();

            var registerSprites = (List <UnitIconImageCacheTestCase.SpriteCache>)testCase.Arguments[0];

            var cache = new UnitIconImageCache();

            foreach (var registerSprite in registerSprites)
            {
                cache.Register(registerSprite.key, registerSprite.sprite);
            }

            cache.Clear();

            foreach (var registerSprite in registerSprites)
            {
                var result = cache.GetSprite(registerSprite.key);
                Assert.True(result == null);
            }

            break;
        }
    }
Пример #4
0
    public long Get(uint unCharaFixID, ref string spriteName, System.Action <Sprite> callback = null, bool hipriority = false)
    {
        if (spriteName == string.Empty)
        {
            spriteName = UnitIconImageCache.GetCharaIconSpriteName(unCharaFixID);
        }

        string name = spriteName;

        long requestId = GetCharaIcon(unCharaFixID, sprite =>
        {
            Call(sprite, callback);
        }, hipriority);

        return(requestId);
    }
Пример #5
0
    public void GetSprite()
    {
        foreach (var testCase in UnitIconImageCacheTestCase.GetSprite)
        {
            UnitIconImageCacheTestCase.InitializeSprites();

            var registerSprites = (List <UnitIconImageCacheTestCase.SpriteCache>)testCase.Arguments[0];
            var removeSprites   = (List <string>)testCase.Arguments[1];
            var argKey          = (string)testCase.Arguments[2];
            var expected        = (Sprite)testCase.Arguments[3];

            var cache = new UnitIconImageCache();

            foreach (var registerSprite in registerSprites)
            {
                cache.Register(registerSprite.key, registerSprite.sprite);
            }

            foreach (var removeSpriteName in removeSprites)
            {
                cache.RemoveSprite(removeSpriteName);
            }

            var result = cache.GetSprite(argKey);

            if (expected == null)
            {
                Assert.True(result == null, "Failed at " + testCase.TestName);
            }
            else
            {
                Assert.True(
                    result != null &&
                    result == expected
                    , "Failed at " + testCase.TestName);
            }
        }
    }
Пример #6
0
 public void SetCache(UnitIconImageCache cache)
 {
     m_cache = cache;
 }
Пример #7
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);
    }