Пример #1
0
 /// <summary>
 /// Initializes all parameters of the chunk without performing any load operation.
 /// </summary>
 /// <param name="parent">The parent large terrain file of this chunk</param>
 /// <param name="baseFile">The MPQ-file which contains the general information about placement and doodads</param>
 /// <param name="texFile">The MPQ-stream which contains all the texture related information (MCLY, MCAL, ...)</param>
 /// <param name="offset">The offset inside baseFile and texFile where this chunks MCNK is located</param>
 public ADTChunk(ADTFile parent, Stormlib.MPQFile baseFile, Utils.StreamedMpq texFile, ChunkOffset offset)
 {
     mFile = baseFile;
     mTexFile = texFile;
     mOffset = offset;
     mParent = parent;
 }
Пример #2
0
 public M2AnimationBone(M2Bone bone, M2BoneAnimator Anim, Stormlib.MPQFile f, uint[] gs, Stormlib.MPQFile[] Anims)
 {
     Animator = Anim;
     fileInfo = bone;
     var ap = new M2Animator<Vector3, Vector3>(fileInfo.Translation, f, gs, Anims);
     ap.Load();
     ap.SelectedAnim = 0;
     AnimPos = new PositionAnimator(ap);
     AnimPos.MaxTime = TimeSpan.FromMilliseconds(Anim.Animations[0].Length);
     ap = new M2Animator<Vector3, Vector3>(fileInfo.Scaling, f, gs, Anims);
     ap.Load();
     ap.SelectedAnim = 0;
     AnimScale = new PositionAnimator(ap);
     AnimScale.Default = new Vector3(1, 1, 1);
     AnimScale.MaxTime = TimeSpan.FromMilliseconds(Anim.Animations[0].Length);
     var ar = new M2Animator<Quaternion16, Quaternion>(fileInfo.Rotation, f, gs, Anims);
     ar.Load();
     ar.SelectedAnim = 0;
     AnimRot = new RotationAnimator(ar);
     AnimRot.MaxTime = TimeSpan.FromMilliseconds(Anim.Animations[0].Length);
 }
Пример #3
0
 public ADTChunk(ADTFile parent, Stormlib.MPQFile file, MCIN info)
 {
     mParent = parent;
     mFile = file;
     mInfo = info;
 }
Пример #4
0
        public M2BoneAnimator(Stormlib.MPQFile file, M2Info parent)
        {
            string AnimPath = parent.FileDirectory + parent.ModelName;

            M2Animation[] anims = new M2Animation[parent.Header.nAnimations];
            file.Position = parent.Header.ofsAnimations;
            file.Read(anims);

            Stormlib.MPQFile[] AnimFiles = new Stormlib.MPQFile[parent.Header.nAnimations];
            for (int i = 0; i < parent.Header.nAnimations; ++i)
            {
                string full = AnimPath + anims[i].AnimationID.ToString("D4") + "-" + anims[i].SubAnimationID.ToString("D2") + ".anim";
                if (Stormlib.MPQFile.Exists(full))
                {
                    Console.WriteLine(full);
                    AnimFiles[i] = new Stormlib.MPQFile(full);
                }
            }

            Animations.AddRange(anims);

            this.file = file;
            var bones = new M2Bone[parent.Header.nBones];
            file.Position = parent.Header.ofsBones;
            file.Read(bones);

            foreach (var bone in bones)
            {
                M2AnimationBone ab = new M2AnimationBone(bone, this, file, parent.GlobalSequences, AnimFiles);
                Bones.Add(ab);
                ab.BoneIndex = Bones.Count - 1;
            }
            foreach (var bone in Bones)
            {
                bone.Init();
            }
        }
Пример #5
0
 private void SkipChunk(Stormlib.MPQFile file)
 {
     uint size = file.Read<uint>();
     file.Position += size;
 }
Пример #6
0
 private string ReadSignature(Stormlib.MPQFile file)
 {
     byte[] bytes = file.Read(4);
     bytes = bytes.Reverse().ToArray();
     return Encoding.UTF8.GetString(bytes);
 }