Joint * SkeletonData::readJoint(JsonTree joint, Joint * parent) { Joint * j = new Joint(); if(parent != nullptr){ parent->addChild(j); } std::vector<NodeChild *> children; std::vector<Voxel *> voxels; j->id = joint.getChild( "id" ).getValue<int>(); app::console() << "id: " << j->id << std::endl; // Transform: Object JsonTree transform = joint.getChild("transform"); JsonTree pos = transform.getChild("pos"); app::console() << " jt_pos: x = " << pos.getChild("x").getValue<float>() << " y = " << pos.getChild("y").getValue<float>() << " pos: z = " << pos.getChild("z").getValue<float>() << std::endl; j->setPos(glm::vec3(pos.getChild("x").getValue<float>(), pos.getChild("y").getValue<float>(), pos.getChild("z").getValue<float>()), false); app::console() << " pos: x = " << j->getPos().x << " y = " << j->getPos().y << " pos: z = " << j->getPos().z << std::endl; JsonTree orientation = transform.getChild("orientation"); j->transform->orientation = glm::quat(orientation.getChild("w").getValue<float>(), orientation.getChild("x").getValue<float>(), orientation.getChild("y").getValue<float>(), orientation.getChild("z").getValue<float>()); app::console() << " orientation: x = " << j->transform->orientation.x << " y = " << j->transform->orientation.y << " z = " << j->transform->orientation.z << " w = " << j->transform->orientation.w << std::endl; JsonTree scale = transform.getChild("scaleVector"); j->transform->scaleVector = glm::vec3(scale.getChild("x").getValue<float>(), scale.getChild("y").getValue<float>(), scale.getChild("z").getValue<float>()); app::console() << " scale: x = " << j->transform->scaleVector.x << " y = " << j->transform->scaleVector.y << " z = " << j->transform->scaleVector.z << std::endl; // Voxels: Array JsonTree voxelsJson = joint.getChild("voxels"); unsigned int voxel_index = 0; for (JsonTree::ConstIter voxel = voxelsJson.begin(); voxel != voxelsJson.end(); ++voxel) { // Apparently, getKey DOESN't return an index if there is no key? //JsonTree cJson = childrenJson.getChild(child->getKey()); JsonTree vJson = voxelsJson.getChild(voxel_index); readVoxel(vJson, j); voxel_index++; } // Animations: Objects readAnimations(joint.getChild("animations"), j); // Children: Array JsonTree childrenJson = joint.getChild("children"); unsigned int children_index = 0; for( JsonTree::ConstIter child = childrenJson.begin(); child != childrenJson.end(); ++child ) { // Apparently, getKey DOESN't return an index if there is no key? //JsonTree cJson = childrenJson.getChild(child->getKey()); JsonTree cJson = childrenJson.getChild(children_index); Joint * c = readJoint(cJson, j); children.push_back(c); children_index++; } j->children = children; return j; }
//--------------------------------------------------------------------- void XMLSkeletonSerializer::importSkeleton(const String& filename, Skeleton* pSkeleton) { LogManager::getSingleton().logMessage("XMLSkeletonSerializer: reading XML data from " + filename + "..."); mXMLDoc = new TiXmlDocument(filename.c_str()); mXMLDoc->LoadFile(); TiXmlElement* elem; TiXmlElement* rootElem = mXMLDoc->RootElement(); // Optional blend mode const char* blendModeStr = rootElem->Attribute("blendmode"); if (blendModeStr) { if (String(blendModeStr) == "cumulative") pSkeleton->setBlendMode(ANIMBLEND_CUMULATIVE); else pSkeleton->setBlendMode(ANIMBLEND_AVERAGE); } // Bones elem = rootElem->FirstChildElement("bones"); if (elem) { readBones(pSkeleton, elem); elem = rootElem->FirstChildElement("bonehierarchy"); if (elem) { createHierarchy(pSkeleton, elem) ; elem = rootElem->FirstChildElement("bones"); if (elem) { readBones2(pSkeleton, elem); elem = rootElem->FirstChildElement("animations"); if (elem) { readAnimations(pSkeleton, elem); } elem = rootElem->FirstChildElement("animationlinks"); if (elem) { readSkeletonAnimationLinks(pSkeleton, elem); } } } } LogManager::getSingleton().logMessage("XMLSkeletonSerializer: Finished. Running SkeletonSerializer..." ); }
void XMLModelDefinitionSerializer::readActions(ModelDefinitionPtr modelDef, TiXmlElement* mAnimNode) { TiXmlElement* elem; const char* tmp = 0; bool notfound = true; S_LOG_VERBOSE( "Read Actions" ); for (TiXmlElement* animElem = mAnimNode->FirstChildElement(); animElem != 0; animElem = animElem->NextSiblingElement()) { notfound=false; tmp = animElem->Attribute("name"); if (tmp) { ActionDefinition* actionDef = modelDef->createActionDefinition(tmp); S_LOG_VERBOSE( " Add action : "<< tmp ); tmp = animElem->Attribute("speed"); if (tmp) { actionDef->setAnimationSpeed(Ogre::StringConverter::parseReal(tmp)); } elem = animElem->FirstChildElement("animations"); if (elem) readAnimations(elem, actionDef); elem = animElem->FirstChildElement("sounds"); if (elem) readSounds(elem, actionDef); elem = animElem->FirstChildElement("activations"); if (elem) readActivations(elem, actionDef); } } if(notfound) { S_LOG_VERBOSE( "No actions found." ); } }
void GameDatas::read(QString path){ readVariablesSwitches(path); m_commonEventsDatas->read(path); readSystem(path); readItems(path); readSkills(path); readBattleSystem(path); readWeapons(path); readArmors(path); readHeroes(path); readMonsters(path); readTroops(path); readClasses(path); readTilesets(path); readAnimations(path); readStatus(path); readTitleScreenGameOver(path); m_isDatasRead = true; }
//--------------------------------------------------------------------- void XMLSkeletonSerializer::importSkeleton(const String& filename, Skeleton* pSkeleton) { LogManager::getSingleton().logMessage("XMLSkeletonSerializer: reading XML data from " + filename + "..."); mXMLDoc = new TiXmlDocument(filename); mXMLDoc->LoadFile(); TiXmlElement* elem; TiXmlElement* rootElem = mXMLDoc->RootElement(); // Bones elem = rootElem->FirstChildElement("bones"); if (elem) { readBones(pSkeleton, elem); elem = rootElem->FirstChildElement("bonehierarchy"); if (elem) { createHierarchy(pSkeleton, elem) ; elem = rootElem->FirstChildElement("bones"); if (elem) { readBones2(pSkeleton, elem); elem = rootElem->FirstChildElement("animations"); if (elem) { readAnimations(pSkeleton, elem); } elem = rootElem->FirstChildElement("animationlinks"); if (elem) { readSkeletonAnimationLinks(pSkeleton, elem); } } } } LogManager::getSingleton().logMessage("XMLSkeletonSerializer: Finished. Running SkeletonSerializer..." ); }
void OgreMeshReader::readMesh(void) { OSG_OGRE_LOG(("OgreMeshReader::readMesh\n")); bool skelAnim = readBool(_is); bool stop = false; Int16 boneIdxVE = -1; Int16 boneWeightVE = -1; VertexElementStore sharedVertexElements; SubMeshStore subMeshInfo; while(_is) { readChunkHeader(_is); switch(_header.chunkId) { case CHUNK_SUBMESH: readSubMesh(subMeshInfo, sharedVertexElements, skelAnim); break; case CHUNK_GEOMETRY: readGeometry(sharedVertexElements); break; case CHUNK_MESH_SKELETON_LINK: readMeshSkeletonLink(subMeshInfo); break; case CHUNK_MESH_BONE_ASSIGNMENT: readMeshBoneAssignment(sharedVertexElements, boneIdxVE, boneWeightVE); break; case CHUNK_MESH_LOD: readMeshLOD(); break; case CHUNK_MESH_BOUNDS: readMeshBounds(); break; case CHUNK_SUBMESH_NAME_TABLE: readSubMeshNameTable(subMeshInfo); break; case CHUNK_EDGE_LISTS: readEdgeLists(); break; case CHUNK_POSES: readPoses(); break; case CHUNK_ANIMATIONS: readAnimations(); break; case CHUNK_TABLE_EXTREMES: readTableExtremes(); break; default: OSG_OGRE_LOG(("OgreMeshReader::readMesh: Unknown chunkId '0x%x'\n", _header.chunkId)); stop = true; break; }; if(stop == true) { skip(_is, -_chunkHeaderSize); break; } } if(boneIdxVE >= 0 || boneWeightVE >= 0) { verifyBoneAssignment(sharedVertexElements, boneIdxVE, boneWeightVE); } SubMeshStore::iterator smIt = subMeshInfo.begin(); SubMeshStore::iterator smEnd = subMeshInfo.end (); for(; smIt != smEnd; ++smIt) { if((*smIt).sharedVertex == true) { constructSubMesh(*smIt, sharedVertexElements); } else { constructSubMesh(*smIt, (*smIt).vertexElements); } } }