Esempio n. 1
0
        public static PmxMaterial Parse(BinaryReader br, PmxDocument doc)
        {
            var rt = new PmxMaterial
            {
                Name                 = doc.Header.Encoding.GetString(br.ReadSizedBuffer()),
                EnglishName          = doc.Header.Encoding.GetString(br.ReadSizedBuffer()),
                Diffuse              = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
                Specular             = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
                Power                = br.ReadSingle(),
                Ambient              = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
                Options              = (PmxMaterialOptions)br.ReadByte(),
                EdgeColor            = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
                EdgeSize             = br.ReadSingle(),
                MainTexture          = doc.ReadIndex(br, PmxIndexKind.Texture),
                SubTexture           = doc.ReadIndex(br, PmxIndexKind.Texture),
                SubTextureMode       = (PmxTextureMode)br.ReadByte(),
                UseSharedToonTexture = br.ReadBoolean(),
            };

            rt.ToonTexture = rt.UseSharedToonTexture ? br.ReadByte() : doc.ReadIndex(br, PmxIndexKind.Texture);
            rt.Comment     = doc.Header.Encoding.GetString(br.ReadSizedBuffer());
            rt.IndexCount  = br.ReadInt32();

            return(rt);
        }
Esempio n. 2
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Bones     = new[] { doc.ReadIndex(br, PmxIndexKind.Bone), doc.ReadIndex(br, PmxIndexKind.Bone) };
     this.Weight    = br.ReadSingle();
     this.Center    = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.RangeZero = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.RangeOne  = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
 }
Esempio n. 3
0
        public static PmxDisplayItem Parse(BinaryReader br, PmxDocument doc)
        {
            var rt = new PmxDisplayItem
            {
                Kind = (PmxDisplayItemKind)br.ReadByte(),
            };

            rt.Index = rt.Kind == PmxDisplayItemKind.Bone ? doc.ReadIndex(br, PmxIndexKind.Bone) : doc.ReadIndex(br, PmxIndexKind.Morph);

            return rt;
        }
Esempio n. 4
0
        public static PmxBone Parse(BinaryReader br, PmxDocument doc)
        {
            var rt = new PmxBone
            {
                Name         = doc.ReadString(br),
                EnglishName  = doc.ReadString(br),
                Position     = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
                ParentBone   = doc.ReadIndex(br, PmxIndexKind.Bone),
                Priority     = br.ReadInt32(),
                Capabilities = (PmxBoneCapabilities)br.ReadUInt16(),
            };

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.ConnectToBone))
            {
                rt.ConnectToBone = doc.ReadIndex(br, PmxIndexKind.Bone);
            }
            else
            {
                rt.ConnectToOffset = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }
            };

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.RotationAffected) ||
                rt.Capabilities.HasFlag(PmxBoneCapabilities.MovementAffected))
            {
                rt.AffectedBone  = doc.ReadIndex(br, PmxIndexKind.Bone);
                rt.AffectionRate = br.ReadSingle();
            }

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.FixedAxis))
            {
                rt.FixedAxis = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }
            }
            ;

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.LocalAxis))
            {
                rt.LocalVectorX = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
                rt.LocalVectorZ = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
            }

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.TransformByExternalParent))
            {
                rt.ExternalParentKey = br.ReadInt32();
            }

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.IK))
            {
                rt.IK = PmxIK.Parse(br, doc);
            }

            return(rt);
        }
Esempio n. 5
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.RigidA                 = doc.ReadIndex(br, PmxIndexKind.Rigid);
     this.RigidB                 = doc.ReadIndex(br, PmxIndexKind.Rigid);
     this.Position               = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.Rotation               = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.LinearLowerLimit       = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.LinearUpperLimit       = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.AngularLowerLimit      = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.AngularUpperLimit      = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.LinearSpringStiffness  = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.AngularSpringStiffness = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
 }
Esempio n. 6
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Rigid          = doc.ReadIndex(br, PmxIndexKind.Rigid);
     this.IsLocal        = br.ReadBoolean();
     this.CentralImpulse = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.TorqueImpulse  = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
 }
Esempio n. 7
0
 public static PmxIK Parse(BinaryReader br, PmxDocument doc)
 {
     return new PmxIK
     {
         TargetBone = doc.ReadIndex(br, PmxIndexKind.Bone),
         LoopCount = br.ReadInt32(),
         AngleLimitUnit = br.ReadSingle(),
         BindedBones = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxIKBinding.Parse(br, doc)).ToList(),
     };
 }
