public unsafe bool DistanceLeaf <T>(ColliderDistanceInput input, int rigidBodyIndex, ref T collector) where T : struct, ICollector <DistanceHit> { 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 ColliderDistanceInput { Collider = input.Collider, Transform = new RigidTransform( math.mul(math.inverse(body.WorldFromBody.rot), input.Transform.rot), Mul(bodyFromWorld, input.Transform.pos)), MaxDistance = input.MaxDistance, QueryContext = new QueryContext { RigidBodyIndex = rigidBodyIndex, ColliderKey = ColliderKey.Empty, NumColliderKeyBits = 0, WorldFromLocalTransform = worldFromBody, Entity = body.Entity, IsInitialized = true } }; return(body.CalculateDistance(inputLs, ref collector)); }
public bool DistanceLeaf <T>(PointDistanceInput input, int rigidBodyIndex, ref T collector) where T : struct, ICollector <DistanceHit> { 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 PointDistanceInput { Position = Mul(bodyFromWorld, input.Position), MaxDistance = input.MaxDistance, Filter = input.Filter, QueryContext = new QueryContext { RigidBodyIndex = rigidBodyIndex, ColliderKey = ColliderKey.Empty, NumColliderKeyBits = 0, WorldFromLocalTransform = worldFromBody, Entity = body.Entity, IsInitialized = true } }; return(body.CalculateDistance(inputLs, ref collector)); }
public unsafe bool DistanceLeaf <T>(ColliderDistanceInput input, int rigidBodyIndex, ref T collector) where T : struct, ICollector <DistanceHit> { 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 ColliderDistanceInput { Collider = input.Collider, Transform = new RigidTransform( math.mul(math.inverse(body.WorldFromBody.rot), input.Transform.rot), Mul(bodyFromWorld, input.Transform.pos)), MaxDistance = input.MaxDistance }; float fraction = collector.MaxFraction; int numHits = collector.NumHits; if (body.CalculateDistance(inputLs, ref collector)) { // Transform results back into world space collector.TransformNewHits(numHits, fraction, worldFromBody, rigidBodyIndex); return(true); } return(false); }
public bool DistanceLeaf <T>(PointDistanceInput input, int rigidBodyIndex, ref T collector) where T : struct, ICollector <DistanceHit> { 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 PointDistanceInput { Position = Mul(bodyFromWorld, input.Position), MaxDistance = input.MaxDistance, Filter = input.Filter }; float fraction = collector.MaxFraction; int numHits = collector.NumHits; if (body.CalculateDistance(inputLs, ref collector)) { // Transform results back into world space collector.TransformNewHits(numHits, fraction, worldFromBody, rigidBodyIndex); return(true); } return(false); }
public unsafe bool DistanceLeaf <T>(ColliderDistanceInput input, int rigidBodyIndex, ref T collector) where T : struct, ICollector <DistanceHit> { rigidBodyIndex += BaseRigidBodyIndex; input.QueryContext.IsInitialized = true; input.QueryContext.RigidBodyIndex = rigidBodyIndex; RigidBody body = m_Bodies[rigidBodyIndex]; return(body.CalculateDistance(input, ref collector)); }