Advertisement
Guest User

Untitled

a guest
May 10th, 2014
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.47 KB | None | 0 0
  1. public class FPCamera {
  2.     private Vector3f position;
  3.     private float pitch = 0f;
  4.     private float yaw = 0f;
  5.     private float roll = 0f;
  6.    
  7.     private float movementSpeed = 10f;
  8.     private float mouseSensitivity = 0f;
  9.     private float movementMultiplier = 1f;
  10.    
  11.     public FPCamera(float x, float y, float z, float pitch, float yaw, float roll, float sensitivity, float movementSpeed) {
  12.         this.position = new Vector3f(x, y, z);
  13.         this.pitch = pitch;
  14.         this.yaw = yaw;
  15.         this.roll = roll;
  16.         this.mouseSensitivity = sensitivity;
  17.         this.movementSpeed = movementSpeed;
  18.        
  19.         Mouse.setGrabbed(true);
  20.     }
  21.    
  22.     public void tick(float delta) {
  23.         int dx = Mouse.getDX();
  24.         int dy = Mouse.getDY();
  25.        
  26.         yaw(dx * mouseSensitivity);
  27.         pitch(dy * mouseSensitivity);
  28.        
  29.         if(Keyboard.isKeyDown(Keyboard.KEY_W) || Keyboard.isKeyDown(Keyboard.KEY_UP)) {
  30.             forward(movementSpeed * movementMultiplier * delta);
  31.         }
  32.        
  33.         if(Keyboard.isKeyDown(Keyboard.KEY_S) || Keyboard.isKeyDown(Keyboard.KEY_DOWN)) {
  34.             backward(movementSpeed * movementMultiplier * delta);
  35.         }
  36.        
  37.         if(Keyboard.isKeyDown(Keyboard.KEY_A) || Keyboard.isKeyDown(Keyboard.KEY_LEFT)) {
  38.             strafeLeft(movementSpeed * movementMultiplier * delta);
  39.         }
  40.        
  41.         if(Keyboard.isKeyDown(Keyboard.KEY_D) || Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) {
  42.             strafeRight(movementSpeed * movementMultiplier * delta);
  43.         }  
  44.        
  45.         if(Keyboard.isKeyDown(Keyboard.KEY_D) || Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) {
  46.             strafeRight(movementSpeed * movementMultiplier * delta);
  47.         }
  48.        
  49.         if(Keyboard.isKeyDown(Keyboard.KEY_SPACE)) {
  50.             up(movementSpeed * movementMultiplier * delta);
  51.         }
  52.        
  53.         if(Keyboard.isKeyDown(Keyboard.KEY_LCONTROL)) {
  54.             down(movementSpeed * movementMultiplier * delta);
  55.         }      
  56.        
  57.         // Hold LSHIFT to move faster
  58.         movementMultiplier = Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) ? 10f : 1f;
  59.        
  60.         glLoadIdentity();
  61.         glRotatef(pitch, 1f, 0f, 0f);
  62.         glRotatef(yaw, 0f, 1f, 0f);
  63.         glRotatef(roll, 0f, 0f, 1f);
  64.         glTranslatef(position.x, position.y, position.z);
  65.     }
  66.    
  67.     private void forward(float distance) {
  68.         double y = Math.toRadians(yaw);
  69.         double p = Math.toRadians(pitch);
  70.        
  71.         position.x -= (float) (distance * Math.sin(y));
  72.         position.y += (float) (distance * Math.cos(p) * Math.sin(y));
  73.         position.z += (float) (distance * Math.cos(p) * Math.cos(y));
  74.     }
  75.    
  76.     private void backward(float distance) {
  77.         double y = Math.toRadians(yaw);
  78.         double p = Math.toRadians(pitch);
  79.        
  80.         position.x += (float) (distance * Math.sin(y));
  81.         position.y -= (float) (distance * Math.cos(p) * Math.sin(y));
  82.         position.z -= (float) (distance * Math.cos(p) * Math.cos(y));
  83.     }
  84.    
  85.     private void up(float distance) {
  86.         position.y -= distance;
  87.     }
  88.    
  89.     private void down(float distance) {
  90.         position.y += distance;
  91.     }
  92.    
  93.     private void strafeLeft(float distance) {
  94.         position.x -= distance * Math.sin(Math.toRadians(yaw - 90));
  95.         position.z += distance * Math.cos(Math.toRadians(yaw - 90));
  96.     }
  97.    
  98.     private void strafeRight(float distance) {
  99.         position.x += distance * Math.sin(Math.toRadians(yaw - 90));
  100.         position.z -= distance * Math.cos(Math.toRadians(yaw - 90));
  101.     }
  102.    
  103.     public void pitch(float amount) {
  104.         pitch -= amount;
  105.        
  106.         if(pitch > 90f)
  107.             pitch = 90f;
  108.         else if(pitch < -90f)
  109.             pitch = -90f;
  110.     }
  111.    
  112.     public void yaw(float amount) {
  113.         yaw += amount;
  114.     }
  115.    
  116.     public void rollLeft(float amount) {
  117.         roll(amount);
  118.     }
  119.    
  120.     public void rollRight(float amount) {
  121.         roll(-amount);
  122.     }
  123.    
  124.     public void roll(float amount) {
  125.         roll += amount;
  126.     }
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement