Esempio n. 1
0
        public static MvdDocument Parse(Stream stream)
        {
            var rt = new MvdDocument();
            var systemEncoding = Encoding.GetEncoding(932);

            // leave open
            var br = new BinaryReader(stream);
            var header = ReadMvdString(br, 30, systemEncoding);

            if (header != DisplayName)
                throw new InvalidOperationException("invalid format");

            rt.Version = br.ReadSingle();

            if (rt.Version >= 2)
                throw new NotSupportedException("specified format version not supported");

            switch (br.ReadByte())
            {
                case 0:
                    rt.Encoding = Encoding.Unicode;

                    break;
                case 1:
                default:
                    rt.Encoding = Encoding.UTF8;

                    break;
            }

            while (br.GetRemainingLength() > 1)
                rt.Objects.Add(MvdObject.Parse(rt, br));

            return rt;
        }
Esempio n. 2
0
        protected override void ReadExtensionRegion(MvdDocument document, MvdObject obj, BinaryReader br)
        {
            if (br.GetRemainingLength() >= 4)
                this.StageCount = br.ReadInt32();

            if (this.MinorType >= 2)
                this.ParentClipId = br.ReadInt32();
        }
Esempio n. 3
0
        protected override void ReadExtensionRegion(MvdDocument document, MvdObject obj, BinaryReader br)
        {
            if (br.GetRemainingLength() >= 4)
                this.IKBones = Enumerable.Range(0, br.ReadInt32()).Select(_ => br.ReadInt32()).ToArray();

            if (this.MinorType >= 3)
                this.ModelRelationCount = br.ReadInt32();
        }
Esempio n. 4
0
        public static MvdProjectFrame Parse(MvdProjectData pd, BinaryReader br)
        {
            var rt = new MvdProjectFrame
            {
                FrameTime = br.ReadInt64(),
            };

            if (pd.MinorType >= 1)
            {
                rt.Gravity = br.ReadSingle();
                rt.GravityVector = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), };
            }

            rt.SelfShadowModel = (MvdSelfShadowModel)br.ReadInt32();
            rt.SelfShadowDistance = br.ReadSingle();

            if (pd.MinorType >= 1 || br.GetRemainingLength() >= 4)
                rt.SelfShadowDeep = br.ReadSingle();

            return rt;
        }
Esempio n. 5
0
        public static MvdObject Parse(MvdDocument document, BinaryReader br)
        {
            var rt = new MvdObject();

            rt.ObjectName = document.Encoding.GetString(br.ReadSizedBuffer());
            rt.EnglishObjectName = document.Encoding.GetString(br.ReadSizedBuffer());
            rt.KeyFps = br.ReadSingle();
            br.ReadSizedBuffer();	// reservedSize / reserved

            while (br.GetRemainingLength() > 1)
            {
                var section = MvdSection.Parse(document, rt, br);

                if (section == null)
                    break;

                rt.Sections.Add(section);
            }

            return rt;
        }
Esempio n. 6
0
 protected override void ReadExtensionRegion(MvdDocument document, BinaryReader br)
 {
     if (br.GetRemainingLength() >= 4)
         this.IKBones = Enumerable.Range(0, br.ReadInt32()).Select(_ => br.ReadInt32()).ToArray();
 }
Esempio n. 7
0
 protected override void ReadExtensionRegion(MvdDocument document, BinaryReader br)
 {
     if (br.GetRemainingLength() >= 4)
         this.StageCount = br.ReadInt32();
 }
Esempio n. 8
0
 protected override void ReadExtensionRegion(MvdDocument document, MvdObject obj, BinaryReader br)
 {
     if (br.GetRemainingLength() >= 4)
         this.Parameters = Enumerable.Range(0, br.ReadInt32()).Select(_ => MvdEffectParameter.Parse(br)).ToList();
 }
