Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class FPCamera {
- private Vector3f position;
- private float pitch = 0f;
- private float yaw = 0f;
- private float roll = 0f;
- private float movementSpeed = 10f;
- private float mouseSensitivity = 0f;
- private float movementMultiplier = 1f;
- public FPCamera(float x, float y, float z, float pitch, float yaw, float roll, float sensitivity, float movementSpeed) {
- this.position = new Vector3f(x, y, z);
- this.pitch = pitch;
- this.yaw = yaw;
- this.roll = roll;
- this.mouseSensitivity = sensitivity;
- this.movementSpeed = movementSpeed;
- Mouse.setGrabbed(true);
- }
- public void tick(float delta) {
- int dx = Mouse.getDX();
- int dy = Mouse.getDY();
- yaw(dx * mouseSensitivity);
- pitch(dy * mouseSensitivity);
- if(Keyboard.isKeyDown(Keyboard.KEY_W) || Keyboard.isKeyDown(Keyboard.KEY_UP)) {
- forward(movementSpeed * movementMultiplier * delta);
- }
- if(Keyboard.isKeyDown(Keyboard.KEY_S) || Keyboard.isKeyDown(Keyboard.KEY_DOWN)) {
- backward(movementSpeed * movementMultiplier * delta);
- }
- if(Keyboard.isKeyDown(Keyboard.KEY_A) || Keyboard.isKeyDown(Keyboard.KEY_LEFT)) {
- strafeLeft(movementSpeed * movementMultiplier * delta);
- }
- if(Keyboard.isKeyDown(Keyboard.KEY_D) || Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) {
- strafeRight(movementSpeed * movementMultiplier * delta);
- }
- if(Keyboard.isKeyDown(Keyboard.KEY_D) || Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) {
- strafeRight(movementSpeed * movementMultiplier * delta);
- }
- if(Keyboard.isKeyDown(Keyboard.KEY_SPACE)) {
- up(movementSpeed * movementMultiplier * delta);
- }
- if(Keyboard.isKeyDown(Keyboard.KEY_LCONTROL)) {
- down(movementSpeed * movementMultiplier * delta);
- }
- // Hold LSHIFT to move faster
- movementMultiplier = Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) ? 10f : 1f;
- glLoadIdentity();
- glRotatef(pitch, 1f, 0f, 0f);
- glRotatef(yaw, 0f, 1f, 0f);
- glRotatef(roll, 0f, 0f, 1f);
- glTranslatef(position.x, position.y, position.z);
- }
- private void forward(float distance) {
- double y = Math.toRadians(yaw);
- double p = Math.toRadians(pitch);
- position.x -= (float) (distance * Math.sin(y));
- position.y += (float) (distance * Math.cos(p) * Math.sin(y));
- position.z += (float) (distance * Math.cos(p) * Math.cos(y));
- }
- private void backward(float distance) {
- double y = Math.toRadians(yaw);
- double p = Math.toRadians(pitch);
- position.x += (float) (distance * Math.sin(y));
- position.y -= (float) (distance * Math.cos(p) * Math.sin(y));
- position.z -= (float) (distance * Math.cos(p) * Math.cos(y));
- }
- private void up(float distance) {
- position.y -= distance;
- }
- private void down(float distance) {
- position.y += distance;
- }
- private void strafeLeft(float distance) {
- position.x -= distance * Math.sin(Math.toRadians(yaw - 90));
- position.z += distance * Math.cos(Math.toRadians(yaw - 90));
- }
- private void strafeRight(float distance) {
- position.x += distance * Math.sin(Math.toRadians(yaw - 90));
- position.z -= distance * Math.cos(Math.toRadians(yaw - 90));
- }
- public void pitch(float amount) {
- pitch -= amount;
- if(pitch > 90f)
- pitch = 90f;
- else if(pitch < -90f)
- pitch = -90f;
- }
- public void yaw(float amount) {
- yaw += amount;
- }
- public void rollLeft(float amount) {
- roll(amount);
- }
- public void rollRight(float amount) {
- roll(-amount);
- }
- public void roll(float amount) {
- roll += amount;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement