internal static unsafe void ExecuteImpl(ref PhysicsWorld world, sfloat timeStep, NativeArray <DispatchPairSequencer.DispatchPair> dispatchPairs, int dispatchPairReadOffset, int numPairsToRead, ref NativeStream.Writer contactWriter) { for (int i = 0; i < numPairsToRead; i++) { DispatchPairSequencer.DispatchPair dispatchPair = dispatchPairs[dispatchPairReadOffset + i]; // Invalid pairs can exist by being disabled by users if (dispatchPair.IsValid) { if (dispatchPair.IsContact) { // Create contact manifolds for this pair of bodies var pair = new BodyIndexPair { BodyIndexA = dispatchPair.BodyIndexA, BodyIndexB = dispatchPair.BodyIndexB }; RigidBody rigidBodyA = world.Bodies[pair.BodyIndexA]; RigidBody rigidBodyB = world.Bodies[pair.BodyIndexB]; MotionVelocity motionVelocityA = pair.BodyIndexA < world.MotionVelocities.Length ? world.MotionVelocities[pair.BodyIndexA] : MotionVelocity.Zero; MotionVelocity motionVelocityB = pair.BodyIndexB < world.MotionVelocities.Length ? world.MotionVelocities[pair.BodyIndexB] : MotionVelocity.Zero; ManifoldQueries.BodyBody(rigidBodyA, rigidBodyB, motionVelocityA, motionVelocityB, world.CollisionWorld.CollisionTolerance, timeStep, pair, ref contactWriter); } } } }
public void Disable() { BodyIndexPair = BodyIndexPair.Invalid; }