public unsafe bool ColliderCastLeaf <T>(ColliderCastInput input, int rigidBodyIndex, ref T collector) where T : struct, ICollector <ColliderCastHit> { rigidBodyIndex += BaseRigidBodyIndex; RigidBody body = m_Bodies[rigidBodyIndex]; // Transform the input into body space var worldFromBody = new MTransform(body.WorldFromBody); MTransform bodyFromWorld = Inverse(worldFromBody); var inputLs = new ColliderCastInput { Collider = input.Collider, Orientation = math.mul(math.inverse(body.WorldFromBody.rot), input.Orientation), QueryContext = new QueryContext { RigidBodyIndex = rigidBodyIndex, NumColliderKeyBits = 0, ColliderKey = ColliderKey.Empty, WorldFromLocalTransform = worldFromBody, Entity = body.Entity, IsInitialized = true } }; inputLs.Ray.Origin = Mul(bodyFromWorld, input.Ray.Origin); inputLs.Ray.Displacement = math.mul(bodyFromWorld.Rotation, input.Ray.Displacement); return(body.CastCollider(inputLs, ref collector)); }
public unsafe bool ColliderCastLeaf <T>(ColliderCastInput input, int rigidBodyIndex, ref T collector) where T : struct, ICollector <ColliderCastHit> { rigidBodyIndex += BaseRigidBodyIndex; RigidBody body = m_Bodies[rigidBodyIndex]; // Transform the input into body space var worldFromBody = new MTransform(body.WorldFromBody); MTransform bodyFromWorld = Inverse(worldFromBody); var inputLs = new ColliderCastInput { Collider = input.Collider, Orientation = math.mul(math.inverse(body.WorldFromBody.rot), input.Orientation), }; inputLs.Ray.Origin = Mul(bodyFromWorld, input.Ray.Origin); inputLs.Ray.Displacement = math.mul(bodyFromWorld.Rotation, input.Ray.Displacement); float fraction = collector.MaxFraction; int numHits = collector.NumHits; if (body.CastCollider(inputLs, ref collector)) { // Transform results back into world space collector.TransformNewHits(numHits, fraction, worldFromBody, rigidBodyIndex); return(true); } return(false); }
public unsafe bool ColliderCastLeaf <T>(ColliderCastInput input, int rigidBodyIndex, ref T collector) where T : struct, ICollector <ColliderCastHit> { rigidBodyIndex += BaseRigidBodyIndex; input.QueryContext.IsInitialized = true; input.QueryContext.RigidBodyIndex = rigidBodyIndex; RigidBody body = m_Bodies[rigidBodyIndex]; return(body.CastCollider(input, ref collector)); }