bool GenmeshAsset::SetSocketTransform(const char* socketName, const SocketDescriptor& desc) { iSkeletonSocket* sock = skeleton->FindSocket (socketName); if (!sock) return false; sock->GetFactory()->SetName(desc.find("Name")->second.second.c_str()); iSkeletonBone* bone = skeleton->FindBone(desc.find("Bone")->second.second.c_str()); if (bone) sock->SetBone(bone); csVector3 offset; if (sscanf(desc.find("Offset")->second.second.c_str(), "%f, %f, %f", &offset[0], &offset[1], &offset[2]) != 3) return false; csReversibleTransform trans = sock->GetTransform(); trans.SetOrigin(offset); sock->SetTransform(trans); csVector3 rot; if (sscanf(desc.find("Rotation")->second.second.c_str(), "%f, %f, %f", &rot[0], &rot[1], &rot[2]) != 3) return false; csReversibleTransform transr = sock->GetTransform(); csMatrix3 m; m *= csXRotMatrix3 (rot.x); m *= csYRotMatrix3 (rot.y); m *= csZRotMatrix3 (rot.z); transr.SetO2T(m); sock->SetTransform(transr); return true; }
bool AnimeshAsset::SetSocketTransform(const char* socketName, const SocketDescriptor& desc) { uint sockf = animeshsprite->FindSocket(socketName); if (sockf == (uint)~0) return false; CS::Mesh::iAnimatedMeshSocket* sock = animeshstate->GetSocket(sockf); if (!sock) return false; sock->GetFactory()->SetName(desc.find("Name")->second.second.c_str()); int bone; sscanf(desc.find("Bone")->second.second.c_str(), "%d", &bone); sock->GetFactory()->SetBone(bone); csVector3 offset; if (sscanf(desc.find("Offset")->second.second.c_str(), "%f, %f, %f", &offset[0], &offset[1], &offset[2]) != 3) return false; //csReversibleTransform trans = sock->GetFactory()->GetTransform(); csReversibleTransform trans = sock->GetTransform(); trans.SetOrigin(offset); //sock->GetFactory()->SetTransform(trans); sock->SetTransform(trans); csVector3 rot; if (sscanf(desc.find("Rotation")->second.second.c_str(), "%f, %f, %f", &rot[0], &rot[1], &rot[2]) != 3) return false; //csReversibleTransform transr = sock->GetFactory()->GetTransform(); csReversibleTransform transr = sock->GetTransform(); csMatrix3 m; m *= csXRotMatrix3 (rot.x); m *= csYRotMatrix3 (rot.y); m *= csZRotMatrix3 (rot.z); transr.SetO2T(m); //sock->GetFactory()->SetTransform(transr); sock->SetTransform(transr); return true; }