public static LayerChunkTypeGroup BuildLayerChunkTypeGroup(ComponentSystemBase system) { LayerChunkTypeGroup result = new LayerChunkTypeGroup { collider = system.GetArchetypeChunkComponentType <Collider>(true), translation = system.GetArchetypeChunkComponentType <Translation>(true), rotation = system.GetArchetypeChunkComponentType <Rotation>(true), scale = system.GetArchetypeChunkComponentType <PhysicsScale>(true), parent = system.GetArchetypeChunkComponentType <Parent>(true), localToWorld = system.GetArchetypeChunkComponentType <LocalToWorld>(true), entity = system.GetArchetypeChunkEntityType() }; return(result); }
public static JobHandle BuildCollisionLayer(EntityQuery query, LayerChunkTypeGroup typeGroup, CollisionLayerSettings settings, Allocator allocator, JobHandle inputDeps, out CollisionLayer collisionLayer) { int count = query.CalculateEntityCount(); collisionLayer = new CollisionLayer(count, settings, allocator); NativeArray <int> layerIndices = new NativeArray <int>(collisionLayer.Count, allocator, NativeArrayOptions.UninitializedMemory); NativeArray <AABB> aabbs = new NativeArray <AABB>(collisionLayer.Count, allocator, NativeArrayOptions.UninitializedMemory); NativeArray <RigidTransform> rigidTransforms = new NativeArray <RigidTransform>(collisionLayer.Count, allocator, NativeArrayOptions.UninitializedMemory); JobHandle jh = new BuildCollisionLayerPart1 { layer = collisionLayer, layerIndices = layerIndices, aabbs = aabbs, rigidTransforms = rigidTransforms, typeGroup = typeGroup }.Schedule(query, inputDeps); jh = new BuildCollisionLayerPart2 { layer = collisionLayer, layerIndices = layerIndices }.Schedule(jh); jh = new BuildCollisionLayerPart3 { layer = collisionLayer, layerIndices = layerIndices, aabbs = aabbs, rigidTranforms = rigidTransforms, typeGroup = typeGroup }.Schedule(query, jh); //layerIndices, aabbs, and rigidTransforms are deallocated in Part3 jh = new BuildCollisionLayerPart4 { layer = collisionLayer }.Schedule(collisionLayer.BucketCount, 1, jh); return(jh); }