190 lines
5.9 KiB
C++
190 lines
5.9 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "DataWrappers/ChaosVDQueryDataWrappers.h"
|
|
|
|
#include "DataWrappers/ChaosVDDataSerializationMacros.h"
|
|
#include "UObject/FortniteMainBranchObjectVersion.h"
|
|
|
|
|
|
bool FChaosVDCollisionResponseParams::Serialize(FArchive& Ar)
|
|
{
|
|
Ar << bHasValidData;
|
|
if (!bHasValidData)
|
|
{
|
|
return !Ar.IsError();
|
|
}
|
|
|
|
Ar << FlagsPerChannel;
|
|
|
|
return !Ar.IsError();
|
|
}
|
|
|
|
bool FChaosVDCollisionObjectQueryParams::Serialize(FArchive& Ar)
|
|
{
|
|
Ar << bHasValidData;
|
|
if (!bHasValidData)
|
|
{
|
|
return !Ar.IsError();
|
|
}
|
|
|
|
Ar << ObjectTypesToQuery;
|
|
Ar << IgnoreMask;
|
|
|
|
return !Ar.IsError();
|
|
}
|
|
|
|
bool FChaosVDCollisionQueryParams::Serialize(FArchive& Ar)
|
|
{
|
|
Ar << bHasValidData;
|
|
if (!bHasValidData)
|
|
{
|
|
return !Ar.IsError();
|
|
}
|
|
|
|
Ar << TraceTag;
|
|
Ar << OwnerTag;
|
|
Ar << IgnoredActorsIDs;
|
|
Ar << IgnoredComponentsNames;
|
|
Ar << IgnoredActorsNames;
|
|
|
|
EChaosVDCollisionQueryParamsFlags PackedQueryFlags = EChaosVDCollisionQueryParamsFlags::None;
|
|
|
|
// Note: When the UI is done to show the enums in the same way we show these bitfiedls as read only booleans in CVD, we can remove all
|
|
// this macro boilerplate and just serialize the the flags directly
|
|
if (Ar.IsLoading())
|
|
{
|
|
Ar << PackedQueryFlags;
|
|
CVD_UNPACK_BITFIELD_DATA(bTraceComplex, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::TraceComplex);
|
|
CVD_UNPACK_BITFIELD_DATA(bFindInitialOverlaps, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::FindInitialOverlaps);
|
|
CVD_UNPACK_BITFIELD_DATA(bReturnFaceIndex, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::ReturnFaceIndex);
|
|
CVD_UNPACK_BITFIELD_DATA(bReturnPhysicalMaterial, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::ReturnPhysicalMaterial);
|
|
CVD_UNPACK_BITFIELD_DATA(bIgnoreBlocks, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::IgnoreBlocks);
|
|
CVD_UNPACK_BITFIELD_DATA(bIgnoreTouches, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::IgnoreTouches);
|
|
CVD_UNPACK_BITFIELD_DATA(bSkipNarrowPhase, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::SkipNarrowPhase);
|
|
CVD_UNPACK_BITFIELD_DATA(bTraceIntoSubComponents, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::TraceIntoSubComponents);
|
|
CVD_UNPACK_BITFIELD_DATA(bReplaceHitWithSubComponents, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::ReplaceHitWithSubComponents);
|
|
}
|
|
else
|
|
{
|
|
CVD_PACK_BITFIELD_DATA(bTraceComplex, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::TraceComplex);
|
|
CVD_PACK_BITFIELD_DATA(bFindInitialOverlaps, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::FindInitialOverlaps);
|
|
CVD_PACK_BITFIELD_DATA(bReturnFaceIndex, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::ReturnFaceIndex);
|
|
CVD_PACK_BITFIELD_DATA(bReturnPhysicalMaterial, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::ReturnPhysicalMaterial);
|
|
CVD_PACK_BITFIELD_DATA(bIgnoreBlocks, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::IgnoreBlocks);
|
|
CVD_PACK_BITFIELD_DATA(bIgnoreTouches, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::IgnoreTouches);
|
|
CVD_PACK_BITFIELD_DATA(bSkipNarrowPhase, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::SkipNarrowPhase);
|
|
CVD_PACK_BITFIELD_DATA(bTraceIntoSubComponents, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::TraceIntoSubComponents);
|
|
CVD_PACK_BITFIELD_DATA(bReplaceHitWithSubComponents, PackedQueryFlags, EChaosVDCollisionQueryParamsFlags::ReplaceHitWithSubComponents);
|
|
Ar << PackedQueryFlags;
|
|
}
|
|
|
|
return !Ar.IsError();
|
|
}
|
|
|
|
bool FChaosVDQueryFastData::Serialize(FArchive& Ar)
|
|
{
|
|
Ar << bHasValidData;
|
|
if (!bHasValidData)
|
|
{
|
|
return !Ar.IsError();
|
|
}
|
|
|
|
Ar << Dir;
|
|
Ar << InvDir;
|
|
Ar << CurrentLength;
|
|
Ar << InvDir;
|
|
|
|
EChaosVDQueryFastDataParallelFlags PackedFlags = EChaosVDQueryFastDataParallelFlags::None;
|
|
|
|
|
|
// Note: When the UI is done to show the enums in the same way we show these bitfiedls as read only booleans in CVD, we can remove all
|
|
// this macro boilerplate and just serialize the the flags directly
|
|
if (Ar.IsLoading())
|
|
{
|
|
Ar << PackedFlags;
|
|
|
|
CVD_UNPACK_BITFIELD_DATA(bParallel0, PackedFlags, EChaosVDQueryFastDataParallelFlags::Parallel0);
|
|
CVD_UNPACK_BITFIELD_DATA(bParallel1, PackedFlags, EChaosVDQueryFastDataParallelFlags::Parallel1);
|
|
CVD_UNPACK_BITFIELD_DATA(bParallel2, PackedFlags, EChaosVDQueryFastDataParallelFlags::Parallel2);
|
|
}
|
|
else
|
|
{
|
|
CVD_PACK_BITFIELD_DATA(bParallel0, PackedFlags, EChaosVDQueryFastDataParallelFlags::Parallel0);
|
|
CVD_PACK_BITFIELD_DATA(bParallel1, PackedFlags, EChaosVDQueryFastDataParallelFlags::Parallel1);
|
|
CVD_PACK_BITFIELD_DATA(bParallel2, PackedFlags, EChaosVDQueryFastDataParallelFlags::Parallel2);
|
|
|
|
Ar << PackedFlags;
|
|
}
|
|
|
|
return !Ar.IsError();
|
|
}
|
|
|
|
bool FChaosVDQueryHitData::Serialize(FArchive& Ar)
|
|
{
|
|
Ar << bHasValidData;
|
|
|
|
if (!bHasValidData)
|
|
{
|
|
return !Ar.IsError();
|
|
}
|
|
|
|
Ar << Distance;
|
|
Ar << FaceIdx;
|
|
Ar << Flags;
|
|
Ar << WorldPosition;
|
|
Ar << WorldNormal;
|
|
Ar << FaceNormal;
|
|
Ar << bHasValidData;
|
|
|
|
return !Ar.IsError();
|
|
}
|
|
|
|
bool FChaosVDQueryVisitStep::Serialize(FArchive& Ar)
|
|
{
|
|
Ar << bHasValidData;
|
|
if (!bHasValidData)
|
|
{
|
|
return !Ar.IsError();
|
|
}
|
|
|
|
Ar << OwningQueryID;
|
|
Ar << Type;
|
|
Ar << ShapeIndex;
|
|
Ar << ParticleIndex;
|
|
Ar << ParticleTransform;
|
|
Ar << HitType;
|
|
Ar << HitData;
|
|
|
|
Ar << QueryFastData;
|
|
|
|
Ar.UsingCustomVersion(FFortniteMainBranchObjectVersion::GUID);
|
|
if (Ar.CustomVer(FFortniteMainBranchObjectVersion::GUID) >= FFortniteMainBranchObjectVersion::AdditionalGameThreadDataSupportInChaosVisualDebugger)
|
|
{
|
|
Ar << RejectReason;
|
|
}
|
|
|
|
return !Ar.IsError();
|
|
}
|
|
|
|
bool FChaosVDQueryDataWrapper::Serialize(FArchive& Ar)
|
|
{
|
|
Ar << ID;
|
|
Ar << ParentQueryID;
|
|
Ar << WorldSolverID;
|
|
Ar << bIsRetryQuery;
|
|
Ar << InputGeometryKey;
|
|
Ar << GeometryOrientation;
|
|
Ar << Type;
|
|
Ar << Mode;
|
|
Ar << StartLocation;
|
|
Ar << EndLocation;
|
|
Ar << CollisionChannel;
|
|
Ar << CollisionQueryParams;
|
|
Ar << CollisionResponseParams;
|
|
Ar << CollisionObjectQueryParams;
|
|
|
|
// Hits and steps are intentionally not serialized as they are recorded as separated events, and reconstructed during trace analysis
|
|
|
|
return !Ar.IsError();
|
|
}
|