BitHelper.WriteAniClip C# (CSharp) Method

WriteAniClip() public static method

public static WriteAniClip ( FB, clip, System ms ) : void
clip FB,
ms System
return void
    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);
                }
            }
        }
    }

Usage Example

コード例 #1
0
ファイル: nodeParser.cs プロジェクト: liro0206/EgretUnity
        public string SaveAniClip(AniClip clip)
        {
            int    id   = clip.GetInstanceID();
            string name = null;

            if (savecache.TryGetValue(id, out name))
            {
                return(name);
            }
            using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
            {
                BitHelper.WriteAniClip(clip, ms);
                byte[] bs   = ms.ToArray();
                string sha1 = ResLibTool.ComputeHashString(bs);

                name       = sha1 + ".aniclip.bin";
                bufs[name] = bs;
            }

            return(name);
        }