public void Execute() { var mousePickCollector = new MousePickCollector(1.0f, CollisionWorld.Bodies, NumDynamicBodies); mousePickCollector.IgnoreTriggers = IgnoreTriggers; CollisionWorld.CastRay(RayInput, ref mousePickCollector); if (mousePickCollector.MaxFraction < 1.0f) { float fraction = mousePickCollector.Hit.Fraction; RigidBody hitBody = CollisionWorld.Bodies[mousePickCollector.Hit.RigidBodyIndex]; MTransform bodyFromWorld = Inverse(new MTransform(hitBody.WorldFromBody)); float3 pointOnBody = Mul(bodyFromWorld, mousePickCollector.Hit.Position); SpringData[0] = new SpringData { Entity = hitBody.Entity, Dragging = 1, PointOnBody = pointOnBody, MouseDepth = Near + math.dot(math.normalize(RayInput.End - RayInput.Start), Forward) * fraction * k_MaxDistance, }; } else { SpringData[0] = new SpringData { Dragging = 0 }; } }
public void Execute() { var mousePickCollector = new MousePickCollector(1.0f, CollisionWorld.Bodies, CollisionWorld.NumDynamicBodies); mousePickCollector.IgnoreTriggers = IgnoreTriggers; mousePickCollector.IgnoreStatic = IgnoreStatic; if (CollisionWorld.CastRay(RayInput, ref mousePickCollector)) { RaycastHitRef.Value = mousePickCollector.Hit; } }