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);
        }
Example #2
0
        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);
        }