void Serialize<Deserializer>(Deserializer& ar, Animation& data, unsigned int version) { const ChunkHeader knspHeader = ReadChunkHeader(ar); if (knspHeader.id != MakeId('K','N','S','P')) { ar.Rewind(chunkHeaderSize); return; } int major; ar(major, 1); int minor; ar(minor, 1); data.version = major * 0x100 + minor; ar.Skip(knspHeader.size - 2); for (;!ar.IsEof();) { const ChunkHeader header = ReadChunkHeader(ar); switch(header.id) { case MakeId('P','I','C','T'): data.textureName.resize(header.size); ar(&data.textureName[0], header.size); break; case MakeId('A','N','I','M'): { size_t count; ar(count, 4); data.sheetList.resize(count); for (auto i : data.sheetList) { Serialize(ar, i, version); } break; } default: ar.Skip(header.size); break; } } }
void Serialize<Deserializer>(Deserializer& ar, Sheet& data, unsigned int version) { const ChunkHeader chunk = ReadChunkHeader(ar); if (chunk.id != MakeId('S','H','E','E')) { ar.Rewind(chunkHeaderSize); return; } { size_t size; ar(size, 4); data.chipList.resize(size); for (auto i : data.chipList) { Serialize(ar, i, version); } } { size_t size; ar(size, 4); data.rectList.resize(size); for (auto i : data.rectList) { Serialize(ar, i, version); } } }