Renderer/src/main/java/electrosphere/entity/CameraEntityUtils.java
2021-07-19 01:21:46 -04:00

79 lines
2.9 KiB
Java

package electrosphere.entity;
import electrosphere.main.Globals;
import org.joml.Matrix4f;
import org.joml.Quaternionf;
import org.joml.Vector3f;
/**
*
* @author amaterasu
*/
public class CameraEntityUtils {
public static Entity spawnBasicCameraEntity(Vector3f center, Vector3f eye){
Entity rVal = new Entity();
Globals.entityManager.registerEntity(rVal);
rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_TYPE, EntityDataStrings.DATA_STRING_CAMERA_TYPE_BASIC);
rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_CENTER, center);
rVal.putData(EntityDataStrings .DATA_STRING_CAMERA_EYE, eye);
return rVal;
}
public static Entity spawnPointTrackingCameraEntity(Vector3f center, Vector3f eye){
Entity rVal = new Entity();
Globals.entityManager.registerEntity(rVal);
rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_TYPE, EntityDataStrings.DATA_STRING_CAMERA_TYPE_ORBIT);
rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_CENTER, center);
rVal.putData(EntityDataStrings .DATA_STRING_CAMERA_EYE, eye);
return rVal;
}
public static Entity getOrbitalCameraTarget(Entity camera){
return (Entity)camera.getData(EntityDataStrings.DATA_STRING_CAMERA_ORBIT_TARGET);
}
public static float getOrbitalCameraDistance(Entity camera){
return (float)camera.getData(EntityDataStrings.DATA_STRING_CAMERA_ORBIT_DISTANCE);
}
public static void setCameraCenter(Entity camera, Vector3f center){
camera.putData(EntityDataStrings.DATA_STRING_CAMERA_CENTER, center);
}
public static Vector3f getCameraCenter(Entity camera){
return (Vector3f)camera.getData(EntityDataStrings.DATA_STRING_CAMERA_CENTER);
}
public static void setCameraEye(Entity camera, Vector3f eye){
camera.putData(EntityDataStrings.DATA_STRING_CAMERA_EYE, eye);
}
public static Vector3f getCameraEye(Entity camera){
return (Vector3f)camera.getData(EntityDataStrings.DATA_STRING_CAMERA_EYE);
}
public static void destroyCameraEntity(Entity e){
if(e != null){
Globals.entityManager.deregisterEntity(e);
}
}
public static Matrix4f getCameraViewMatrix(Entity camera){
Vector3f cameraCenter = new Vector3f(getCameraCenter(camera)).add(0,1,0);
Vector3f cameraEye = new Vector3f(cameraCenter).add(getCameraEye(camera));
Vector3f cameraUp = new Vector3f(0,1.0f,0);
// System.out.println("eye: " + cameraEye);
// System.out.println("center: " + cameraCenter);
// System.out.println("up: " + cameraUp);
Matrix4f rVal = new Matrix4f().setLookAt(
cameraEye, //eye
cameraCenter, //center
cameraUp // up
).scale(1.0f, 1.0f, 1.0f);
return rVal;
}
}