void CLanguages::LoadStringTable() { //parse language xml and load strings to table //clear old table m_LanguageStringTable.clear(); m_ObjectStringTable.clear(); stringc file = m_Language->value + stringc("_strings.xml"); IXMLReader* xml = m_FS->createXMLReader(file); if (xml) { //get language name and value from file while(xml->read()) { switch(xml->getNodeType()) { case io::EXN_ELEMENT: { if (stringw("string").equals_ignore_case(xml->getNodeName())) { TLanguageString lang; lang.id = xml->getAttributeValueAsInt(L"id"); lang.value = xml->getAttributeValue(L"value"); m_LanguageStringTable.push_back(lang); } } } } xml->drop(); // don't forget to delete the xml reader } file = m_Language->value + stringc("_go_strings.xml"); xml = m_FS->createXMLReader(file); if (xml) { //get language name and value from file while(xml->read()) { switch(xml->getNodeType()) { case io::EXN_ELEMENT: { if (stringw("string").equals_ignore_case(xml->getNodeName())) { TLanguageString lang; lang.id = xml->getAttributeValueAsInt(L"id"); lang.value = xml->getAttributeValue(L"value"); m_ObjectStringTable.push_back(lang); } } } } xml->drop(); // don't forget to delete the xml reader } }
bool CGWIC_Cell::LoadObjectStates() { path filenm = GWIC_CELLSTORE_DIR; filenm += GetCellFileSuffix(); filenm += ".xml"; IXMLReader* xml = graphics->getFileSystem()->createXMLReader(filenm); if (!xml) { std::cerr << "LoadObjectStates(): can't create xml reader for " << filenm.c_str() << std::endl; return false; } const stringw tg_obj(L"object"); const stringw tg_pos(L"position"); const stringw tg_opt(L"options"); stringw cur_tag; path cfile; CIrrStrParser pos,rot,scl; CGWIC_GameObject* optr = NULL; while (xml->read()) { switch (xml->getNodeType()) { case EXN_ELEMENT: if ((cur_tag.empty()) && (tg_obj.equals_ignore_case(xml->getNodeName()))) { cur_tag = tg_obj; cfile = xml->getAttributeValueSafe(L"file"); optr = new CGWIC_GameObject(cfile,GetCoord(),graphics,physics); if (!optr) std::cerr << "Failed to create object from " << cfile.c_str() << std::endl; else objects.push_back(optr); } else if ((cur_tag == tg_obj) && (optr)) { if (tg_pos.equals_ignore_case(xml->getNodeName())) { pos = xml->getAttributeValueSafe(L"pos"); rot = xml->getAttributeValueSafe(L"rot"); scl = xml->getAttributeValueSafe(L"scale"); optr->SetPos(pos.ToVector3f()); optr->SetScale(scl.ToVector3f()); optr->SetRot(rot.ToVector3f()); } else if (tg_pos.equals_ignore_case(xml->getNodeName())) { optr->SetPhysical(xml->getAttributeValueAsInt(L"physical")); optr->SetEnabled(xml->getAttributeValueAsInt(L"enabled")); } } break; case EXN_ELEMENT_END: cur_tag = L""; optr = NULL; break; default: break; } } xml->drop(); return false; }
bool CGWIC_BodyPart::LoadModelFile(irr::io::path fname) { IXMLReader* mio = irDevice->getFileSystem()->createXMLReader(fname); if (!mio) return false; std::cout << "Reading model XML: " << fname.c_str() << std::endl; const stringw mt_model(L"Model"); const stringw mt_inslot(L"InSlot"); const stringw mt_outslot(L"OutSlot"); const stringw mt_collision(L"Collision"); const stringw mt_colbox(L"StandardBox"); const stringw mt_colsph(L"StandardSphere"); const stringw mt_coltri(L"TriMeshShape"); const stringw mt_colcvx(L"ConvexHull"); const stringw mt_colgim(L"GImpact"); GWIC_BPSlot cslot; CIrrStrParser strparse; nocollision = true; //in case we can't load or found collision shape model while (mio->read()) { if (mt_model.equals_ignore_case(mio->getNodeName())) { mesh = scManager->getMesh(GWIC_BPARTS_DIR+mio->getAttributeValueSafe(L"file")); if (mesh) root = scManager->addAnimatedMeshSceneNode( mesh,parent,GWIC_PICKABLE_MASK | GWIC_ACTOR_MASK); if (root) { root->updateAbsolutePosition(); root->setMaterialFlag(EMF_NORMALIZE_NORMALS,true); ITriangleSelector* sel = scManager->createTriangleSelector(mesh,root); root->setTriangleSelector(sel); sel->drop(); } //TODO: texturing } else if (mt_inslot.equals_ignore_case(mio->getNodeName())) { strparse = mio->getAttributeValueSafe(L"position"); slot_in.posit = strparse.ToVector3f(); strparse = mio->getAttributeValueSafe(L"rotation"); slot_in.rotat = strparse.ToVector3f(); strparse = mio->getAttributeValueSafe(L"axis"); slot_in.axis = strparse.ToVector3f(); } else if (mt_outslot.equals_ignore_case(mio->getNodeName())) { cslot.ID = mio->getAttributeValueAsInt(L"ID"); strparse = mio->getAttributeValueSafe(L"position"); cslot.posit = strparse.ToVector3f(); strparse = mio->getAttributeValueSafe(L"rotation"); cslot.rotat = strparse.ToVector3f(); strparse = mio->getAttributeValueSafe(L"axis"); cslot.axis = strparse.ToVector3f(); slot_outs.push_back(cslot); } else if (mt_collision.equals_substring_ignore_case(mio->getNodeName())) { mass = mio->getAttributeValueAsFloat(L"mass"); stringw data = mio->getAttributeValueSafe(L"type"); nocollision = false; if (data.equals_substring_ignore_case(mt_colbox)) coltype = ECST_BOX; else if (data.equals_substring_ignore_case(mt_colsph)) coltype = ECST_SPHERE; else if (data.equals_substring_ignore_case(mt_coltri)) coltype = ECST_BVHTRIMESH; else if (data.equals_substring_ignore_case(mt_colcvx)) coltype = ECST_CONVEXHULL; else if (data.equals_substring_ignore_case(mt_colgim)) coltype = ECST_GIMPACT; else { std::cerr << "Collision model unknown: " << data.c_str() << std::endl; nocollision = true; } //colmesh = scManager->getMesh(mio->getAttributeValueSafe(L"file")); } } mio->drop(); return true; }