Esempio n. 8
0
 public static PmxIK Parse(BinaryReader br, PmxDocument doc)
 {
     return(new PmxIK
     {
         TargetBone = doc.ReadIndex(br, PmxIndexKind.Bone),
         LoopCount = br.ReadInt32(),
         AngleLimitUnit = br.ReadSingle(),
         BindedBones = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxIKBinding.Parse(br, doc)).ToList(),
     });
 }
Esempio n. 9
0
        public static PmxDisplayItem Parse(BinaryReader br, PmxDocument doc)
        {
            var rt = new PmxDisplayItem
            {
                Kind = (PmxDisplayItemKind)br.ReadByte(),
            };

            rt.Index = rt.Kind == PmxDisplayItemKind.Bone ? doc.ReadIndex(br, PmxIndexKind.Bone) : doc.ReadIndex(br, PmxIndexKind.Morph);

            return(rt);
        }
Esempio n. 10
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Material    = doc.ReadIndex(br, PmxIndexKind.Material);
     this.Kind        = (PmxMaterialMorphKind)br.ReadByte();
     this.Diffuse     = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.Specular    = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.Power       = br.ReadSingle();
     this.Ambient     = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.EdgeColor   = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.EdgeSize    = br.ReadSingle();
     this.Texture     = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.SubTexture  = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.ToonTexture = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
 }
Esempio n. 11
0
        public static PmxIKBinding Parse(BinaryReader br, PmxDocument doc)
        {
            var rt = new PmxIKBinding
            {
                Bone = doc.ReadIndex(br, PmxIndexKind.Bone),
                IsAngleLimitEnabled = br.ReadBoolean(),
            };

            if (rt.IsAngleLimitEnabled)
            {
                rt.LowerAngleLimit = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
                rt.HigherAngleLimit = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
            }

            return rt;
        }
Esempio n. 12
0
        public static PmxIKBinding Parse(BinaryReader br, PmxDocument doc)
        {
            var rt = new PmxIKBinding
            {
                Bone = doc.ReadIndex(br, PmxIndexKind.Bone),
                IsAngleLimitEnabled = br.ReadBoolean(),
            };

            if (rt.IsAngleLimitEnabled)
            {
                rt.LowerAngleLimit  = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
                rt.HigherAngleLimit = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
            }

            return(rt);
        }
Esempio n. 13
0
 public static PmxRigidBody Parse(BinaryReader br, PmxDocument doc)
 {
     return(new PmxRigidBody
     {
         Name = doc.ReadString(br),
         EnglishName = doc.ReadString(br),
         RelatedBone = doc.ReadIndex(br, PmxIndexKind.Bone),
         Group = br.ReadByte(),
         CollidableGroups = (PmdRigidGroups)br.ReadUInt16(),
         Shape = (PmdRigidShape)br.ReadByte(),
         Size = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
         Position = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
         Rotation = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
         Mass = br.ReadSingle(),
         LinearDamping = br.ReadSingle(),
         AngularDamping = br.ReadSingle(),
         Restitution = br.ReadSingle(),
         Friction = br.ReadSingle(),
         Kind = (PmxRigidKind)br.ReadByte(),
     });
 }
Esempio n. 14
0
        public static PmxDocument Parse(Stream stream)
        {
            // leave open
            var br     = new BinaryReader(stream);
            var header = Encoding.ASCII.GetString(br.ReadBytes(4));
            var rt     = new PmxDocument();

            if (header != "PMX ")
            {
                throw new InvalidOperationException("invalid format");
            }

            rt.Version = br.ReadSingle();

            if (rt.Version != 2 &&
                rt.Version != 2.1f)
            {
                throw new NotSupportedException("specified format version not supported");
            }

            rt.Header           = PmxHeader.Parse(br);
            rt.ModelInformation = PmxModelInformation.Parse(br, rt);
            rt.Vertices         = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxVertex.Parse(br, rt)).ToList();
            rt.Indices          = Enumerable.Range(0, br.ReadInt32()).Select(_ => rt.ReadIndex(br, PmxIndexKind.Vertex)).ToList();
            rt.Textures         = Enumerable.Range(0, br.ReadInt32()).Select(_ => rt.ReadString(br)).ToList();
            rt.Materials        = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxMaterial.Parse(br, rt)).ToList();
            rt.Bones            = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxBone.Parse(br, rt)).ToList();
            rt.Morphs           = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxMorph.Parse(br, rt)).ToList();
            rt.DisplayList      = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxDisplayList.Parse(br, rt)).ToList();
            rt.Rigids           = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxRigidBody.Parse(br, rt)).ToList();
            rt.Constraints      = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxConstraint.Parse(br, rt)).ToList();

            if (rt.Version > 2)
            {
                rt.SoftBodies = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxSoftBody.Parse(br, rt)).ToList();
            }

            return(rt);
        }
