public PmdData(BinaryReader reader) { header = new PmdHeader(reader); if (header.Magic != "Pmd") { throw new Exception("The file is not a valid PMD file."); } vertexList = new PmdVertexList(reader); polyList = new PmdPolyList(reader); materialList = new PmdMaterialList(reader); boneList = new PmdBoneList(reader); ikList = new PmdIKList(reader); skinList = new PmdSkinList(reader); skinIndexList = new PmdSkinIndexList(reader); dispNameList = new PmdDispNameList(reader); boneIndexList = new PmdBoneIndexList(reader); }
public PmdLoader(string Path) { using (var fs = new FileStream(Path, FileMode.Open)) { bs = new BinaryStream(fs); Header = new PmdHeader(bs); Vertex = new PmdVertex[bs.ReadInt32()]; for (int i = 0; i < Vertex.Length; i++) { Vertex[i] = new PmdVertex(bs); } Index = new PmdIndex[bs.ReadInt32() / 3]; for (int i = 0; i < Index.Length; i++) { Index[i] = new PmdIndex(bs); } Material = new PmdMaterial[bs.ReadInt32()]; for (int i = 0; i < Material.Length; i++) { Material[i] = new PmdMaterial(bs); } Bone = new PmdBone[bs.ReadInt16()]; for (int i = 0; i < Bone.Length; i++) { Bone[i] = new PmdBone(bs); } Ik = new PmdIk[bs.ReadInt16()]; for (int i = 0; i < Ik.Length; i++) { Ik[i] = new PmdIk(bs); } Skin = new PmdSkin[bs.ReadInt16()]; for (int i = 0; i < Skin.Length; i++) { Skin[i] = new PmdSkin(bs); } bs.SkipShort(bs.ReadByte()); byte BoneDispCount = bs.ReadByte(); bs.Sjis(50 * BoneDispCount); int bondis = bs.ReadInt32(); for (int i = 0; i < bondis; i++) { bs.ReadInt16(); bs.ReadByte(); } if (bs.ReadByte() == (byte)1) { bs.Sjis(20); bs.Sjis(256); bs.Sjis(20 * Bone.Length); bs.Sjis(20 * (Skin.Length - 1)); bs.Sjis(50 * BoneDispCount); } Toon = new PmdToon[10]; for (int i = 0; i < 10; i++) { Toon[i] = new PmdToon(bs); } Rigid = new PmdRigid[bs.ReadInt32()]; for (int i = 0; i < Rigid.Length; i++) { Rigid[i] = new PmdRigid(bs); } Joint = new PmdJoint[bs.ReadInt32()]; for (int i = 0; i < Joint.Length; i++) { Joint[i] = new PmdJoint(bs); } } }