Exemplo n.º 1
0
// 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;
}