Esempio n. 15
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Morph  = doc.ReadIndex(br, PmxIndexKind.Morph);
     this.Weight = br.ReadSingle();
 }
Esempio n. 16
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Bone           = doc.ReadIndex(br, PmxIndexKind.Bone);
     this.MovementOffset = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.RotationOffset = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
 }
Esempio n. 17
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Vertex = doc.ReadIndex(br, PmxIndexKind.Vertex);
     this.Offset = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
 }
Esempio n. 18
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Rigid = doc.ReadIndex(br, PmxIndexKind.Rigid);
     this.IsLocal = br.ReadBoolean();
     this.CentralImpulse = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.TorqueImpulse = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
 }
Esempio n. 19
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Vertex = doc.ReadIndex(br, PmxIndexKind.Vertex);
     this.Offset = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
 }
Esempio n. 20
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Bone = doc.ReadIndex(br, PmxIndexKind.Bone);
 }
Esempio n. 21
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Bone = doc.ReadIndex(br, PmxIndexKind.Bone);
 }
Esempio n. 22
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Bones = new[] { doc.ReadIndex(br, PmxIndexKind.Bone), doc.ReadIndex(br, PmxIndexKind.Bone) };
     this.Weight = br.ReadSingle();
     this.Center = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.RangeZero = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.RangeOne = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
 }
Esempio n. 23
0
 public static PmxRigidBody Parse(BinaryReader br, PmxDocument doc)
 {
     return new PmxRigidBody
     {
         Name = doc.ReadString(br),
         EnglishName = doc.ReadString(br),
         RelatedBone = doc.ReadIndex(br, PmxIndexKind.Bone),
         Group = br.ReadByte(),
         CollidableGroups = (PmdRigidGroups)br.ReadUInt16(),
         Shape = (PmdRigidShape)br.ReadByte(),
         Size = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
         Position = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
         Rotation = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
         Mass = br.ReadSingle(),
         LinearDamping = br.ReadSingle(),
         AngularDamping = br.ReadSingle(),
         Restitution = br.ReadSingle(),
         Friction = br.ReadSingle(),
         Kind = (PmxRigidKind)br.ReadByte(),
     };
 }
Esempio n. 24
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Material = doc.ReadIndex(br, PmxIndexKind.Material);
     this.Kind = (PmxMaterialMorphKind)br.ReadByte();
     this.Diffuse = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.Specular = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.Power = br.ReadSingle();
     this.Ambient = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.EdgeColor = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.EdgeSize = br.ReadSingle();
     this.Texture = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.SubTexture = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.ToonTexture = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
 }
Esempio n. 25
0
        public static PmxBone Parse(BinaryReader br, PmxDocument doc)
        {
            var rt = new PmxBone
            {
                Name = doc.ReadString(br),
                EnglishName = doc.ReadString(br),
                Position = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
                ParentBone = doc.ReadIndex(br, PmxIndexKind.Bone),
                Priority = br.ReadInt32(),
                Capabilities = (PmxBoneCapabilities)br.ReadUInt16(),
            };

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.ConnectToBone))
                rt.ConnectToBone = doc.ReadIndex(br, PmxIndexKind.Bone);
            else
                rt.ConnectToOffset = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.RotationAffected) ||
                rt.Capabilities.HasFlag(PmxBoneCapabilities.MovementAffected))
            {
                rt.AffectedBone = doc.ReadIndex(br, PmxIndexKind.Bone);
                rt.AffectionRate = br.ReadSingle();
            }

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.FixedAxis))
                rt.FixedAxis = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.LocalAxis))
            {
                rt.LocalVectorX = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
                rt.LocalVectorZ = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
            }

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.TransformByExternalParent))
                rt.ExternalParentKey = br.ReadInt32();

            if (rt.Capabilities.HasFlag(PmxBoneCapabilities.IK))
                rt.IK = PmxIK.Parse(br, doc);

            return rt;
        }
