101 lines
1.9 KiB
Java
101 lines
1.9 KiB
Java
package com.gnarly.engine.display;
|
|
|
|
import org.joml.Matrix4f;
|
|
import org.joml.Vector3f;
|
|
|
|
public class Camera {
|
|
|
|
private Matrix4f projection, projView;
|
|
|
|
private float width, height;
|
|
private Vector3f position;
|
|
private float rotation;
|
|
|
|
public Camera(float width, float height) {
|
|
setDims(width, height);
|
|
position = new Vector3f();
|
|
rotation = 0;
|
|
projView = new Matrix4f();
|
|
}
|
|
|
|
public void setDims(float width, float height) {
|
|
this.width = width;
|
|
this.height = height;
|
|
projection = new Matrix4f().setOrtho(0, width, height, 0, 0, 1);
|
|
}
|
|
|
|
public void update() {
|
|
projection.translate(position.negate(new Vector3f()), projView);
|
|
projView.rotateZ(-rotation);
|
|
}
|
|
|
|
public Matrix4f getProjection() {
|
|
return new Matrix4f(projection);
|
|
}
|
|
|
|
public Matrix4f getMatrix() {
|
|
return new Matrix4f(projView);
|
|
}
|
|
|
|
public float getX() {
|
|
return position.x;
|
|
}
|
|
|
|
public float getY() {
|
|
return position.y;
|
|
}
|
|
|
|
public Vector3f getPosition() {
|
|
return new Vector3f(position);
|
|
}
|
|
|
|
public float getWidth() {
|
|
return width;
|
|
}
|
|
|
|
public float getHeight() {
|
|
return height;
|
|
}
|
|
|
|
public void setX(float x) {
|
|
position.x = x;
|
|
}
|
|
|
|
public void setY(float y) {
|
|
position.y = y;
|
|
}
|
|
|
|
public void setPosition(float x, float y) {
|
|
position.set(x, y, position.z);
|
|
}
|
|
|
|
public void setPosition(Vector3f position) {
|
|
this.position.x = position.x;
|
|
this.position.y = position.y;
|
|
}
|
|
|
|
public void setCenter(float x, float y) {
|
|
position.set(x - width / 2, y - height / 2, position.z);
|
|
}
|
|
|
|
public void setCenter(Vector3f position) {
|
|
this.position.x = position.x - width / 2;
|
|
this.position.y = position.y - height / 2;
|
|
}
|
|
|
|
public void translate(float x, float y, float z) {
|
|
position.add(x, y, z);
|
|
}
|
|
|
|
public void translate(Vector3f transform) {
|
|
position.add(transform);
|
|
}
|
|
|
|
public void setRotation(float angle) {
|
|
rotation = angle;
|
|
}
|
|
|
|
public void rotate(float angle) {
|
|
rotation += angle;
|
|
}
|
|
}
|