List <AnimationDataFile> FindAllSubFiles(ByteChunk data)
        {
            var toalFileCount = data.ReadInt32();
            var fileList      = new List <AnimationDataFile>(toalFileCount);

            for (int i = 0; i < toalFileCount; i++)
            {
                var file = new AnimationDataFile(data);
                fileList.Add(file);
                data.Index += file.Size;
            }
            return(fileList);
        }
        public byte[] ToByteArray()
        {
            if (HasUnknownElements)
            {
                throw new Exception("Can not save animation pack with unkown elements");
            }

            using MemoryStream memStream = new MemoryStream();

            int totalFileCount = Fragments.Count;

            if (AnimationBin != null)
            {
                totalFileCount++;
            }

            memStream.Write(ByteParsers.Int32.EncodeValue(totalFileCount, out _));

            if (AnimationBin != null)
            {
                var animBinByteArray   = AnimationBin.ToByteArray();
                AnimationDataFile file = new AnimationDataFile()
                {
                    Name = AnimationBin.FileName,
                    Size = animBinByteArray.Length
                };
                memStream.Write(file.ToByteArray());
                memStream.Write(animBinByteArray);
            }

            foreach (var item in Fragments)
            {
                var itemByteArray      = item.ToByteArray();
                AnimationDataFile file = new AnimationDataFile()
                {
                    Name = item.FileName,
                    Size = itemByteArray.Length
                };
                memStream.Write(file.ToByteArray());
                memStream.Write(itemByteArray);
            }

            return(memStream.ToArray());
        }