Esempio n. 26
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Morph = doc.ReadIndex(br, PmxIndexKind.Morph);
     this.Weight = br.ReadSingle();
 }
Esempio n. 27
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Bones  = new[] { doc.ReadIndex(br, PmxIndexKind.Bone), doc.ReadIndex(br, PmxIndexKind.Bone) };
     this.Weight = br.ReadSingle();
 }
Esempio n. 28
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Bones = new[] { doc.ReadIndex(br, PmxIndexKind.Bone), doc.ReadIndex(br, PmxIndexKind.Bone) };
     this.Weight = br.ReadSingle();
 }
Esempio n. 29
0
        public static PmxMaterial Parse(BinaryReader br, PmxDocument doc)
        {
            var rt = new PmxMaterial
            {
                Name = doc.Header.Encoding.GetString(br.ReadSizedBuffer()),
                EnglishName = doc.Header.Encoding.GetString(br.ReadSizedBuffer()),
                Diffuse = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
                Specular = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
                Power = br.ReadSingle(),
                Ambient = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
                Options = (PmxMaterialOptions)br.ReadByte(),
                EdgeColor = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() },
                EdgeSize = br.ReadSingle(),
                MainTexture = doc.ReadIndex(br, PmxIndexKind.Texture),
                SubTexture = doc.ReadIndex(br, PmxIndexKind.Texture),
                SubTextureMode = (PmxTextureMode)br.ReadByte(),
                UseSharedToonTexture = br.ReadBoolean(),
            };

            rt.ToonTexture = rt.UseSharedToonTexture ? br.ReadByte() : doc.ReadIndex(br, PmxIndexKind.Texture);
            rt.Comment = doc.Header.Encoding.GetString(br.ReadSizedBuffer());
            rt.IndexCount = br.ReadInt32();

            return rt;
        }
Esempio n. 30
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.RigidA = doc.ReadIndex(br, PmxIndexKind.Rigid);
     this.RigidB = doc.ReadIndex(br, PmxIndexKind.Rigid);
     this.Position = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.Rotation = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.LinearLowerLimit = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.LinearUpperLimit = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.AngularLowerLimit = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.AngularUpperLimit = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.LinearSpringStiffness = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.AngularSpringStiffness = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
 }
Esempio n. 31
0
        public static PmxDocument Parse(Stream stream)
        {
            // leave open
            var br = new BinaryReader(stream);
            var header = Encoding.ASCII.GetString(br.ReadBytes(4));
            var rt = new PmxDocument();

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

            rt.Version = br.ReadSingle();

            if (rt.Version != 2 &&
                rt.Version != 2.1f)
                throw new NotSupportedException("specified format version not supported");

            rt.Header = PmxHeader.Parse(br);
            rt.ModelInformation = PmxModelInformation.Parse(br, rt);
            rt.Vertices = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxVertex.Parse(br, rt)).ToList();
            rt.Indices = Enumerable.Range(0, br.ReadInt32()).Select(_ => rt.ReadIndex(br, PmxIndexKind.Vertex)).ToList();
            rt.Textures = Enumerable.Range(0, br.ReadInt32()).Select(_ => rt.ReadString(br)).ToList();
            rt.Materials = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxMaterial.Parse(br, rt)).ToList();
            rt.Bones = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxBone.Parse(br, rt)).ToList();
            rt.Morphs = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxMorph.Parse(br, rt)).ToList();
            rt.DisplayList = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxDisplayList.Parse(br, rt)).ToList();
            rt.Rigids = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxRigidBody.Parse(br, rt)).ToList();
            rt.Constraints = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxConstraint.Parse(br, rt)).ToList();

            if (rt.Version > 2)
                rt.SoftBodies = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxSoftBody.Parse(br, rt)).ToList();

            return rt;
        }
Esempio n. 32
0
 public override void Read(BinaryReader br, PmxDocument doc)
 {
     this.Bone = doc.ReadIndex(br, PmxIndexKind.Bone);
     this.MovementOffset = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
     this.RotationOffset = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle() };
 }