private void DoShowInfo() { Vector3 pos, normal; CollidableObject pickedObject = mouseManager.GetPickedObject(cameraManager, 10, 1000, out pos, out normal) as CollidableObject; //does this object return true in the predicate if (collisionPredicate(pickedObject)) { //get info about the health value of the pickup int value = (pickedObject as PickupCollidableObject).Value; System.Diagnostics.Debug.WriteLine(pickedObject.ID + ", " + value); } }
private void DoLift() { if (!bCurrentlyPicking) { camera = cameraManager.ActiveCamera; currentPickedObject = mouseManager.GetPickedObject(cameraManager, pickStartDistance, pickEndDistance, out pos, out normal) as CollidableObject; if (currentPickedObject != null) { Vector3 vectorDeltaFromCentreOfMass = pos - currentPickedObject.Collision.Owner.Position; vectorDeltaFromCentreOfMass = Vector3.Transform(vectorDeltaFromCentreOfMass, Matrix.Transpose(currentPickedObject.Collision.Owner.Orientation)); cameraPickDistance = (camera.Transform3D.Translation - pos).Length(); //remove any controller from any previous pick-release objectController.Destroy(); damperController.Destroy(); currentPickedObject.Collision.Owner.SetActive(); //move object by pos (i.e. point of collision and not centre of mass) objectController.Initialise(currentPickedObject.Collision.Owner, vectorDeltaFromCentreOfMass, pos); //dampen velocity (linear and angular) on object to Zero damperController.Initialise(currentPickedObject.Collision.Owner, ConstraintVelocity.ReferenceFrame.Body, Vector3.Zero, Vector3.Zero); objectController.EnableConstraint(); damperController.EnableConstraint(); //we're picking a valid object for the first time bCurrentlyPicking = true; } //if we have an object picked from the last update then move it according to the mouse pointer if (objectController.IsConstraintEnabled && (objectController.Body != null)) { // Vector3 delta = objectController.Body.Position - this.camera.Transform.Translation; Vector3 direction = mouseManager.GetMouseRay(camera).Direction; cameraPickDistance += mouseManager.GetDeltaFromScrollWheel() * 0.1f; //set the desired world position objectController.WorldPosition = camera.Transform3D.Translation + cameraPickDistance * direction; objectController.Body.SetActive(); } } else //releasing object { //release object from constraints and allow to behave as defined by gravity etc objectController.DisableConstraint(); damperController.DisableConstraint(); } }