OSDN Git Service

add constraint.
[meshio/meshio.git] / src / pmd.cpp
old mode 100644 (file)
new mode 100755 (executable)
index 2a3d556..23059ab
@@ -47,6 +47,20 @@ std::wstring
                                        std::string(english_name, english_name+20)));
        }
 
+std::wstring 
+       RigidBody::getName()const
+       {
+               return text::trim(text::to_WideChar(CP_OEMCP, 
+                                       std::string(name, name+20)));
+       }
+
+std::wstring 
+       Constraint::getName()const
+       {
+               return text::trim(text::to_WideChar(CP_OEMCP, 
+                                       std::string(name, name+20)));
+       }
+
 // 38bytes
 template<class READER>
        void
@@ -684,6 +698,69 @@ bool IO::write(binary::IWriter &w)
                w.writeArray<char>(toon_textures[i].name, 100);
        }
 
+       ////////////////////////////////////////////////////////////
+       // rigid bodies
+       ////////////////////////////////////////////////////////////
+       w.writeValue<DWORD>(rigidbodies.size());
+       for(size_t i=0; i<rigidbodies.size(); ++i){
+               RigidBody &rb=rigidbodies[i];
+               w.writeArray<char>(rb.name, 20);
+               w.writeValue<WORD>(rb.boneIndex);
+               w.writeValue<BYTE>(rb.group);
+               w.writeValue<WORD>(rb.target);
+               w.writeValue<BYTE>(rb.shapeType);
+               w.writeValue<float>(rb.w);
+               w.writeValue<float>(rb.h);
+               w.writeValue<float>(rb.d);
+               w.writeValue<float>(rb.position.x);
+               w.writeValue<float>(rb.position.y);
+               w.writeValue<float>(rb.position.z);
+               w.writeValue<float>(rb.rotation.x);
+               w.writeValue<float>(rb.rotation.y);
+               w.writeValue<float>(rb.rotation.z);
+               w.writeValue<float>(rb.weight);
+               w.writeValue<float>(rb.linearDamping);
+               w.writeValue<float>(rb.angularDamping);
+               w.writeValue<float>(rb.restitution);
+               w.writeValue<float>(rb.friction);
+               w.writeValue<BYTE>(rb.processType);
+       }
+
+       ////////////////////////////////////////////////////////////
+       // constraints
+       ////////////////////////////////////////////////////////////
+       w.writeValue<DWORD>(constraints.size());
+       for(size_t i=0; i<constraints.size(); ++i){
+               Constraint &c=constraints[i];
+               w.writeArray<char>(c.name, 20);
+               w.writeValue<DWORD>(c.rigidA);
+               w.writeValue<DWORD>(c.rigidB);
+               w.writeValue<float>(c.pos.x);
+               w.writeValue<float>(c.pos.y);
+               w.writeValue<float>(c.pos.z);
+               w.writeValue<float>(c.rot.x);
+               w.writeValue<float>(c.rot.y);
+               w.writeValue<float>(c.rot.z);
+               w.writeValue<float>(c.constraintPosMin.x);
+               w.writeValue<float>(c.constraintPosMin.y);
+               w.writeValue<float>(c.constraintPosMin.z);
+               w.writeValue<float>(c.constraintPosMax.x);
+               w.writeValue<float>(c.constraintPosMax.y);
+               w.writeValue<float>(c.constraintPosMax.z);
+               w.writeValue<float>(c.constraintRotMin.x);
+               w.writeValue<float>(c.constraintRotMin.y);
+               w.writeValue<float>(c.constraintRotMin.z);
+               w.writeValue<float>(c.constraintRotMax.x);
+               w.writeValue<float>(c.constraintRotMax.y);
+               w.writeValue<float>(c.constraintRotMax.z);
+               w.writeValue<float>(c.springPos.x);
+               w.writeValue<float>(c.springPos.y);
+               w.writeValue<float>(c.springPos.z);
+               w.writeValue<float>(c.springRot.x);
+               w.writeValue<float>(c.springRot.y);
+               w.writeValue<float>(c.springRot.z);
+       }
+
        return true;
 }
 
@@ -704,6 +781,11 @@ const Vector2* IO::getUV(int index)const
        return &vertices[index].uv;
 }
 
+void Bone::setName(const char *src)
+{
+       strncpy(name, src, 20);
+}
+
 void BoneDisplayName::setName(const char *src)
 {
        strncpy(name, src, 20);
@@ -714,6 +796,27 @@ void BoneDisplayName::setEnglishName(const char *src)
        strncpy(english_name, src, 20);
 }
 
+void Morph::setName(const char *src)
+{
+       strncpy(name, src, 20);
+}
+
+void Morph::setEnglishName(const char *src)
+{
+       strncpy(english_name, src, 20);
+}
+
+void RigidBody::setName(const char *src)
+{
+       strncpy(name, src, 20);
+}
+
+void Constraint::setName(const char *src)
+{
+       strncpy(name, src, 20);
+}
+
+
 } // namespace
 } // namespace