// saveDocument // save the document bool CDocument::saveDocument(wchar_t* lpPath) { m_filePath = lpPath; ofstream file( lpPath ); if ( file.is_open() == false ) return false; initBeginSaveLevel(); CSerializable serializable; char lpString[1024]; // need save level info getData( &serializable ); file << "Game\n"; file << "{\n"; serializable.saveData( file, 1 ); serializable.clear(); file << "}\n"; // update all zone ArrayZoneIter iZone = m_zones.begin(), iEnd = m_zones.end(); while ( iZone != iEnd ) { // write to file zone info CZone *pZone = (*iZone); pZone->sortObjectByID(); pZone->getData( &serializable ); // write zone info sprintf(lpString, "zone_%d", pZone->getID()); file << lpString << "\n"; file << "{\n"; serializable.saveData( file, 1 ); file << "}\n"; // write object info ArrayGameObjectIter i = pZone->getChilds()->begin(), end = pZone->getChilds()->end(); while ( i != end ) { CGameObject *pGameObj = (CGameObject*)(*i); if ( pGameObj->isDummyObject() == false ) { serializable.clear(); pGameObj->getData( &serializable ); sprintf(lpString, "object_%d", pGameObj->getID()); file << lpString << "\n"; file << "{\n"; serializable.saveData( file, 1 ); file << "}\n"; } i++; } serializable.clear(); iZone++; } file.close(); return true; }