public static void WriteAniClip(FB.PosePlus.AniClip clip, System.IO.Stream ms)
{
//name
var nameb = System.Text.Encoding.UTF8.GetBytes(clip.name);
ms.WriteByte((byte)nameb.Length);
ms.Write(nameb, 0, nameb.Length);
//fps
byte[] fpsb = BitConverter.GetBytes(clip.fps);
ms.Write(fpsb, 0, 4);
//loop
ms.WriteByte((byte)(clip.loop ? 1 : 0));
{
//boneinfo
int c = clip.boneinfo.Count;
byte[] cliplenb = BitConverter.GetBytes(c);
ms.Write(cliplenb, 0, 4);
for (int i = 0; i < c; i++)
{
byte[] bnameb = System.Text.Encoding.UTF8.GetBytes(clip.boneinfo[i]);
ms.WriteByte((byte)bnameb.Length);
ms.Write(bnameb, 0, bnameb.Length);
}
}
{
//subclips
int c = clip.subclips.Count;
byte[] cliplenb = BitConverter.GetBytes(c);
ms.Write(cliplenb, 0, 4);
for (int i = 0; i < c; i++)
{
byte[] bnameb = System.Text.Encoding.UTF8.GetBytes(clip.subclips[i].name);
ms.WriteByte((byte)bnameb.Length);
ms.Write(bnameb, 0, bnameb.Length);
ms.WriteByte((byte)(clip.subclips[i].loop ? 1 : 0));
byte[] sb = BitConverter.GetBytes(clip.subclips[i].startframe);
byte[] eb = BitConverter.GetBytes(clip.subclips[i].endframe);
}
}
{//frame
int c = clip.frames.Count;
byte[] cliplenb = BitConverter.GetBytes(c);
ms.Write(cliplenb, 0, 4);
for (int i = 0; i < c; i++)
{
byte[] fidb = BitConverter.GetBytes(clip.frames[i].fid);
ms.Write(fidb, 0, 4);
ms.WriteByte((byte)(clip.frames[i].key ? 1 : 0));
for (int ib = 0; ib < clip.boneinfo.Count; ib++)
{
clip.frames[i].bonesinfo[ib].Save(ms,
i > 0 ? clip.frames[i - 1].bonesinfo[ib] : null);
}
}
}
}