[UpdateAfter(typeof(EndColliderBakingSystem))]
[WorldSystemFilter(WorldSystemFilterFlags.BakingSystem)]
public partial struct FracturableColliderConversionSystem : ISystem
{
private BlobAssetStore blobAssetStore;
public void OnCreate(ref SystemState state)
{
this.blobAssetStore = state.World.GetExistingSystemManaged<BakingSystem>().BlobAssetStore;
}
public void OnUpdate(ref SystemState state)
{
foreach (var (fracturableState, physicsCategory, collider) in SystemAPI
.Query<RefRW<FracturableState>, RefRO<PhysicsCategoryBaking>, RefRO<PhysicsCollider>>().WithOptions(EntityQueryOptions.IncludePrefab))
{
var clone = collider.ValueRO.Value.Value.Clone();
var filter = clone.Value.GetCollisionFilter();
filter.BelongsTo = physicsCategory.ValueRO.FracturedFilter.Value;
clone.Value.SetCollisionFilter(filter);
this.blobAssetStore.TryAdd(ref clone);
fracturableState.ValueRW.FracturedCollider = clone;
}
}
}```