// Schedule the job to apply gravity to all dynamic bodies and copy input velocities internal static JobHandle ScheduleApplyGravityAndCopyInputVelocitiesJob( ref DynamicsWorld world, NativeArray <PhysicsVelocity> inputVelocities, float2 gravityAcceleration, JobHandle inputDeps, int threadCountHint = 0) { if (threadCountHint <= 0) { var job = new ApplyGravityAndCopyInputVelocitiesJob { BodyMotionData = world.BodyMotionData, BodyMotionVelocity = world.BodyMotionVelocity, InputVelocities = inputVelocities, GravityAcceleration = gravityAcceleration }; return(job.Schedule(inputDeps)); } else { var job = new ParallelApplyGravityAndCopyInputVelocitiesJob { BodyMotionData = world.BodyMotionData, BodyMotionVelocity = world.BodyMotionVelocity, InputVelocities = inputVelocities, GravityAcceleration = gravityAcceleration }; return(job.Schedule(world.BodyMotionCount, 64, inputDeps)); } }
// Apply gravity to all dynamic bodies and copy input velocities public static void ApplyGravityAndCopyInputVelocities(NativeSlice <MotionData> motionDatas, NativeSlice <MotionVelocity> motionVelocities, NativeSlice <Velocity> inputVelocities, float3 gravityAcceleration) { for (int i = 0; i < motionDatas.Length; i++) { ApplyGravityAndCopyInputVelocitiesJob.ExecuteImpl(i, gravityAcceleration, motionDatas, motionVelocities, inputVelocities); } }
// Schedule the job to apply gravity to all dynamic bodies and copy input velocities internal static JobHandle ScheduleApplyGravityAndCopyInputVelocitiesJob(ref DynamicsWorld world, NativeSlice <Velocity> inputVelocities, float3 gravityAcceleration, JobHandle inputDeps, int threadCountHint = 0) { var job = new ApplyGravityAndCopyInputVelocitiesJob { MotionDatas = world.MotionDatas, MotionVelocities = world.MotionVelocities, InputVelocities = inputVelocities, GravityAcceleration = gravityAcceleration }; if (threadCountHint <= 0) { return(job.Schedule(inputDeps)); } else { return(job.Schedule(world.NumMotions, 64, inputDeps)); } }