Exemplo n.º 1
0
        private SpriteLoadingStatus GetSpriteInfo(uint spriteId, out Vector4 uv, out Vector2 size, out Texture2D texture)
        {
            SpriteTypeImpl match = _spriteSheet.Find(m => spriteId >= m.FirstSpriteId && spriteId <= m.LastSpriteId);

            var loadingStatus = SpriteLoadingStatus.Failed;

            if (match != null)
            {
                loadingStatus = SpriteLoadingStatus.Completed;
                texture       = match.Texture;
            }
            else
            {
                texture = null;
            }

            if (texture == null)
            {
                uv   = Vector4.zero;
                size = Vector2.zero;
                return(loadingStatus);
            }

            size = SpriteTypeSizeRefs[match.SpriteType - 1] * Constants.FieldSize;
            uint realId    = spriteId - match.FirstSpriteId;
            int  texPerRow = (int)(texture.width / size.x);

            float x = (realId % texPerRow) * size.x;
            float y = texture.width - (realId / texPerRow * size.y) - size.y;

            uv = new Vector4(size.x / texture.width, size.y / texture.height, x / texture.width, y / texture.height);
            return(loadingStatus);
        }
Exemplo n.º 2
0
        private SpriteLoadingStatus GetSpriteInfo(uint spriteId, out string filename, out Rect spriteRect, out Vector2 realSpriteSize, out Texture2D tex2D)
        {
            SpriteTypeImpl match = _spriteSheet.Find(m => spriteId >= m.FirstSpriteId && spriteId <= m.LastSpriteId);

            SpriteLoadingStatus loadingStatus = SpriteLoadingStatus.Failed;

            if (match != null)
            {
                loadingStatus = GetOrLoadTexture(match.File, out tex2D);
            }
            else
            {
                tex2D = null;
            }

            if (tex2D == null)
            {
                filename       = null;
                spriteRect     = Rect.zero;
                realSpriteSize = Vector2.zero;
                return(loadingStatus);
            }

            filename       = match.File;
            realSpriteSize = SpriteTypeSizeRefs[match.SpriteType - 1] * Constants.FieldSize;
            uint realId    = spriteId - match.FirstSpriteId;
            int  texPerRow = (int)(tex2D.width / realSpriteSize.x);

            float x = (realId % texPerRow) * realSpriteSize.x;
            float y = tex2D.width - (realId / texPerRow * realSpriteSize.y) - realSpriteSize.y;

            spriteRect = new Rect(x / tex2D.width, y / tex2D.height, realSpriteSize.x / tex2D.width, realSpriteSize.y / tex2D.height);
            return(loadingStatus);
        }
Exemplo n.º 3
0
        private bool GetSpriteInfo(uint spriteId, out string filename, out Rect spriteRect, out Vector2 realSpriteSize, out Texture2D tex2D)
        {
            SpriteTypeImpl match = _spriteSheet.Find(m => spriteId >= m.FirstSpriteId && spriteId <= m.LastSpriteId);

            tex2D = match != null?GetOrLoadTexture(match.File) : null;

            if (match == null || match.SpriteType < 1 || match.SpriteType > 4 || tex2D == null)
            {
                filename       = null;
                spriteRect     = Rect.zero;
                realSpriteSize = Vector2.zero;
                tex2D          = null;
                return(false);
            }

            filename       = match.File;
            realSpriteSize = s_SpriteTypesSizesRef[match.SpriteType - 1] * Constants.FieldSize;
            uint realId    = spriteId - match.FirstSpriteId;
            int  texPerRow = (int)(tex2D.width / realSpriteSize.x);

            float x = (realId % texPerRow) * realSpriteSize.x;
            float y = tex2D.width - (realId / texPerRow * realSpriteSize.y) - realSpriteSize.y;

            spriteRect = new Rect(x / tex2D.width, y / tex2D.height, realSpriteSize.x / tex2D.width, realSpriteSize.y / tex2D.height);
            return(true);
        }
Exemplo n.º 4
0
        public IEnumerator Parse(System.IO.Stream stream)
        {
            using (var reader = new System.IO.BinaryReader(stream))
            {
                uint total = reader.ReadUInt32();
                _spriteSheet = new List <SpriteTypeImpl>((int)total);
                for (uint i = 0; i < total; i++)
                {
                    var atlasId       = reader.ReadUInt32();
                    var spriteType    = reader.ReadUInt16();
                    var firstSpriteId = reader.ReadUInt32();
                    var lastSpriteId  = reader.ReadUInt32();

                    var texture = new Texture2D(1, 1);
                    var size    = reader.ReadUInt32();
                    var data    = new byte[size];
                    reader.Read(data, 0, (int)size);
                    texture.LoadImage(data);

                    var spriteImpl = new SpriteTypeImpl
                    {
                        AtlasId       = atlasId,
                        FirstSpriteId = firstSpriteId,
                        LastSpriteId  = lastSpriteId,
                        SpriteType    = spriteType,
                        Texture       = texture,
                    };

                    _spriteSheet.Add(spriteImpl);

                    // load a batch of 5 textures at once
                    if (i % 500 == 100)
                    {
                        yield return(null);
                    }
                }
            }
        }