public void Draw(Camera camera)
        {
            Matrix[] transforms = new Matrix[model.Bones.Count];
            model.CopyAbsoluteBoneTransformsTo(transforms);

            foreach (ModelMesh mesh in model.Meshes)
            {
                foreach (BasicEffect be in mesh.Effects)
                {
                    be.EnableDefaultLighting();
                    be.Projection = camera.projection;
                    be.View = camera.view;
                    be.World = GetWorld() * mesh.ParentBone.Transform;
                }

                mesh.Draw();
            }
        }
 public void RotateTheRacquet(Camera camera)
 {
     // Rotate the racquet with Q and E
     if (Keyboard.GetState().IsKeyDown(Keys.Q))
     {
         if (currentAngle - angle > lowerBoundAngle)
         {
             RacquetRotation(-angle);
             currentAngle -= angle;
             // Rotate the swing axis
             swingAxis = Vector3.Transform(swingAxis, Matrix.CreateRotationX(angle));
         }
     }
     else if (Keyboard.GetState().IsKeyDown(Keys.E))
     {
         if (currentAngle + angle < upperBoundAngle)
         {
             RacquetRotation(angle);
             currentAngle += angle;
             // Rotate the swing axis
             swingAxis = Vector3.Transform(swingAxis, Matrix.CreateRotationX(-angle));
         }
     }
     if (currentAngle < 0 &&
         camera.cameraPosition.Z - 0.75f * MathHelper.ToDegrees(currentAngle) > 150)
     {
         RacquetRotation(angle);
         currentAngle += angle;
         // Rotate the swing axis
         swingAxis = Vector3.Transform(swingAxis, Matrix.CreateRotationX(-angle));
     }
     if (currentAngle > 0 &&
         camera.cameraPosition.Z - 0.75f * MathHelper.ToDegrees(currentAngle) < -350)
     {
         RacquetRotation(-angle);
         currentAngle -= angle;
         // Rotate the swing axis
         swingAxis = Vector3.Transform(swingAxis, Matrix.CreateRotationX(angle));
     }
 }
 public virtual void Update(Camera camera)
 {
 }
        public override void Update(Camera camera)
        {
            // Move the racquet within the walls
            world.Translation = camera.getCameraPosition() + 150 * camera.getCameraDirection() + new Vector3(0, -75, 0);
            if (world.Translation.Z > 155)
                world.Translation = new Vector3(world.Translation.X, world.Translation.Y, 155);
            if (world.Translation.Z < -355)
                world.Translation = new Vector3(world.Translation.X, world.Translation.Y, -355);

            swingTheRacquet();
        }
        public override void Update(Camera camera)
        {
            // Don't move or spin the ball if it's being held
            if (!holdBall)
            {
                yawAngle = MathHelper.ToRadians(-speed.Z / 100f);
                pitchAngle = MathHelper.ToRadians(-speed.Y / 100f);
                rollAngle = MathHelper.ToRadians(-speed.X / 100f);
                // Rotate model
                rotation *= Matrix.CreateFromYawPitchRoll(
                    yawAngle,
                    pitchAngle,
                    rollAngle);

                // Bounce off the walls, lose some speed
                // Forward and back
                if (world.Translation.X < -820)
                {
                    speed.X = .8f * Math.Abs(speed.X);
                    soundBank.PlayCue("Bounce");
                }
                if (world.Translation.X > 160)
                {  // off the back wall
                    speed.X = -Math.Abs(speed.X);
                    soundBank.PlayCue("Bounce");
                }

                if (isCollided)
                {
                    floor -= floor * 0.005f;
                    isCollided = false;
                }

                // Up and down
                if (world.Translation.Y < floor)
                {
                    float beScaleDown = scale;

                    speed.Y = .8f * Math.Abs(speed.Y);
                    soundBank.PlayCue("Bounce");
                }
                if (world.Translation.Y > 450)
                {
                    speed.Y = -.8f * Math.Abs(speed.Y);
                    soundBank.PlayCue("Bounce");
                }
                // Left and right
                if (world.Translation.Z < -380)
                {
                    speed.Z = .8f * Math.Abs(speed.Z);
                    soundBank.PlayCue("Bounce");
                }
                if (world.Translation.Z > 190)
                {
                    speed.Z = -.8f * Math.Abs(speed.Z);
                    soundBank.PlayCue("Bounce");
                }

                // Slow down while rolling along the floor
                if (Math.Abs(speed.Y) < .05f &&
                    world.Translation.Y < floor - 1)
                {
                    speed.Y = 0;
                    if (Math.Abs(speed.Z) > 0)
                        speed.Z *= .95f;
                    if (Math.Abs(speed.Z) < .1)
                        speed.Z = 0;
                    if (Math.Abs(speed.X) > 0)
                        speed.X *= .95f;
                    if (Math.Abs(speed.X) < .1)
                        speed.X = 0;
                }
                else
                    // React to gravity
                    speed.Y -= .075f;

                // Move model
                world = rotation * GetWorld() * Matrix.CreateTranslation(speed);
            }
               else
            // Move the ball with the camera
            {
                world.Translation = new Vector3(-(camera.getCameraPosition().X + camera.getCameraDirection().X) + 150, // toward
                    (camera.getCameraPosition().Y + 150 * camera.getCameraDirection().Y), // up
                    camera.getCameraPosition().Z + 150 * camera.getCameraDirection().Z); // left

                if (world.Translation.Z > 155)
                    world.Translation = new Vector3(world.Translation.X, world.Translation.Y, 155);
                if (world.Translation.Z < -355)
                    world.Translation = new Vector3(world.Translation.X, world.Translation.Y, -355);
            }
        }