Esempio n. 9
0
        public static VmdDocument Parse(Stream stream)
        {
            var rt = new VmdDocument();
            // leave open
            var br = new BinaryReader(stream);
            var header = ReadVmdString(br, 30);

            if (header == "Vocaloid Motion Data file")
                rt.Version = VmdVersion.MMDVer2;
            else if (header == "Vocaloid Motion Data 0002")
                rt.Version = VmdVersion.MMDVer3;
            else
                throw new InvalidOperationException("invalid format");

            rt.ModelName = ReadVmdString(br, rt.Version == VmdVersion.MMDVer2 ? 10 : 20);

            rt.BoneFrames = ReadBoneFrames(br).ToList();
            rt.MorphFrames = ReadMorphFrames(br).ToList();
            rt.CameraFrames = ReadCameraFrames(br, rt.Version).ToList();
            rt.LightFrames = ReadLightFrames(br).ToList();

            if (br.GetRemainingLength() > 4)
                rt.SelfShadowFrames = ReadSelfShadowFrames(br).ToList();

            if (br.GetRemainingLength() > 4)
                rt.PropertyFrames = ReadPropertyFrames(br).ToList();

            return rt;
        }
Esempio n. 10
0
        public static MvdDocument Parse(Stream stream)
        {
            var rt = new MvdDocument();
            var systemEncoding = Encoding.GetEncoding(932);

            // leave open
            var br = new BinaryReader(stream);
            var header = ReadMvdString(br, 30, systemEncoding);

            if (header != DisplayName)
                throw new InvalidOperationException("invalid format");

            rt.Version = br.ReadSingle();

            if (rt.Version >= 2)
                throw new NotSupportedException("specified format version not supported");

            switch (br.ReadByte())
            {
                case 0:
                    rt.Encoding = Encoding.Unicode;

                    break;
                case 1:
                default:
                    rt.Encoding = Encoding.UTF8;

                    break;
            }

            rt.ObjectName = rt.Encoding.GetString(br.ReadSizedBuffer());
            br.ReadSizedBuffer();	// objectNameSize2 / objectName2
            rt.KeyFps = br.ReadSingle();
            br.ReadSizedBuffer();	// reservedSize / reserved

            while (br.GetRemainingLength() > 1)
            {
                var section = MvdSection.Parse(rt, br);

                if (section == null)
                    break;

                rt.Sections.Add(section);
            }

            return rt;
        }
Esempio n. 11
0
        public static PmdDocument Parse(Stream stream)
        {
            var rt = new PmdDocument();

            // leave open
            var br = new BinaryReader(stream);
            var header = ReadPmdString(br, 3);

            if (header != "Pmd")
                throw new InvalidOperationException("invalid format");

            rt.Version = br.ReadSingle();

            if (rt.Version >= 2)
                throw new NotSupportedException("specified format version not supported");

            rt.ModelName = ReadPmdString(br, 20);
            rt.Description = ReadPmdString(br, 256);

            for (var i = br.ReadInt32() - 1; i >= 0; i--)
                rt.Vertices.Add(PmdVertex.Parse(br));

            for (var i = br.ReadInt32() - 1; i >= 0; i--)
                rt.Indices.Add(br.ReadUInt16());

            for (var i = br.ReadInt32() - 1; i >= 0; i--)
                rt.Materials.Add(PmdMaterial.Parse(br));

            var bones = br.ReadUInt16();

            for (ushort i = 0; i < bones; i++)
                rt.Bones.Add(PmdBone.Parse(br));

            for (var i = br.ReadUInt16() - 1; i >= 0; i--)
                rt.IK.Add(PmdIK.Parse(br));

            var morphs = br.ReadUInt16();

            for (ushort i = 0; i < morphs; i++)
                rt.Morphs.Add(PmdMorph.Parse(br));

            for (var i = br.ReadByte() - 1; i >= 0; i--)
                rt.VisibleMorphs.Add(br.ReadUInt16());

            var visibleBoneCategories = br.ReadByte();

            for (byte i = 0; i < visibleBoneCategories; i++)
                rt.VisibleBoneCategories.Add(ReadPmdString(br, 50));

            for (var i = br.ReadInt32() - 1; i >= 0; i--)
                rt.VisibleBones.Add(br.ReadInt16(), br.ReadByte());

            if (br.GetRemainingLength() > 0)
            {
                rt.EnglishCompatible = br.ReadBoolean();

                if (rt.EnglishCompatible)
                {
                    rt.EnglishModelName = ReadPmdString(br, 20);
                    rt.EnglishDescription = ReadPmdString(br, 256);

                    for (ushort i = 0; i < bones; i++)
                        rt.EnglishBoneNames.Add(ReadPmdString(br, 20));

                    for (ushort i = 0; i < morphs - 1; i++)
                        rt.EnglishMorphNames.Add(ReadPmdString(br, 20));

                    for (byte i = 0; i < visibleBoneCategories; i++)
                        rt.EnglishVisibleBoneCategories.Add(ReadPmdString(br, 50));
                }

                if (br.GetRemainingLength() > 0)
                    rt.ToonFileNames = Enumerable.Range(0, 10).Select(_ => ReadPmdString(br, 100)).ToList();

                if (br.GetRemainingLength() > 0)
                {
                    for (var i = br.ReadInt32() - 1; i >= 0; i--)
                        rt.Rigids.Add(PmdRigidBody.Parse(br));

                    for (var i = br.ReadInt32() - 1; i >= 0; i--)
                        rt.Constraints.Add(PmdConstraint.Parse(br));
                }
            }

            return rt;
        }
