void UModel::Serialize( FArchive& Ar ) { Super::Serialize( Ar ); const int32 StripVertexBufferFlag = 1; FStripDataFlags StripFlags( Ar, GetOuter() && GetOuter()->IsA(ABrush::StaticClass()) ? StripVertexBufferFlag : FStripDataFlags::None ); Ar << Bounds; Vectors.BulkSerialize( Ar ); Points.BulkSerialize( Ar ); Nodes.BulkSerialize( Ar ); if( Ar.IsLoading() ) { for( int32 NodeIndex=0; NodeIndex<Nodes.Num(); NodeIndex++ ) { Nodes[NodeIndex].NodeFlags &= ~(NF_IsNew|NF_IsFront|NF_IsBack); } } Ar << Surfs; Verts.BulkSerialize( Ar ); if( Ar.IsLoading() && Ar.UE4Ver() < VER_UE4_REMOVE_ZONES_FROM_MODEL) { int32 NumZones; Ar << NumSharedSides << NumZones; FZoneProperties DummyZones[FBspNode::MAX_ZONES]; for( int32 i=0; i<NumZones; i++ ) { Ar << DummyZones[i]; } } else { Ar << NumSharedSides; } #if WITH_EDITOR Ar << Polys; LeafHulls.BulkSerialize( Ar ); Leaves.BulkSerialize( Ar ); #else if(Ar.IsLoading()) { UPolys* DummyPolys; Ar << DummyPolys; TArray<int32> DummyLeafHulls; DummyLeafHulls.BulkSerialize( Ar ); TArray<FLeaf> DummyLeaves; DummyLeaves.BulkSerialize( Ar ); } #endif Ar << RootOutside << Linked; if(Ar.IsLoading() && Ar.UE4Ver() < VER_UE4_REMOVE_ZONES_FROM_MODEL) { TArray<int32> DummyPortalNodes; DummyPortalNodes.BulkSerialize( Ar ); } Ar << NumUniqueVertices; // load/save vertex buffer if( StripFlags.IsEditorDataStripped() == false || StripFlags.IsClassDataStripped( StripVertexBufferFlag ) == false ) { Ar << VertexBuffer; } #if WITH_EDITOR if(GIsEditor) { CalculateUniqueVertCount(); } #endif // WITH_EDITOR // serialize the lighting guid if it's there Ar << LightingGuid; Ar << LightmassSettings; }
void UModel::Serialize( FArchive& Ar ) { Super::Serialize( Ar ); const int32 StripVertexBufferFlag = 1; FStripDataFlags StripFlags( Ar, GetOuter() && GetOuter()->IsA(ABrush::StaticClass()) ? StripVertexBufferFlag : FStripDataFlags::None ); Ar << Bounds; if (Ar.IsLoading() && Ar.UE4Ver() < VER_UE4_BSP_UNDO_FIX ) { TTransArray<FVector> OldVectors(this); TTransArray<FVector> OldPoints(this); TTransArray<FBspNode> OldNodes(this); OldVectors.BulkSerialize(Ar); OldPoints.BulkSerialize(Ar); OldNodes.BulkSerialize(Ar); Vectors = OldVectors; Points = OldPoints; Nodes = OldNodes; } else { Vectors.BulkSerialize(Ar); Points.BulkSerialize(Ar); Nodes.BulkSerialize(Ar); } if( Ar.IsLoading() ) { for( int32 NodeIndex=0; NodeIndex<Nodes.Num(); NodeIndex++ ) { Nodes[NodeIndex].NodeFlags &= ~(NF_IsNew|NF_IsFront|NF_IsBack); } } if (Ar.IsLoading() && Ar.UE4Ver() < VER_UE4_BSP_UNDO_FIX ) { TTransArray<FBspSurf> OldSurfs(this); TTransArray<FVert> OldVerts(this); Ar << OldSurfs; OldVerts.BulkSerialize(Ar); Surfs = OldSurfs; Verts = OldVerts; } else { Ar << Surfs; Verts.BulkSerialize(Ar); } if( Ar.IsLoading() && Ar.UE4Ver() < VER_UE4_REMOVE_ZONES_FROM_MODEL) { int32 NumZones; Ar << NumSharedSides << NumZones; FZoneProperties DummyZones[FBspNode::MAX_ZONES]; for( int32 i=0; i<NumZones; i++ ) { Ar << DummyZones[i]; } } else { Ar << NumSharedSides; } #if WITH_EDITOR bool bHasEditorOnlyData = !Ar.IsFilterEditorOnly(); if ( Ar.UE4Ver() < VER_UE4_REMOVE_UNUSED_UPOLYS_FROM_UMODEL ) { bHasEditorOnlyData = true; } // if we are cooking then don't save this stuff out if ( bHasEditorOnlyData ) { Ar << Polys; LeafHulls.BulkSerialize( Ar ); Leaves.BulkSerialize( Ar ); } #else bool bHasEditorOnlyData = !Ar.IsFilterEditorOnly(); if ( Ar.UE4Ver() < VER_UE4_REMOVE_UNUSED_UPOLYS_FROM_UMODEL ) { bHasEditorOnlyData = true; } if((Ar.IsLoading() || Ar.IsSaving()) && bHasEditorOnlyData) { UPolys* DummyPolys = NULL; Ar << DummyPolys; TArray<int32> DummyLeafHulls; DummyLeafHulls.BulkSerialize( Ar ); TArray<FLeaf> DummyLeaves; DummyLeaves.BulkSerialize( Ar ); } #endif Ar << RootOutside << Linked; if(Ar.IsLoading() && Ar.UE4Ver() < VER_UE4_REMOVE_ZONES_FROM_MODEL) { TArray<int32> DummyPortalNodes; DummyPortalNodes.BulkSerialize( Ar ); } Ar << NumUniqueVertices; // load/save vertex buffer if( StripFlags.IsEditorDataStripped() == false || StripFlags.IsClassDataStripped( StripVertexBufferFlag ) == false ) { Ar << VertexBuffer; } #if WITH_EDITOR if(GIsEditor) { CalculateUniqueVertCount(); } #endif // WITH_EDITOR // serialize the lighting guid if it's there Ar << LightingGuid; Ar << LightmassSettings; }