private void OnSimulationPre() { if (ConstraintGameObject == null && m_lineGeometry.isEnabled()) { var geometryContacts = new agxCollide.GeometryContactPtrVector(); var numContacts = GetSimulation().getSpace().getGeometryContacts(geometryContacts, m_lineGeometry); if (numContacts > 0) { var ray = m_camera.ScreenPointToRay(Input.mousePosition); var rayHandedOrigin = ray.origin.ToHandedVec3(); var closestGeometryContact = geometryContacts[0]; var closestDistance2 = rayHandedOrigin.distance2(closestGeometryContact.points().at(0).point); for (int i = 1; i < geometryContacts.Count; ++i) { var gc = geometryContacts[i]; var distance2 = rayHandedOrigin.distance2(gc.points().at(0).point); if (distance2 < closestDistance2) { closestDistance2 = distance2; closestGeometryContact = gc; } } var raycastBody = closestGeometryContact.rigidBody(0); RigidBody body = null; if (raycastBody != null && raycastBody.getMotionControl() == agx.RigidBody.MotionControl.DYNAMICS) { var bodies = FindObjectsOfType <RigidBody>(); for (int i = 0; body == null && i < bodies.Length; ++i) { if (bodies[i].Native != null && bodies[i].Native.getUuid().str() == raycastBody.getUuid().str()) { body = bodies[i]; } } } ConstraintGameObject = TryCreateConstraint(closestGeometryContact.points().at(0).point.ToHandedVector3(), body, MouseButtonToDofTypes(m_mouseButtonState.ButtonDown), "PickHandlerConstraint"); if (ConstraintGameObject != null) { ConstraintGameObject.AddComponent <Rendering.PickHandlerRenderer>(); Constraint.DrawGizmosEnable = false; m_distanceFromCamera = FindDistanceFromCamera(m_camera, Constraint.AttachmentPair.ReferenceFrame.Position); } m_lineGeometry.setEnable(false); } } }
private void OnPreStepForwardCallback() { if (m_camera == null) { return; } if (ConstraintGameObject == null && Input.GetKey(TriggerKey) && m_mouseButtonState.ButtonDown != MouseButton.None) { Ray ray = m_camera.ScreenPointToRay(Input.mousePosition); List <BroadPhaseResult> results = FindRayBoundingVolumeOverlaps(ray); if (results.Count > 0) { ConstraintGameObject = TryCreateConstraint(ray, results[0].GameObject, MouseButtonToDofTypes(m_mouseButtonState.ButtonDown), "PickHandlerConstraint"); if (ConstraintGameObject != null) { ConstraintGameObject.AddComponent <Rendering.PickHandlerRenderer>(); Constraint.DrawGizmosEnable = false; m_distanceFromCamera = FindDistanceFromCamera(m_camera, Constraint.AttachmentPair.ReferenceFrame.Position); } } m_mouseButtonState.Use(m_mouseButtonState.ButtonDown, buttonUp => { if (ConstraintGameObject != null) { DestroyImmediate(ConstraintGameObject); ConstraintGameObject = null; m_distanceFromCamera = -1f; } }); } if (ConstraintGameObject != null) { Constraint.AttachmentPair.ConnectedFrame.Position = m_camera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, m_distanceFromCamera)); SetComplianceDamping(Constraint); ConstraintGameObject.GetComponent <Rendering.PickHandlerRenderer>().ThisMethodIsntAllowedToBeNamedUpdateByUnity(Constraint); } }
private void OnPreStepForwardCallback() { // Trigger key + mouse button down and we enable the line geometry // here - similar to preCollide. In pre-step event if the line // geometry is enabled, collect geometry contacts with our line // and create constraint with the closest point. if (m_camera == null) { return; } if (ConstraintGameObject == null && Input.GetKey(TriggerKey) && m_mouseButtonState.ButtonDown != MouseButton.None) { var ray = m_camera.ScreenPointToRay(Input.mousePosition); m_lineShape.set(ray.origin.ToHandedVec3(), ray.GetPoint(5000.0f).ToHandedVec3()); m_lineGeometry.setEnable(true); m_mouseButtonState.Use(m_mouseButtonState.ButtonDown, buttonUp => { if (ConstraintGameObject != null) { DestroyImmediate(ConstraintGameObject); ConstraintGameObject = null; m_distanceFromCamera = -1f; } m_lineGeometry.setEnable(false); }); } if (ConstraintGameObject != null) { Constraint.AttachmentPair.ConnectedFrame.Position = m_camera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, m_distanceFromCamera)); SetComplianceDamping(Constraint); ConstraintGameObject.GetComponent <Rendering.PickHandlerRenderer>().ThisMethodIsntAllowedToBeNamedUpdateByUnity(Constraint, m_camera); } }