コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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();
            }
        }