Void GameplayManager::SavePlayerTown( const PlayerTown * pPlayerTown ) const { // Build file name GChar strFileName[PATHNAME_LENGTH + 1]; GChar strFullPath[PATHNAME_LENGTH + 1]; StringFn->Format( strFileName, TEXT("%s.xml"), pPlayerTown->GetName() ); StringFn->Format( strFullPath, TEXT("%s/%s"), GAMEPLAY_PLAYERTOWNFILES_PATH, strFileName ); // Check file existence GChar strTempPath[PATHNAME_LENGTH + 1]; Bool bFileExists = SystemFn->SearchFile( strTempPath, PATHNAME_LENGTH, GAMEPLAY_PLAYERTOWNFILES_PATH, strFileName ); if ( bFileExists ) { // Move to a temp file StringFn->Format( strTempPath, TEXT("%s.tmp"), strFullPath ); SystemFn->MoveFile( strTempPath, strFullPath, true ); } // Save to XML XMLDocument * pPlayerTownFile = XMLDocument::CreateDocument( TEXT("PlayerTown"), XML_VERSION ); pPlayerTown->Save( pPlayerTownFile ); // Render XML to file Bool bRendered = pPlayerTownFile->Render( strFullPath ); Assert( bRendered ); // Destroy temp file (old version) if ( bFileExists ) { Bool bDestroyed = SystemFn->DestroyFile( strTempPath ); Assert( bDestroyed ); } // Release XML document XMLDocument::DestroyDocument( pPlayerTownFile ); pPlayerTownFile = NULL; }
PlayerTown * GameplayManager::CreatePlayerTown( const GChar * strTownName ) const { // Build file name GChar strFileName[PATHNAME_LENGTH + 1]; GChar strFullPath[PATHNAME_LENGTH + 1]; StringFn->Format( strFileName, TEXT("%s.xml"), strTownName ); StringFn->Format( strFullPath, TEXT("%s/%s"), GAMEPLAY_PLAYERTOWNFILES_PATH, strFileName ); // Check file existence GChar strTempPath[PATHNAME_LENGTH + 1]; Bool bFileExists = SystemFn->SearchFile( strTempPath, PATHNAME_LENGTH, GAMEPLAY_PLAYERTOWNFILES_PATH, strFileName ); if ( bFileExists ) return NULL; // name already taken ! // Create resource SelectMemory( TEXT("Scratch") ); PlayerTown * pPlayerTown = New PlayerTown( strTownName ); UnSelectMemory(); // Save to XML XMLDocument * pPlayerTownFile = XMLDocument::CreateDocument( TEXT("PlayerTown"), XML_VERSION ); pPlayerTown->Save( pPlayerTownFile ); // Render XML to file Bool bRendered = pPlayerTownFile->Render( strFullPath ); Assert( bRendered ); // Release XML document XMLDocument::DestroyDocument( pPlayerTownFile ); pPlayerTownFile = NULL; // Done return pPlayerTown; }