Guest User

Untitled

a guest
Sep 8th, 2012
50
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Microsoft.Xna.Framework;
  6. using Microsoft.Xna.Framework.Audio;
  7. using Microsoft.Xna.Framework.Content;
  8. using Microsoft.Xna.Framework.GamerServices;
  9. using Microsoft.Xna.Framework.Graphics;
  10. using Microsoft.Xna.Framework.Input;
  11. using Microsoft.Xna.Framework.Media;
  12.  
  13. namespace XNAGame2
  14. {
  15.     class Camera: GameComponent
  16.     {
  17.         Matrix view;
  18.         Matrix projection;
  19.  
  20.         public Matrix View
  21.             { get { return this.view; } }
  22.         public Matrix Projection
  23.             { get { return this.projection; } }
  24.  
  25.         private Vector3 position;
  26.         private Vector3 center;
  27.  
  28.         public Vector3 Center
  29.             { get { return this.center; } set { this.center = value; } }
  30.         public Vector3 Position
  31.             { get { return this.position; } set { this.position = value; } }
  32.  
  33.         private float rotation;
  34.         private float angle;
  35.         private float distance;
  36.  
  37.         public float Rotation
  38.             { get { return this.rotation; } set { this.rotation = value; } }
  39.  
  40.         public float Angle
  41.             { get { return this.angle; } set { this.angle = value; } }
  42.         public float Distance
  43.             { get { return this.distance; } set { this.distance = value; } }
  44.  
  45.         public Camera(Game game) : base(game)
  46.         {
  47.             resetCamera();
  48.         }
  49.  
  50.         private void resetCamera()
  51.         {
  52.             this.rotation = 45f;
  53.             this.angle = 45f;
  54.             this.distance = -400f;
  55.         }
  56.  
  57.         public override void Update(GameTime gameTime)
  58.         {
  59.             GamePadState pController = GamePad.GetState(PlayerIndex.One);
  60.  
  61.             if (!pController.IsButtonDown(Buttons.LeftThumbstickUp) &&
  62.                     !pController.IsButtonDown(Buttons.LeftThumbstickDown) &&
  63.                     !pController.IsButtonDown(Buttons.LeftThumbstickLeft) &&
  64.                     !pController.IsButtonDown(Buttons.LeftThumbstickRight))
  65.             {
  66.                 resetCamera();
  67.             }
  68.             else
  69.             {
  70.                 // update camera from player input
  71.                 if (!pController.IsButtonDown(Buttons.LeftShoulder))
  72.                 {
  73.                     this.Rotation += pController.ThumbSticks.Right.X;
  74.                     this.Angle -= pController.ThumbSticks.Right.Y;
  75.                 }
  76.                 else
  77.                 {
  78.                     // zoom in
  79.                     this.Distance -= pController.ThumbSticks.Right.Y;
  80.                 }
  81.  
  82.                 // Pan camera
  83.                 Vector3 moveVector = Vector3.Transform(
  84.                     new Vector3(pController.ThumbSticks.Right.X,
  85.                         0, -pController.ThumbSticks.Right.Y),
  86.                         Matrix.CreateRotationY(MathHelper.ToRadians(Rotation)));
  87.  
  88.                 // Add move vector to camera's center position
  89.                 this.center.X += moveVector.X;
  90.                 this.center.Z += moveVector.Z;
  91.  
  92.                 // Limit zoom distance to between 200 and 20
  93.                 if (this.distance > 200) this.distance = 200;
  94.                 if (this.distance < 20) this.distance = 20;
  95.  
  96.                 // Limit angle between 20 and 80 degrees from vertical
  97.                 if (this.angle < 20) this.angle = 20;
  98.                 if (this.angle > 80) this.angle = 80;
  99.             }
  100.  
  101.                 // Start initial offset
  102.                 position = new Vector3(0.0f, distance, 0.0f);
  103.  
  104.                 // Rotate vertically
  105.                 position = Vector3.Transform(position,
  106.                     Matrix.CreateRotationX(MathHelper.ToRadians(angle)));
  107.  
  108.                 // Rotate horizontally
  109.                 position = Vector3.Transform(position,
  110.                     Matrix.CreateRotationY(MathHelper.ToRadians(angle)));
  111.  
  112.                 // translate camera
  113.                 position += this.center;
  114.  
  115.                 this.view = Matrix.CreateLookAt(
  116.                     position, // looking from
  117.                     this.center, // looking at
  118.                     Vector3.Up); // up in the game world
  119.  
  120.                 this.projection = Matrix.CreatePerspectiveFieldOfView(
  121.                     MathHelper.PiOver4,
  122.                     this.Game.GraphicsDevice.Viewport.AspectRatio,
  123.                     0.1f, // near clipping plane
  124.                     10000f); // far clipping plane
  125.  
  126.                 base.Update(gameTime);
  127.             } // end Update()
  128.     }
  129. }
RAW Paste Data