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); } }