public void load(ContentReader input)
        {
            int textures_count = input.ReadInt32();
            loadTextures(input, textures_count);
            int md3_count = input.ReadInt32();
            //read md3 data
            for (int i = 0; i < md3_count; ++i)
            {
                MD3Object o = new MD3Object(TMD3Part.HEAD);
                loadMD3Data(input, o);
                if (o.part == TMD3Part.HEAD)
                    head_md3.Add(o);
                else if (o.part == TMD3Part.UPPER)
                    upper_md3.Add(o);
                else
                    lower_md3.Add(o);
            }
            Debug.Assert(head_md3.Count >= 1, "PK3 invalid format, not found head md3 file!");
            Debug.Assert(upper_md3.Count >= 1, "PK3 invalid format, not found upper md3 file!");
            Debug.Assert(lower_md3.Count >= 1, "PK3 invalid format, not found lower md3 file!");

            int anim_count = input.ReadInt32();
            for (int i = 0; i < anim_count; ++i)
            {
                MD3animation anim = new MD3animation();
                anim.strName = input.ReadString();
                anim.startFrame = input.ReadInt32();
                anim.numFrames = input.ReadInt32();
                anim.loopingFrames = input.ReadInt32();
                anim.framesPerSecond = input.ReadInt32();
                animations.Add(anim.strName, anim);
            }
        }
 public void setAnimation(MD3animation current)
 {
     if (current != null)
     {
         current_frame = current.startFrame;
         finish_animation = false;
     }
     else
     {
         current_frame = 0;
     }
     seconds = 0.0f;
     current_animation = current;
 }
 private void addNewAnimation(string[] s)
 {
     MD3animation anim = new MD3animation();
       int count = 0;
       for (int i = 0; i < s.Length; ++i)
       {
     if (s[i].Length > 0)
     {
       int result;
       if (int.TryParse(s[i], out result))
       {
     switch (count)
     {
       case 0:
         anim.startFrame = result;
         break;
       case 1:
         anim.numFrames = result;
         break;
       case 2:
         anim.loopingFrames = result;
         break;
       case 3:
         anim.framesPerSecond = result;
         break;
     }
     ++count;
       }
       else if (count > 3 && s[i].Length > 4 )
       {
     anim.strName = s[i];
     if (anim.strName.IndexOf("TORSO") >= 0)
     {
       torso_frames += anim.numFrames;
     }
     else if (anim.strName.IndexOf("LEGS") >= 0)
     {
       anim.startFrame -= torso_frames;
     }
     break;
       }
     }
       }
       animations_list.Add(anim);
 }