Пример #1
0
        public static cAnimFile ReadFile(string FileName)
        {
            ASCIIEncoding asciiEncoding = new ASCIIEncoding();
            cAnimFile     cAnimFile     = new cAnimFile();

            using (BinaryReader binaryReader = new BinaryReader((Stream)File.Open(FileName, FileMode.Open)))
            {
                binaryReader.ReadBytes(4);
                cAnimFile.Header           = new cAnimHeader();
                cAnimFile.Header.Version   = binaryReader.ReadInt32();
                cAnimFile.Header.AnimCount = binaryReader.ReadInt32();
                cAnimFile.Animation        = new cAnimation[cAnimFile.Header.AnimCount];
                for (int index1 = 0; index1 < cAnimFile.Header.AnimCount; ++index1)
                {
                    cAnimation cAnimation = new cAnimation();
                    cAnimation.SkaPath    = asciiEncoding.GetString(binaryReader.ReadBytes(binaryReader.ReadInt32()));
                    cAnimation.AnimeName  = asciiEncoding.GetString(binaryReader.ReadBytes(binaryReader.ReadInt32()));
                    cAnimation.fps        = binaryReader.ReadSingle();
                    cAnimation.last_frame = binaryReader.ReadInt32();
                    cAnimation.extra_val1 = binaryReader.ReadInt32();
                    cAnimation.extra_val2 = binaryReader.ReadInt32();
                    cAnimation.extra_val3 = binaryReader.ReadInt32();
                    cAnimation.JointCount = binaryReader.ReadInt32();
                    cAnimation.BoneAnim   = new cJointAnim[cAnimation.JointCount];
                    for (int index2 = 0; index2 < cAnimation.JointCount; ++index2)
                    {
                        cJointAnim cJointAnim = new cJointAnim();
                        cJointAnim.JointName = asciiEncoding.GetString(binaryReader.ReadBytes(binaryReader.ReadInt32()));
                        float[] numArray = new float[12];
                        for (int index3 = 0; index3 < 12; ++index3)
                        {
                            numArray[index3] = binaryReader.ReadSingle();
                        }
                        cJointAnim.PositionCount = binaryReader.ReadInt32();
                        cJointAnim.Positions     = new cPositionKeyFrame[cJointAnim.PositionCount];
                        for (int index3 = 0; index3 < cJointAnim.PositionCount; ++index3)
                        {
                            cJointAnim.Positions[index3] = new cPositionKeyFrame(binaryReader.ReadInt16(), binaryReader.ReadInt16(), binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle());
                        }
                        cJointAnim.RotationCount = binaryReader.ReadInt32();
                        cJointAnim.Rotations     = new cRotationKeyFrame[cJointAnim.RotationCount];
                        for (int index3 = 0; index3 < cJointAnim.RotationCount; ++index3)
                        {
                            cJointAnim.Rotations[index3] = new cRotationKeyFrame(binaryReader.ReadInt16(), binaryReader.ReadInt16(), binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle());
                        }
                        cJointAnim.Unknown          = binaryReader.ReadSingle();
                        cAnimation.BoneAnim[index2] = cJointAnim;
                    }
                    cAnimFile.Animation[index1]         = cAnimation;
                    cAnimFile.Animation[index1].EndData = binaryReader.ReadInt32();
                }
            }
            return(cAnimFile);
        }
Пример #2
0
 public static bool WriteFile(cAnimFile animData, string FileName)
 {
     try
     {
         float[] numArray = new float[12]
         {
             1f,
             0.0f,
             0.0f,
             0.0f,
             0.0f,
             1f,
             0.0f,
             0.0f,
             0.0f,
             0.0f,
             1f,
             0.0f
         };
         ASCIIEncoding asciiEncoding = new ASCIIEncoding();
         using (BinaryWriter binaryWriter = new BinaryWriter((Stream)File.Create(FileName)))
         {
             binaryWriter.Write(asciiEncoding.GetBytes("ANIM"));
             binaryWriter.Write(animData.Header.Version);
             binaryWriter.Write(animData.Header.AnimCount);
             for (int index1 = 0; index1 < ((IEnumerable <cAnimation>)animData.Animation).Count <cAnimation>(); ++index1)
             {
                 cAnimation cAnimation = animData.Animation[index1];
                 binaryWriter.Write(asciiEncoding.GetBytes(cAnimation.SkaPath).Length);
                 binaryWriter.Write(asciiEncoding.GetBytes(cAnimation.SkaPath));
                 binaryWriter.Write(asciiEncoding.GetBytes(cAnimation.AnimeName).Length);
                 binaryWriter.Write(asciiEncoding.GetBytes(cAnimation.AnimeName));
                 binaryWriter.Write(cAnimation.fps);
                 binaryWriter.Write(cAnimation.last_frame);
                 binaryWriter.Write(cAnimation.extra_val1);
                 binaryWriter.Write(cAnimation.extra_val2);
                 binaryWriter.Write(cAnimation.extra_val3);
                 binaryWriter.Write(((IEnumerable <cJointAnim>)cAnimation.BoneAnim).Count <cJointAnim>());
                 for (int index2 = 0; index2 < ((IEnumerable <cJointAnim>)cAnimation.BoneAnim).Count <cJointAnim>(); ++index2)
                 {
                     cJointAnim cJointAnim = cAnimation.BoneAnim[index2];
                     binaryWriter.Write(asciiEncoding.GetBytes(cJointAnim.JointName).Length);
                     binaryWriter.Write(asciiEncoding.GetBytes(cJointAnim.JointName));
                     for (int index3 = 0; index3 < 12; ++index3)
                     {
                         binaryWriter.Write(numArray[index3]);
                     }
                     binaryWriter.Write(((IEnumerable <cPositionKeyFrame>)cJointAnim.Positions).Count <cPositionKeyFrame>());
                     for (int index3 = 0; index3 < ((IEnumerable <cPositionKeyFrame>)cJointAnim.Positions).Count <cPositionKeyFrame>(); ++index3)
                     {
                         cPositionKeyFrame position = cJointAnim.Positions[index3];
                         binaryWriter.Write(position.Frame);
                         binaryWriter.Write(position.Flags);
                         binaryWriter.Write(position.x);
                         binaryWriter.Write(position.y);
                         binaryWriter.Write(position.z);
                     }
                     binaryWriter.Write(((IEnumerable <cRotationKeyFrame>)cJointAnim.Rotations).Count <cRotationKeyFrame>());
                     for (int index3 = 0; index3 < ((IEnumerable <cRotationKeyFrame>)cJointAnim.Rotations).Count <cRotationKeyFrame>(); ++index3)
                     {
                         cRotationKeyFrame rotation = cJointAnim.Rotations[index3];
                         binaryWriter.Write(rotation.Frame);
                         binaryWriter.Write(rotation.Flags);
                         binaryWriter.Write(rotation.w);
                         binaryWriter.Write(rotation.x);
                         binaryWriter.Write(rotation.y);
                         binaryWriter.Write(rotation.z);
                     }
                     binaryWriter.Write(cJointAnim.Unknown);
                 }
                 binaryWriter.Write(cAnimation.EndData);
             }
             binaryWriter.Close();
         }
         return(true);
     }
     catch
     {
         return(false);
     }
 }