Esempio n. 12
0
        public static PmdDocument Parse(Stream stream)
        {
            var rt = new PmdDocument();

            // leave open
            var br = new BinaryReader(stream);
            var header = ReadPmdString(br, 3);

            if (header != "Pmd")
                throw new InvalidOperationException("invalid format");

            rt.Version = br.ReadSingle();

            if (rt.Version >= 2)
                throw new NotSupportedException("specified format version not supported");

            rt.ModelName = ReadPmdString(br, 20);
            rt.Description = ReadPmdString(br, 256);

            for (var i = br.ReadInt32() - 1; i >= 0; i--)
                rt.Vertices.Add(PmdVertex.Parse(br, rt));

            for (var i = br.ReadInt32() - 1; i >= 0; i--)
                rt.Indices.Add(rt.Vertices[br.ReadUInt16()]);

            for (var i = br.ReadInt32() - 1; i >= 0; i--)
                rt.Materials.Add(PmdMaterial.Parse(br));

            Enumerable.Range(0, br.ReadUInt16()).Select(_ =>
            {
                while (rt.Bones.Count <= _)
                    rt.Bones.Add(new PmdBone());

                return rt.Bones[_];
            }).ForEach(_ => _.Parse(br, rt));

            for (var i = br.ReadUInt16() - 1; i >= 0; i--)
                rt.IK.Add(PmdIK.Parse(br, rt));

            var morphs = br.ReadUInt16();
            PmdMorph morphBase = null;

            for (ushort i = 0; i < morphs; i++)
            {
                var m = PmdMorph.Parse(br, rt, morphBase);

                if (m.Kind == PmdMorphKind.None)
                    morphBase = m;
                else
                    rt.Morphs.Add(m);
            }

            for (var i = br.ReadByte() - 1; i >= 0; i--)
                rt.MorphDisplayList.Add(rt.Morphs[br.ReadUInt16() - 1]);

            var visibleBoneCategories = br.ReadByte();

            for (byte i = 0; i < visibleBoneCategories; i++)
                rt.BoneDisplayList.Add(PmdDisplayList.Parse(br));

            for (var i = br.ReadInt32() - 1; i >= 0; i--)
            {
                var bone = rt.Bones[br.ReadInt16()];

                rt.BoneDisplayList[br.ReadByte() - 1].Bones.Add(bone);
            }

            if (br.GetRemainingLength() > 0)
            {
                rt.EnglishCompatible = br.ReadBoolean();

                if (rt.EnglishCompatible)
                {
                    rt.EnglishModelName = ReadPmdString(br, 20);
                    rt.EnglishDescription = ReadPmdString(br, 256);

                    for (ushort i = 0; i < rt.Bones.Count; i++)
                        rt.Bones[i].EnglishName = ReadPmdString(br, 20);

                    for (ushort i = 0; i < morphs - 1; i++)
                        rt.Morphs[i].EnglishName = ReadPmdString(br, 20);

                    for (byte i = 0; i < visibleBoneCategories; i++)
                        rt.BoneDisplayList[i].EnglishName = ReadPmdString(br, 50);
                }

                if (br.GetRemainingLength() > 0)
                    rt.ToonFileNames = Enumerable.Range(0, 10).Select(_ => ReadPmdString(br, 100)).ToList();

                if (br.GetRemainingLength() > 0)
                {
                    for (var i = br.ReadInt32() - 1; i >= 0; i--)
                        rt.Rigids.Add(PmdRigidBody.Parse(br));

                    for (var i = br.ReadInt32() - 1; i >= 0; i--)
                        rt.Constraints.Add(PmdConstraint.Parse(br));
                }
            }

            return rt;
        }