viewport camera lockdown
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
This commit is contained in:
parent
f78c8b6633
commit
d2a8acf027
@ -41,6 +41,9 @@ public class CameraHandler {
|
|||||||
//if set to true, the camera will track the player's entity
|
//if set to true, the camera will track the player's entity
|
||||||
boolean trackPlayerEntity = true;
|
boolean trackPlayerEntity = true;
|
||||||
|
|
||||||
|
//sets whether the camera handler should update the player's camera or not
|
||||||
|
boolean update = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles a mouse event
|
* Handles a mouse event
|
||||||
* @param event The mouse event
|
* @param event The mouse event
|
||||||
@ -75,88 +78,90 @@ public class CameraHandler {
|
|||||||
*/
|
*/
|
||||||
public void updateGlobalCamera(){
|
public void updateGlobalCamera(){
|
||||||
Globals.profiler.beginCpuSample("updateGlobalCamera");
|
Globals.profiler.beginCpuSample("updateGlobalCamera");
|
||||||
if(Globals.playerCamera != null){
|
if(update){
|
||||||
cameraSpeed = 2.5f * (float)Globals.timekeeper.getMostRecentRawFrametime();
|
if(Globals.playerCamera != null){
|
||||||
|
cameraSpeed = 2.5f * (float)Globals.timekeeper.getMostRecentRawFrametime();
|
||||||
|
|
||||||
if(Crosshair.getCrosshairActive()){
|
if(Crosshair.getCrosshairActive()){
|
||||||
|
|
||||||
// if(Globals.playerCharacter != null){
|
// if(Globals.playerCharacter != null){
|
||||||
// Vector3d charPos = EntityUtils.getPosition(Globals.playerCharacter);
|
// Vector3d charPos = EntityUtils.getPosition(Globals.playerCharacter);
|
||||||
// CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f((float)charPos.x,(float)charPos.y,(float)charPos.z));
|
// CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f((float)charPos.x,(float)charPos.y,(float)charPos.z));
|
||||||
// }
|
// }
|
||||||
|
|
||||||
Vector3d characterPos = EntityUtils.getPosition(Globals.playerEntity);
|
Vector3d characterPos = EntityUtils.getPosition(Globals.playerEntity);
|
||||||
Vector3d targetPos = Crosshair.getTargetPosition();
|
Vector3d targetPos = Crosshair.getTargetPosition();
|
||||||
Vector3d diffed = new Vector3d(targetPos).sub(characterPos).mul(-1).normalize();
|
Vector3d diffed = new Vector3d(targetPos).sub(characterPos).mul(-1).normalize();
|
||||||
cameraRotationVector.set((float)diffed.x, 0.5f, (float)diffed.z).normalize();
|
cameraRotationVector.set((float)diffed.x, 0.5f, (float)diffed.z).normalize();
|
||||||
|
|
||||||
yaw = (float)Math.toDegrees(Math.atan2(diffed.z, diffed.x));
|
yaw = (float)Math.toDegrees(Math.atan2(diffed.z, diffed.x));
|
||||||
|
|
||||||
CameraEntityUtils.setCameraPitch(Globals.playerCamera, pitch);
|
CameraEntityUtils.setCameraPitch(Globals.playerCamera, pitch);
|
||||||
CameraEntityUtils.setCameraYaw(Globals.playerCamera, yaw);
|
CameraEntityUtils.setCameraYaw(Globals.playerCamera, yaw);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
CameraEntityUtils.setCameraPitch(Globals.playerCamera, pitch);
|
CameraEntityUtils.setCameraPitch(Globals.playerCamera, pitch);
|
||||||
CameraEntityUtils.setCameraYaw(Globals.playerCamera, yaw);
|
CameraEntityUtils.setCameraYaw(Globals.playerCamera, yaw);
|
||||||
|
|
||||||
// System.out.println(pitch);
|
// System.out.println(pitch);
|
||||||
// if(Globals.playerCharacter != null){
|
// if(Globals.playerCharacter != null){
|
||||||
// Vector3d charPos = EntityUtils.getPosition(Globals.playerCharacter);
|
// Vector3d charPos = EntityUtils.getPosition(Globals.playerCharacter);
|
||||||
// CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f((float)charPos.x,(float)charPos.y,(float)charPos.z));
|
// CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f((float)charPos.x,(float)charPos.y,(float)charPos.z));
|
||||||
// }
|
// }
|
||||||
|
|
||||||
Quaternionf pitchQuat = new Quaternionf().fromAxisAngleDeg(MathUtils.getLeftVectorf(), -pitch);
|
Quaternionf pitchQuat = new Quaternionf().fromAxisAngleDeg(MathUtils.getLeftVectorf(), -pitch);
|
||||||
Quaternionf yawQuat = new Quaternionf().fromAxisAngleDeg(MathUtils.getUpVectorf(), -yaw);
|
Quaternionf yawQuat = new Quaternionf().fromAxisAngleDeg(MathUtils.getUpVectorf(), -yaw);
|
||||||
// float yawRad = yaw / 180.0f * (float)Math.PI;
|
// float yawRad = yaw / 180.0f * (float)Math.PI;
|
||||||
// float pitchRad = pitch / 180.0f * (float)Math.PI;
|
// float pitchRad = pitch / 180.0f * (float)Math.PI;
|
||||||
// float rollRad = 0.0f;
|
// float rollRad = 0.0f;
|
||||||
// pitchQuat.mul(yawQuat);
|
// pitchQuat.mul(yawQuat);
|
||||||
cameraRotationVector = pitchQuat.transform(MathUtils.getOriginVectorf());
|
cameraRotationVector = pitchQuat.transform(MathUtils.getOriginVectorf());
|
||||||
cameraRotationVector = yawQuat.transform(cameraRotationVector);
|
cameraRotationVector = yawQuat.transform(cameraRotationVector);
|
||||||
cameraRotationVector.normalize();
|
cameraRotationVector.normalize();
|
||||||
|
|
||||||
|
|
||||||
// cameraRotationVector.x = 0 + (float) Math.cos(yaw / 180.0f * Math.PI) * 1;
|
// cameraRotationVector.x = 0 + (float) Math.cos(yaw / 180.0f * Math.PI) * 1;
|
||||||
// cameraRotationVector.y = 0 + (float) Math.sin(pitch / 180.0f * Math.PI) * 1;
|
// cameraRotationVector.y = 0 + (float) Math.sin(pitch / 180.0f * Math.PI) * 1;
|
||||||
// cameraRotationVector.z = 0 + (float) Math.sin(yaw / 180.0f * Math.PI) * 1;
|
// cameraRotationVector.z = 0 + (float) Math.sin(yaw / 180.0f * Math.PI) * 1;
|
||||||
// cameraRotationVector.normalize();
|
// cameraRotationVector.normalize();
|
||||||
// System.out.println(yaw + " " + pitch);
|
// System.out.println(yaw + " " + pitch);
|
||||||
|
}
|
||||||
|
if(trackPlayerEntity && Globals.playerEntity != null){
|
||||||
|
Vector3d entityPos = EntityUtils.getPosition(Globals.playerEntity);
|
||||||
|
CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f((float)entityPos.x,(float)entityPos.y,(float)entityPos.z).add(CameraEntityUtils.getOrbitalCameraRadialOffset(Globals.playerCamera)));
|
||||||
|
}
|
||||||
|
//update view matrix offset
|
||||||
|
float xFactor = (float)Math.cos(yaw / 180.0f * Math.PI);
|
||||||
|
float yFactor = (float)Math.sin(yaw / 180.0f * Math.PI);
|
||||||
|
Vector3f radialOffset = CameraEntityUtils.getOrbitalCameraRadialOffset(Globals.playerCamera);
|
||||||
|
Vector3f trueOffset = new Vector3f(radialOffset).mul(xFactor,1.0f,yFactor);
|
||||||
|
CameraEntityUtils.setOrbitalCameraRadialOffset(Globals.playerCamera, trueOffset);
|
||||||
|
cameraRotationVector.mul(CameraEntityUtils.getOrbitalCameraDistance(Globals.playerCamera));
|
||||||
|
CameraEntityUtils.setCameraEye(Globals.playerCamera, cameraRotationVector);
|
||||||
|
|
||||||
|
//tell the server that we changed where we're looking, if we're in first person
|
||||||
|
int perspectiveVal = CameraHandler.CAMERA_PERSPECTIVE_FIRST;
|
||||||
|
if(Globals.controlHandler.cameraIsThirdPerson()){
|
||||||
|
perspectiveVal = CameraHandler.CAMERA_PERSPECTIVE_THIRD;
|
||||||
|
}
|
||||||
|
if(Globals.cameraHandler.getTrackPlayerEntity() && Globals.playerEntity != null){
|
||||||
|
Globals.clientConnection.queueOutgoingMessage(
|
||||||
|
EntityMessage.constructupdateEntityViewDirMessage(
|
||||||
|
Globals.clientSceneWrapper.mapClientToServerId(Globals.playerEntity.getId()),
|
||||||
|
Globals.timekeeper.getNumberOfSimFramesElapsed(),
|
||||||
|
perspectiveVal,
|
||||||
|
yaw,
|
||||||
|
pitch
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//the view matrix
|
||||||
|
Globals.viewMatrix = CameraEntityUtils.getCameraViewMatrix(Globals.playerCamera);
|
||||||
|
|
||||||
|
//update the cursor on client side
|
||||||
|
updatePlayerCursor();
|
||||||
}
|
}
|
||||||
if(trackPlayerEntity && Globals.playerEntity != null){
|
|
||||||
Vector3d entityPos = EntityUtils.getPosition(Globals.playerEntity);
|
|
||||||
CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f((float)entityPos.x,(float)entityPos.y,(float)entityPos.z).add(CameraEntityUtils.getOrbitalCameraRadialOffset(Globals.playerCamera)));
|
|
||||||
}
|
|
||||||
//update view matrix offset
|
|
||||||
float xFactor = (float)Math.cos(yaw / 180.0f * Math.PI);
|
|
||||||
float yFactor = (float)Math.sin(yaw / 180.0f * Math.PI);
|
|
||||||
Vector3f radialOffset = CameraEntityUtils.getOrbitalCameraRadialOffset(Globals.playerCamera);
|
|
||||||
Vector3f trueOffset = new Vector3f(radialOffset).mul(xFactor,1.0f,yFactor);
|
|
||||||
CameraEntityUtils.setOrbitalCameraRadialOffset(Globals.playerCamera, trueOffset);
|
|
||||||
cameraRotationVector.mul(CameraEntityUtils.getOrbitalCameraDistance(Globals.playerCamera));
|
|
||||||
CameraEntityUtils.setCameraEye(Globals.playerCamera, cameraRotationVector);
|
|
||||||
|
|
||||||
//tell the server that we changed where we're looking, if we're in first person
|
|
||||||
int perspectiveVal = CameraHandler.CAMERA_PERSPECTIVE_FIRST;
|
|
||||||
if(Globals.controlHandler.cameraIsThirdPerson()){
|
|
||||||
perspectiveVal = CameraHandler.CAMERA_PERSPECTIVE_THIRD;
|
|
||||||
}
|
|
||||||
if(Globals.cameraHandler.getTrackPlayerEntity() && Globals.playerEntity != null){
|
|
||||||
Globals.clientConnection.queueOutgoingMessage(
|
|
||||||
EntityMessage.constructupdateEntityViewDirMessage(
|
|
||||||
Globals.clientSceneWrapper.mapClientToServerId(Globals.playerEntity.getId()),
|
|
||||||
Globals.timekeeper.getNumberOfSimFramesElapsed(),
|
|
||||||
perspectiveVal,
|
|
||||||
yaw,
|
|
||||||
pitch
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
//the view matrix
|
|
||||||
Globals.viewMatrix = CameraEntityUtils.getCameraViewMatrix(Globals.playerCamera);
|
|
||||||
|
|
||||||
//update the cursor on client side
|
|
||||||
updatePlayerCursor();
|
|
||||||
}
|
}
|
||||||
Globals.profiler.endCpuSample();
|
Globals.profiler.endCpuSample();
|
||||||
}
|
}
|
||||||
@ -208,6 +213,14 @@ public class CameraHandler {
|
|||||||
public boolean getTrackPlayerEntity(){
|
public boolean getTrackPlayerEntity(){
|
||||||
return trackPlayerEntity;
|
return trackPlayerEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets whether the camera should update with player input or not
|
||||||
|
* @param update true to update with input, false otherwise
|
||||||
|
*/
|
||||||
|
public void setUpdate(boolean update){
|
||||||
|
this.update = update;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -112,6 +112,7 @@ public class ClientLoading {
|
|||||||
//init camera
|
//init camera
|
||||||
Globals.playerCamera = CameraEntityUtils.spawnBasicCameraEntity(new Vector3f(0,0,0), new Vector3f(-1,0,0));
|
Globals.playerCamera = CameraEntityUtils.spawnBasicCameraEntity(new Vector3f(0,0,0), new Vector3f(-1,0,0));
|
||||||
Globals.cameraHandler.setTrackPlayerEntity(false);
|
Globals.cameraHandler.setTrackPlayerEntity(false);
|
||||||
|
Globals.cameraHandler.setUpdate(false);
|
||||||
//initialize the "real" objects simulation
|
//initialize the "real" objects simulation
|
||||||
initClientSimulation();
|
initClientSimulation();
|
||||||
//init foliage manager
|
//init foliage manager
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user