void CGWIC_Cell::SaveObjectStates() { path filenm = GWIC_CELLSTORE_DIR; filenm += GetCellFileSuffix(); filenm += ".xml"; IXMLWriter* xml = graphics->getFileSystem()->createXMLWriter(filenm); if (!xml) { std::cerr << "SaveObjectStates(): can't create writer to " << filenm.c_str() << std::endl; return; } xml->writeXMLHeader(); CIrrStrParser pos,rot,scl; stringw vs; for (u32 i=0; i<objects.size(); i++) { vs = objects[i]->GetFileName(); xml->writeElement(L"object",false,L"file",vs.c_str()); xml->writeLineBreak(); pos += objects[i]->GetPos(); rot += objects[i]->GetRot(); scl += objects[i]->GetScale(); xml->writeElement(L"position",true, L"pos",pos.GetBuff().c_str(), L"rot",rot.GetBuff().c_str(), L"scale",scl.GetBuff().c_str()); xml->writeLineBreak(); xml->writeElement(L"options",true, L"physical",((objects[i]->GetPhysical())?(L"1"):(L"0")), L"enabled",((objects[i]->GetEnabled())?(L"1"):(L"0"))); xml->writeLineBreak(); pos = rot = scl = L""; xml->writeClosingTag(L"object"); xml->writeLineBreak(); } xml->drop(); }
bool kx::SaveGame() { fileSys->changeWorkingDirectoryTo( kxBaseDir ); // kxBaseDir/saves/saveName.kxSave stringw saveName = saveEditBox->getText(); path filename = "./saves/"; filename += saveName; filename += ".kxs"; IWriteFile* file = fileSys->createAndWriteFile( filename ); if (!file) { std::cout<< "Error: couldn't create save file" << endl; return false; } else { IXMLWriter* writer = fileSys->createXMLWriter( file ); if (!writer) { std::cout<< "Error: couldn't create XML writer" << std::endl; return false; } else { writer->writeXMLHeader(); const wchar_t* saveElement = L"kxSave"; writer->writeElement( saveElement ); writer->writeLineBreak(); IAttributes* attr = fileSys->createEmptyAttributes(); attr->addInt( "activeLevelNum", activeLevel->num ); attr->addInt( "activeLevelProgress", activeLevel->progress ); // add more attrib here... attr->write( writer ); attr->drop(); writer->writeClosingTag( saveElement ); writer->drop(); file->drop(); messages = ""; // reset messages += L"Saved "; messages += saveName; messages += L".kxs"; messagesNumLines= 1; return true; } } return false; }
bool CSLevel::savePrefab(CSObject* obj, stringc filename) { CS_LOG(CSLOGTYPE::CSL_DEBUG, "Saving prefab to file %s", filename.c_str()); CS_CHECK_BOOL(obj, CSLOGTYPE::CSL_WARNING, "Warning unable to save prefab. obj is not valid"); _chdir(getApplication()->getDirectory("PrefabDirectory").c_str()); IXMLWriter* writer = getDevice()->getFileSystem()->createXMLWriter(filename); if (!writer) { CS_LOG(CSLOGTYPE::CSL_WARNING, "Warning! unable to create prefab file %s", filename.c_str()); return false; } writer->writeXMLHeader(); stringw name("CSOBJECT"); writer->writeElement(name.c_str(), false, L"TYPE", stringw(obj->getInfo()->getName()).c_str()); writer->writeLineBreak(); IAttributes* attr = getDevice()->getFileSystem()->createEmptyAttributes(getDriver()); SAttributeReadWriteOptions options; obj->serializeAttributes(attr, &options); if (attr->getAttributeCount() != 0) { attr->write(writer); writer->writeLineBreak(); } attr->drop(); writer->writeClosingTag(name.c_str()); writer->writeLineBreak(); writer->writeLineBreak(); writer->drop(); return true; }
void IXMLWriterTest::writeLineBreak() { IWriteFile* fWrite = IFileSystem::createWriteFile( "assets/io/fileXMLEmpty.xml"); IXMLWriter* fxml = IFileSystem::createXMLWriter(fWrite); if (fWrite) fWrite->drop(); fxml->writeElement("fff", false); fxml->writeText("text text text"); fxml->writeLineBreak(); fxml->writeText(" text1 text1 text1"); fxml->writeClosingTag("fff"); if (fxml) fxml->drop(); IReadFile* fRead = IFileSystem::createReadFile( "assets/io/fileXMLEmpty.xml"); IXMLReader* fxmlR = IFileSystem::createXMLReader(fRead); fxmlR->read(); fxmlR->read(); if (fxmlR->getNodeType() != EXNT_TEXT) mes.append( "\n writeLineBreak: element text is not created"); core::stringc strND = core::stringc( "text text text /r text1 text1 text1"); if (!strND.equalsn(fxmlR->getNodeData(), 17)) mes.append( "\n writeLineBreak: correctly writes text content of the"); if (fxmlR) fxmlR->drop(); }
// save the level objects to disk file bool CSLevel::saveToDisk(stringc filename) { // log this event CS_LOG(CSLOGTYPE::CSL_DEBUG, "Saving game data - %s", filename.c_str()); // creat ethe xml writer IXMLWriter* writer = getDevice()->getFileSystem()->createXMLWriter(filename); if (!writer) { CS_LOG(CSLOGTYPE::CSL_WARNING, "Warning! unable to create save file %s", filename.c_str()); return false; } // write the xml header writer->writeXMLHeader(); vector3df pos(0, 0, 0); vector3df tar(0, 0, 0); if (getCamera()) { pos = getCamera()->getPosition(); tar = getCamera()->getTarget(); } // write the camera position and target writer->writeLineBreak(); writer->writeElement(L"CAMERA", false, L"POSITION", stringw(vector3dfToStringc(pos)).c_str(), L"TARGET", stringw(vector3dfToStringc(tar)).c_str() ); writer->writeLineBreak(); writer->writeLineBreak(); // run through thte list of objects CSObject* obj = getObjectFactory()->getObjectManager()->getNextObject(true); while (obj) { // if this is not a debug object, then save it to disk if (!obj->getDebugObject()) { // write the node type stringw name("CSOBJECT"); writer->writeElement(name.c_str(), false, L"TYPE", stringw(obj->getInfo()->getName()).c_str()); writer->writeLineBreak(); // let the object serialize itself into our attributes structure IAttributes* attr = getDevice()->getFileSystem()->createEmptyAttributes(getDriver()); SAttributeReadWriteOptions options; obj->serializeAttributes(attr, &options); // if there are attributes if (attr->getAttributeCount() != 0) { // write the attributes to the xml file attr->write(writer); // make the file pretty writer->writeLineBreak(); } // drop the pointer attr->drop(); // finish writing the xml header / footer writer->writeClosingTag(name.c_str()); writer->writeLineBreak(); writer->writeLineBreak(); } // get the next object obj = getObjectFactory()->getObjectManager()->getNextObject(false); } // drop the pointer writer->drop(); // everything went fine return true; }