コード例 #1
0
    void LoadTextureAsyncCallback(string texName, Texture2D texture, bool success)
    {
        if (m_SpriteManager == null)
        {
            EB.Debug.LogError("Dynamic Sprite Manager is null for DynamicAtlas: {0}", gameObject.name);
            return;
        }
        if (success && texture != null)
        {
            DynamicSpriteData data = m_SpriteManager.GetSpriteData(texName);
            if (data != null)
            {
                data.AddReference();
            }
            else
            {
                m_SpriteManager.AddDynamicSpriteData(texName, texture, DynamicSpriteData.eSpriteResTypes.Asset_Bundle);
                m_UVUpdateFlag = true;

                CurrentAsyncedTexture = texture.name;
                EventDelegate.Execute(onTextureAsyncSucceeded);
            }
        }
        else
        {
            //EB.Debug.LogWarning(string.Format("Load texture [{0}] from assetbundle failed.", texName));
            CurrentAsyncedTexture = texName;
            EventDelegate.Execute(onTextureAsyncFailed);
        }
    }
コード例 #2
0
    public DynamicSpriteData TryAddSpriteReference(string spriteName)
    {
        DynamicSpriteData sprite_data = GetSpriteData(spriteName);

        if (sprite_data != null)
        {
            sprite_data.AddReference();
            sprite_data.RuntimeFlag = true;
            return(sprite_data);
        }
        return(null);
    }
コード例 #3
0
    public override void AddDynamicSpriteData(string spriteName, Texture2D textureReference, DynamicSpriteData.eSpriteResTypes type, bool is_runtime = true)
    {
        //EB.Debug.LogError("AddDynamicSpriteData   spriteName  : {0}", spriteName);
        DynamicSpriteData data = GetSpriteData(spriteName);

        if (data != null)
        {
            EB.Debug.LogError("AddDynamicSpriteData: spriteName {0} exists", spriteName);
            data.AddReference();
            return;
        }

        data      = new DynamicSpriteData();
        data.name = spriteName;
        data.SpriteResourceType = type;
        data.UsageReference     = is_runtime ? 1 : 0;
        data.RuntimeFlag        = is_runtime;
        data.TextureReference   = textureReference;

        m_DynamicSpriteDatas.Add(data);
        if (!m_SpritePacker.PackSprites(m_DynamicSpriteDatas))
        {
            //Debug.Log("AddDynamicSpriteData: CAN NOT pack all of the sprites in the atlas, try reuse unused node");

            //failed to pack, get free space from current page.
            var freeData = FindFreeSpriteData(textureReference.width, textureReference.height);
            if (freeData == null)
            {
                //Debug.LogWarning("AddDynamicSpriteData: CAN NOT pack all of the sprites in the atlas, try remove unused node");

                for (int i = m_DynamicSpriteDatas.size - 1; i >= 0; --i)
                {
                    if (m_DynamicSpriteDatas[i].RuntimeFlag && m_DynamicSpriteDatas[i].UsageReference <= 0)
                    {
                        m_DynamicSpriteDatas[i].UnloadTexture();
                        m_DynamicSpriteDatas.RemoveAt(i);
                    }
                }

                EB.Debug.LogError("==================   m_DynamicSpriteDatas : {0}", m_DynamicSpriteDatas.size);
            }
            else
            {
                //Debug.LogFormat("AddDynamicSpriteData: {0} reuse node {1}", spriteName, freeData.name);

                m_DynamicSpriteDatas.Remove(data);
                if (freeData.TextureReference != textureReference)
                {
                    freeData.UnloadTexture();
                }

                freeData.name = spriteName;
                freeData.SpriteResourceType = type;
                freeData.UsageReference     = is_runtime ? 1 : 0;
                freeData.RuntimeFlag        = is_runtime;
                freeData.TextureReference   = textureReference;
            }

            m_Packed = false;
        }
        else
        {
            m_Packed = true;
        }
    }