Example #1
0
 public static cAnimFile ReadFile(string FileName)
 {
     Encoding encoding = Encoding.GetEncoding(0x4e3);
     cAnimFile file = new cAnimFile();
     using (BinaryReader reader = new BinaryReader(File.Open(FileName, FileMode.Open)))
     {
         byte[] buffer = reader.ReadBytes(4);
         file.Header = new cAnimHeader();
         file.Header.Version = reader.ReadInt32();
         file.Header.AnimCount = reader.ReadInt32();
         file.Animation = new cAnimation[file.Header.AnimCount];
         for (int i = 0; i < file.Header.AnimCount; i++)
         {
             cAnimation animation = new cAnimation();
                 animation.SkaPath = encoding.GetString(reader.ReadBytes(reader.ReadInt32()));
                 animation.AnimeName = encoding.GetString(reader.ReadBytes(reader.ReadInt32()));
                 animation.fps = reader.ReadSingle();
                 animation.last_frame = reader.ReadInt32();
                 animation.extra_val1 = reader.ReadInt32();
                 animation.extra_val2 = reader.ReadInt32();
                 animation.extra_val3 = reader.ReadInt32();
                 animation.JointCount = reader.ReadInt32();
                 animation.BoneAnim = new cJointAnim[animation.JointCount];
             for (int j = 0; j < animation.JointCount; j++)
             {
                 cJointAnim anim = new cJointAnim {
                     JointName = encoding.GetString(reader.ReadBytes(reader.ReadInt32()))
                 };
                 float[] numArray = new float[12];
                 int index = 0;
                 while (index < 12)
                 {
                     numArray[index] = reader.ReadSingle();
                     index++;
                 }
                 anim.PositionCount = reader.ReadInt32();
                 anim.Positions = new cPositionKeyFrame[anim.PositionCount];
                 index = 0;
                 while (index < anim.PositionCount)
                 {
                     anim.Positions[index] = new cPositionKeyFrame(reader.ReadInt16(), reader.ReadInt16(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
                     index++;
                 }
                 anim.RotationCount = reader.ReadInt32();
                 anim.Rotations = new cRotationKeyFrame[anim.RotationCount];
                 for (index = 0; index < anim.RotationCount; index++)
                 {
                     anim.Rotations[index] = new cRotationKeyFrame(reader.ReadInt16(), reader.ReadInt16(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
                 }
                 anim.Unknown = reader.ReadSingle();
                 animation.BoneAnim[j] = anim;
             }
             file.Animation[i] = animation;
             file.Animation[i].EndData = reader.ReadInt32();
         }
     }
     return file;
 }
Example #2
0
 public static bool WriteFile(cAnimFile animData, string FileName)
 {
     try
     {
         float[] numArray = new float[] { 1f, 0f, 0f, 0f, 0f, 1f, 0f, 0f, 0f, 0f, 1f, 0f };
         Encoding encoding = Encoding.GetEncoding(0x4e3);
         using (BinaryWriter writer = new BinaryWriter(File.Create(FileName)))
         {
             writer.Write(encoding.GetBytes("ANIM"));
             writer.Write(animData.Header.Version);
             writer.Write(animData.Header.AnimCount);
             for (int i = 0; i < animData.Animation.Count<cAnimation>(); i++)
             {
                 cAnimation animation = animData.Animation[i];
                 writer.Write(encoding.GetBytes(animation.SkaPath).Length);
                 writer.Write(encoding.GetBytes(animation.SkaPath));
                 writer.Write(encoding.GetBytes(animation.AnimeName).Length);
                 writer.Write(encoding.GetBytes(animation.AnimeName));
                 writer.Write(animation.fps);
                 writer.Write(animation.last_frame);
                 writer.Write(animation.extra_val1);
                 writer.Write(animation.extra_val2);
                 writer.Write(animation.extra_val3);
                 writer.Write(animation.BoneAnim.Count<cJointAnim>());
                 for (int j = 0; j < animation.BoneAnim.Count<cJointAnim>(); j++)
                 {
                     cJointAnim anim = animation.BoneAnim[j];
                     writer.Write(encoding.GetBytes(anim.JointName).Length);
                     writer.Write(encoding.GetBytes(anim.JointName));
                     int index = 0;
                     while (index < 12)
                     {
                         writer.Write(numArray[index]);
                         index++;
                     }
                     writer.Write(anim.Positions.Count<cPositionKeyFrame>());
                     index = 0;
                     while (index < anim.Positions.Count<cPositionKeyFrame>())
                     {
                         cPositionKeyFrame frame = anim.Positions[index];
                         writer.Write(frame.Frame);
                         writer.Write(frame.Flags);
                         writer.Write(frame.x);
                         writer.Write(frame.y);
                         writer.Write(frame.z);
                         index++;
                     }
                     writer.Write(anim.Rotations.Count<cRotationKeyFrame>());
                     for (index = 0; index < anim.Rotations.Count<cRotationKeyFrame>(); index++)
                     {
                         cRotationKeyFrame frame2 = anim.Rotations[index];
                         writer.Write(frame2.Frame);
                         writer.Write(frame2.Flags);
                         writer.Write(frame2.w);
                         writer.Write(frame2.x);
                         writer.Write(frame2.y);
                         writer.Write(frame2.z);
                     }
                     writer.Write(anim.Unknown);
                 }
                 writer.Write(animation.EndData);
             }
             writer.Close();
         }
         return true;
     }
     catch
     {
         return false;
     }
 }