private void InsertCachedSprite(CachedSprite cachedSprite)
        {
            int index     = 0;
            int lastIndex = _cachedSprites.Count - 1;

            while (index <= lastIndex)
            {
                int tmpIndex   = index + lastIndex >> 1;
                var foundCache = _cachedSprites[tmpIndex];
                if (foundCache.id < cachedSprite.id)
                {
                    index = tmpIndex + 1;
                }
                else if (foundCache.id > cachedSprite.id)
                {
                    lastIndex = tmpIndex - 1;
                }
                else
                {
                    return;
                }
            }

            _cachedSprites.Insert(index, cachedSprite);
        }
        public SpriteLoadingStatus GetSprite(uint spriteId, out CachedSprite cachedSprite)
        {
            cachedSprite = FindCachedSprite(spriteId);
            if (cachedSprite != null)
            {
                return(SpriteLoadingStatus.Completed);
            }

            var loadingStatus = GetSpriteInfo(spriteId, out Vector4 uv, out Vector2 size, out Texture2D texture);

            if (loadingStatus != SpriteLoadingStatus.Completed)
            {
                return(loadingStatus);
            }

            cachedSprite = new CachedSprite {
                id      = spriteId,
                uv      = uv,
                size    = size,
                texture = texture,
                materialProperyBlock = new MaterialPropertyBlock(),
            };

            cachedSprite.GenerateMaterialProps(cachedSprite.materialProperyBlock);

            InsertCachedSprite(cachedSprite);
            return(SpriteLoadingStatus.Completed);
        }
示例#3
0
        public SpriteLoadingStatus GetSprite(uint spriteId, out CachedSprite cachedSprite)
        {
            cachedSprite = FindCachedSprite(spriteId);
            if (cachedSprite != null)
            {
                return(SpriteLoadingStatus.Completed);
            }

            string    filename;
            Rect      spriteRect;
            Vector2   realSize;
            Texture2D tex2D;

            var loadingStatus = GetSpriteInfo(spriteId, out filename, out spriteRect, out realSize, out tex2D);

            if (loadingStatus != SpriteLoadingStatus.Completed)
            {
                return(loadingStatus);
            }

            cachedSprite            = new CachedSprite();
            cachedSprite.id         = spriteId;
            cachedSprite.rect       = spriteRect;
            cachedSprite.spriteSize = realSize;
            cachedSprite.texture    = tex2D;

            BinaryInsert(cachedSprite);
            return(SpriteLoadingStatus.Completed);
        }
示例#4
0
        private void InsertCachedSprite(CachedSprite sprite)
        {
            int l = 0, r = _cachedSprites.Count - 1;

            while (l <= r)
            {
                int i     = l + (r - l) / 2;
                var other = _cachedSprites[i];
                if (other.id < sprite.id)
                {
                    l = i + 1;
                }
                else if (other.id > sprite.id)
                {
                    r = i - 1;
                }
                else
                {
                    return;
                }
            }

            _cachedSprites.Insert(l, sprite);
        }