void CLedgeManagerEdit::Export( const char* fileName ) const { const uint32 totalLedgeObjectsCount = m_ledgeObjects.size(); if (totalLedgeObjectsCount > 0) { CCryFile file; if( false != file.Open( fileName, "wb" ) ) { // Count number of markers ... uint32 totalLedgeMarkersCount = 0; for (uint32 objectIdx = 0; objectIdx < totalLedgeObjectsCount; ++objectIdx) { totalLedgeMarkersCount += m_ledgeObjects[objectIdx].m_markers.size(); } // Prepare buffers ... SLedgeObject ledgeObjectBuffer[MAX_LEDGE_ENTITIES]; SLedgeMarkerBuffer ledgeMarkersBuffer(totalLedgeMarkersCount); uint32 currentMarkerIdx = 0; for (uint32 objectIdx = 0; objectIdx < totalLedgeObjectsCount; ++objectIdx) { SLedgeObject& ledgeObject = ledgeObjectBuffer[objectIdx]; const SLedgeObjectEditor& ledgeObjectEdit = m_ledgeObjects[objectIdx]; ledgeObject.m_entityId = ((ledgeObjectEdit.m_ledgeFlags[LedgeSide_In] & kLedgeFlag_static) == 0) ? ledgeObjectEdit.m_entityId : 0; ledgeObject.m_ledgeFlags[LedgeSide_In] = ledgeObjectEdit.m_ledgeFlags[LedgeSide_In]; ledgeObject.m_ledgeFlags[LedgeSide_Out] = ledgeObjectEdit.m_ledgeFlags[LedgeSide_Out]; ledgeObject.m_ledgeCornerEndAdjustAmount = ledgeObjectEdit.m_ledgeCornerEndAdjustAmount; ledgeObject.m_markersStartIdx = currentMarkerIdx; ledgeObject.m_markersCount = ledgeObjectEdit.m_markers.size(); CRY_ASSERT((ledgeObject.m_markersStartIdx + ledgeObject.m_markersCount) <= totalLedgeMarkersCount); for(size_t markerIdx = 0; markerIdx < ledgeObjectEdit.m_markers.size(); ++markerIdx) { ledgeMarkersBuffer.InsertAt( ledgeObjectEdit.m_markers[markerIdx], currentMarkerIdx + markerIdx ); } currentMarkerIdx += ledgeObject.m_markersCount; } // Write to file... // File version uint32 nFileVersion = LEDGE_DATA_FILE_VERSION; file.Write( &nFileVersion,sizeof(nFileVersion) ); // Ledges and markers info file.Write( &totalLedgeObjectsCount, sizeof(totalLedgeObjectsCount) ); file.Write( &totalLedgeMarkersCount, sizeof(totalLedgeMarkersCount) ); file.Write( &ledgeObjectBuffer[0], sizeof(ledgeObjectBuffer[0]) * totalLedgeObjectsCount ); file.Write( &ledgeMarkersBuffer.pMarkers[0], sizeof(ledgeMarkersBuffer.pMarkers[0]) * ledgeMarkersBuffer.bufferSize ); file.Close(); } } }
static inline void WriteFccCodes(CCryFile& file, const TFourCCSet& fccs, uint32 keyword) { uint32 fcc = keyword; file.Write( &fcc, sizeof(fcc) ); for ( TFourCCSet::const_iterator it = fccs.begin(); it != fccs.end(); ++it ) { fcc = *it; file.Write( &fcc, sizeof(fcc) ); } fcc = eBK_void; file.Write( &fcc, sizeof(fcc) ); }
void CGameVolumesManager::Export( const char* fileName ) const { CCryFile file; if( false != file.Open( fileName, "wb" ) ) { const uint32 maxVertices = 512; Vec3 writeVertexBuffer[maxVertices]; // File version uint32 nFileVersion = GAME_VOLUMES_FILE_VERSION; file.Write( &nFileVersion,sizeof(nFileVersion) ); // Save volume info uint32 nVolumeCount = (uint32)m_volumesData.size(); file.Write( &nVolumeCount, sizeof(nVolumeCount) ); for (uint32 i = 0; i < nVolumeCount; ++i) { const EntityVolume& volumeInfo = m_volumesData[i]; CRY_ASSERT ( volumeInfo.vertices.size() < maxVertices ); uint32 nVertexCount = min( (uint32)volumeInfo.vertices.size(), maxVertices ); uint32 nEntityId = volumeInfo.entityId; f32 fHeight = volumeInfo.height; bool bClosed = volumeInfo.closed; file.Write( &nEntityId, sizeof(nEntityId) ); file.Write( &fHeight, sizeof(fHeight) ); if( nFileVersion > 1 ) { file.Write( &bClosed, sizeof(bClosed) ); } file.Write( &nVertexCount, sizeof(nVertexCount) ); if (nVertexCount > 0) { for (uint32 v = 0; v < nVertexCount; ++v) { writeVertexBuffer[v] = volumeInfo.vertices[v]; } file.Write( &writeVertexBuffer[0], sizeof(writeVertexBuffer[0]) * nVertexCount ); } } file.Close(); } }