Exemple #1
0
        protected override JobHandle OnUpdate(JobHandle inputDeps)
        {
            // EntityCommandBuffer ecb = barrier.CreateCommandBuffer () ;
            NativeArray <Entity> na_collisionChecksEntities = group.ToEntityArray(Allocator.TempJob);

            ComponentDataFromEntity <OctreeEntityPair4CollisionData> a_octreeEntityPair4CollisionData = GetComponentDataFromEntity <OctreeEntityPair4CollisionData> ();
            ComponentDataFromEntity <RayData>            a_rayData            = GetComponentDataFromEntity <RayData> ();
            ComponentDataFromEntity <RayMaxDistanceData> a_rayMaxDistanceData = GetComponentDataFromEntity <RayMaxDistanceData> ();

            ComponentDataFromEntity <IsCollidingData> a_isCollidingData = GetComponentDataFromEntity <IsCollidingData> ();



            // Test ray
            // Debug
            // ! Ensure test this only with single, or at most few ray entiities.
            ComponentDataFromEntity <RayEntityPair4CollisionData> a_rayEntityPair4CollisionData = new ComponentDataFromEntity <RayEntityPair4CollisionData> (); // As empty.

            IsRayColliding_Common._DebugRays(ref na_collisionChecksEntities, ref a_rayData, ref a_rayMaxDistanceData, ref a_isCollidingData, ref a_rayEntityPair4CollisionData, false, false);

            na_collisionChecksEntities.Dispose();

            // Test ray
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            // Debug.DrawLine ( ray.origin, ray.origin + ray.direction * 100, Color.red )  ;

            // int i_groupLength = group.CalculateLength () ;

            JobHandle setRayTestJobHandle = new SetRayTestJob
            {
                // a_collisionChecksEntities           = na_collisionChecksEntities,

                ray = ray,
                // a_rayData                           = a_rayData,
                // a_rayMaxDistanceData                = a_rayMaxDistanceData,
            }.Schedule(group, inputDeps);


            JobHandle jobHandle = new Job
            {
                // a_collisionChecksEntities           = na_collisionChecksEntities,

                // Octree entity pair, for collision checks

                a_isActiveTag = GetComponentDataFromEntity <IsActiveTag> (true),

                a_octreeRootNodeData = GetComponentDataFromEntity <RootNodeData> (true),

                nodeBufferElement = GetBufferFromEntity <NodeBufferElement> (true),
                nodeInstancesIndexBufferElement = GetBufferFromEntity <NodeInstancesIndexBufferElement> (true),
                nodeChildrenBufferElement       = GetBufferFromEntity <NodeChildrenBufferElement> (true),
                instanceBufferElement           = GetBufferFromEntity <InstanceBufferElement> (true)
            }.Schedule(group, setRayTestJobHandle);


            return(jobHandle);
        }
        protected override JobHandle OnUpdate(JobHandle inputDeps)
        {
            // EntityCommandBuffer ecb = barrier.CreateCommandBuffer () ;

            EntityArray a_collisionChecksEntities = group.GetEntityArray();

            ComponentDataFromEntity <RayEntityPair4CollisionData> a_rayEntityPair4CollisionData = GetComponentDataFromEntity <RayEntityPair4CollisionData> ();

            ComponentDataFromEntity <IsCollidingData>          a_isCollidingData = GetComponentDataFromEntity <IsCollidingData> ();
            BufferFromEntity <CollisionInstancesBufferElement> collisionInstancesBufferElement = GetBufferFromEntity <CollisionInstancesBufferElement> ();

            ComponentDataFromEntity <RootNodeData> a_octreeRootNodeData = GetComponentDataFromEntity <RootNodeData> ();

            BufferFromEntity <NodeBufferElement> nodeBufferElement = GetBufferFromEntity <NodeBufferElement> ();
            BufferFromEntity <NodeInstancesIndexBufferElement> nodeInstancesIndexBufferElement = GetBufferFromEntity <NodeInstancesIndexBufferElement> ();
            BufferFromEntity <NodeChildrenBufferElement>       nodeChildrenBufferElement       = GetBufferFromEntity <NodeChildrenBufferElement> ();
            BufferFromEntity <InstanceBufferElement>           instanceBufferElement           = GetBufferFromEntity <InstanceBufferElement> ();


            // Ray entity pair, for collision checks

            ComponentDataFromEntity <IsActiveTag> a_isActiveTag = GetComponentDataFromEntity <IsActiveTag> ();

            ComponentDataFromEntity <RayData>            a_rayData            = GetComponentDataFromEntity <RayData> ();
            ComponentDataFromEntity <RayMaxDistanceData> a_rayMaxDistanceData = GetComponentDataFromEntity <RayMaxDistanceData> ();



            // Test ray
            // Debug
            // ! Ensure test this only with single, or at most few ray entiities.
            GetCollidingRayInstances_Common._DebugRays(barrier.CreateCommandBuffer(), a_collisionChecksEntities, a_rayData, a_rayMaxDistanceData, a_isCollidingData, collisionInstancesBufferElement, a_rayEntityPair4CollisionData, false, false);


            // Test ray
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            // Debug.DrawLine ( ray.origin, ray.origin + ray.direction * 100, Color.red )  ;

            int i_groupLength = group.CalculateLength();


            var setRayTestJob = new SetRayTestJob
            {
                a_collisionChecksEntities     = a_collisionChecksEntities,
                a_rayEntityPair4CollisionData = a_rayEntityPair4CollisionData,

                ray       = ray,
                a_rayData = a_rayData,
                // a_rayMaxDistanceData                = a_rayMaxDistanceData,
            }.Schedule(i_groupLength, 8, inputDeps);



            var job = new Job
            {
                //ecb                                 = ecb,
                a_collisionChecksEntities = a_collisionChecksEntities,

                a_rayEntityPair4CollisionData = a_rayEntityPair4CollisionData,

                a_isCollidingData = a_isCollidingData,
                collisionInstancesBufferElement = collisionInstancesBufferElement,

                a_octreeRootNodeData = a_octreeRootNodeData,

                nodeBufferElement = nodeBufferElement,
                nodeInstancesIndexBufferElement = nodeInstancesIndexBufferElement,
                nodeChildrenBufferElement       = nodeChildrenBufferElement,
                instanceBufferElement           = instanceBufferElement,


                // Ray entity pair, for collision checks

                a_isActiveTag = a_isActiveTag,

                a_rayData            = a_rayData,
                a_rayMaxDistanceData = a_rayMaxDistanceData,
            }.Schedule(i_groupLength, 8, setRayTestJob);

            return(job);
        }