You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
per-particle collision profiles need to load correctly on the PT even when there are nullptr particles
#rb cedric.caillaud [CL 27204769 by michael bao in ue5-main branch]
This commit is contained in:
@@ -3696,18 +3696,17 @@ void FGeometryCollectionPhysicsProxy::UpdatePerParticleFilterData_External(const
|
||||
{
|
||||
Chaos::FWritePhysicsObjectInterface_Internal Interface= Chaos::FPhysicsObjectInternalInterface::GetWrite();
|
||||
|
||||
int32 ParticleIndex = 0;
|
||||
for (const FParticleCollisionFilterData& Data : PerParticleData)
|
||||
{
|
||||
Chaos::FPhysicsObjectHandle Object = PhysicsObjects[ParticleIndex].Get();
|
||||
if (Data.bIsValid && Object)
|
||||
if (Data.bIsValid && Data.ParticleIndex != INDEX_NONE)
|
||||
{
|
||||
TArrayView<Chaos::FPhysicsObjectHandle> ParticleView{ &Object, 1 };
|
||||
Interface.UpdateShapeCollisionFlags(ParticleView, Data.bSimEnabled, Data.bQueryEnabled);
|
||||
Interface.UpdateShapeFilterData(ParticleView, Data.QueryFilter, Data.SimFilter);
|
||||
if (Chaos::FPhysicsObjectHandle Object = PhysicsObjects[Data.ParticleIndex].Get())
|
||||
{
|
||||
TArrayView<Chaos::FPhysicsObjectHandle> ParticleView{ &Object, 1 };
|
||||
Interface.UpdateShapeCollisionFlags(ParticleView, Data.bSimEnabled, Data.bQueryEnabled);
|
||||
Interface.UpdateShapeFilterData(ParticleView, Data.QueryFilter, Data.SimFilter);
|
||||
}
|
||||
}
|
||||
|
||||
++ParticleIndex;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -447,6 +447,7 @@ public:
|
||||
|
||||
struct FParticleCollisionFilterData
|
||||
{
|
||||
int32 ParticleIndex = INDEX_NONE;
|
||||
bool bIsValid = false;
|
||||
bool bQueryEnabled = false;
|
||||
bool bSimEnabled = false;
|
||||
|
||||
@@ -3514,13 +3514,14 @@ void UGeometryCollectionComponent::LoadCollisionProfiles()
|
||||
|
||||
if (Data)
|
||||
{
|
||||
PerParticleData.Add(*Data);
|
||||
Interface->UpdateShapeCollisionFlags(ParticleView, Data->bSimEnabled, Data->bQueryEnabled);
|
||||
Interface->UpdateShapeFilterData(ParticleView, Data->QueryFilter, Data->SimFilter);
|
||||
}
|
||||
else
|
||||
{
|
||||
PerParticleData.Add({});
|
||||
FCollisionProfileDataCache ParticleData = *Data;
|
||||
ParticleData.ParticleIndex = ParticleIndex;
|
||||
|
||||
PerParticleData.Emplace(MoveTemp(ParticleData));
|
||||
|
||||
// Need to update on the GT too (physics proxy will just enqueue to do it on the PT) or else the changes won't take effect for GT SQ queries.
|
||||
Interface->UpdateShapeCollisionFlags(ParticleView, ParticleData.bSimEnabled, ParticleData.bQueryEnabled);
|
||||
Interface->UpdateShapeFilterData(ParticleView, ParticleData.QueryFilter, ParticleData.SimFilter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user