some hacking to try to make immersive cutscenes better

not great so far
This commit is contained in:
Simon 2023-01-23 22:49:03 +00:00
parent 2538e8df30
commit 93f18988d4
4 changed files with 57 additions and 24 deletions

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.drbeef.jkquest" package="com.drbeef.jkquest"
android:versionCode="33" android:versionCode="34"
android:versionName="0.5.2" android:installLocation="auto" > android:versionName="0.5.3" android:installLocation="auto" >
<!-- Tell the system this app requires OpenGL ES 3.1. --> <!-- Tell the system this app requires OpenGL ES 3.1. -->
<uses-feature android:glEsVersion="0x00030002" android:required="true"/> <uses-feature android:glEsVersion="0x00030002" android:required="true"/>

View file

@ -173,13 +173,16 @@ void VR_SetHMDPosition(float x, float y, float z )
VectorSet(vr.hmdposition, x, y, z); VectorSet(vr.hmdposition, x, y, z);
if (s_useScreen != VR_UseScreenLayer()) //Can be set elsewhere
vr.take_snap |= s_useScreen != VR_UseScreenLayer();
if (vr.take_snap)
{ {
s_useScreen = VR_UseScreenLayer(); s_useScreen = VR_UseScreenLayer();
//Record player position on transition //Record player position on transition
VectorSet(vr.hmdposition_snap, x, y, z); VectorSet(vr.hmdposition_snap, x, y, z);
VectorCopy(vr.hmdorientation, vr.hmdorientation_snap); VectorCopy(vr.hmdorientation, vr.hmdorientation_snap);
vr.take_snap = false;
} }
VectorSubtract(vr.hmdposition, vr.hmdposition_snap, vr.hmdposition_offset); VectorSubtract(vr.hmdposition, vr.hmdposition_snap, vr.hmdposition_offset);
@ -360,6 +363,12 @@ void VR_FrameSetup()
bool VR_GetVRProjection(int eye, float zNear, float zFar, float* projection) bool VR_GetVRProjection(int eye, float zNear, float zFar, float* projection)
{ {
//Don't use our projection if playing a cinematic and we are not immersive
if (vr.cin_camera && !vr.immersive_cinematics)
{
return false;
}
if (!vr.cgzoommode) if (!vr.cgzoommode)
{ {
#ifdef PICO_XR #ifdef PICO_XR
@ -385,7 +394,6 @@ bool VR_GetVRProjection(int eye, float zNear, float zFar, float* projection)
return true; return true;
} }
return false; return false;
} }

View file

@ -34,6 +34,8 @@ typedef struct {
vec3_t hmdposition_snap; // The position the HMD was in last time the menu was up (snapshot position) vec3_t hmdposition_snap; // The position the HMD was in last time the menu was up (snapshot position)
vec3_t hmdposition_offset; // offset from the position the HMD was in last time the menu was up vec3_t hmdposition_offset; // offset from the position the HMD was in last time the menu was up
bool take_snap;
vec3_t hmdorientation; vec3_t hmdorientation;
vec3_t hmdorientation_last; // Don't use this, it is just for calculating delta! vec3_t hmdorientation_last; // Don't use this, it is just for calculating delta!
vec3_t hmdorientation_delta; vec3_t hmdorientation_delta;

View file

@ -562,6 +562,7 @@ void CGCam_Track( const char *trackName, float speed, float initLerp )
else else
{ {
client_camera.trackInitLerp = qfalse; client_camera.trackInitLerp = qfalse;
vr->take_snap = true;
} }
/* /*
if ( client_camera.info_state & CAMERA_FOLLOWING ) if ( client_camera.info_state & CAMERA_FOLLOWING )
@ -801,6 +802,12 @@ void CGCam_FollowUpdate ( void )
//So tracker doesn't move right away thinking the first angle change //So tracker doesn't move right away thinking the first angle change
//is the subject moving... FIXME: shouldn't set this until lerp done OR snapped? //is the subject moving... FIXME: shouldn't set this until lerp done OR snapped?
client_camera.subjectSpeed = 0; client_camera.subjectSpeed = 0;
//Store initial point, let player do the follow from here themselves
if (vr->immersive_cinematics)
{
vr->take_snap = true;
}
} }
//Point camera to lerp angles //Point camera to lerp angles
@ -1078,7 +1085,8 @@ void CGCam_Update( void )
{ {
actualFOV_X = client_camera.FOV + (( ( client_camera.FOV2 - client_camera.FOV ) ) / client_camera.FOV_duration ) * ( cg.time - client_camera.FOV_time ); actualFOV_X = client_camera.FOV + (( ( client_camera.FOV2 - client_camera.FOV ) ) / client_camera.FOV_duration ) * ( cg.time - client_camera.FOV_time );
} }
CG_CalcFOVFromX( actualFOV_X ); float fov = vr && vr->immersive_cinematics ? vr->fov_x : actualFOV_X;
CG_CalcFOVFromX( fov );
} }
else else
{ {
@ -1088,13 +1096,22 @@ void CGCam_Update( void )
//Check for roffing angles //Check for roffing angles
if ( (client_camera.info_state & CAMERA_ROFFING) && !(client_camera.info_state & CAMERA_FOLLOWING) ) if ( (client_camera.info_state & CAMERA_ROFFING) && !(client_camera.info_state & CAMERA_FOLLOWING) )
{
if (!vr->immersive_cinematics)
{ {
for ( i = 0; i < 3; i++ ) for ( i = 0; i < 3; i++ )
{ {
cg.refdefViewAngles[i] = client_camera.angles[i] + ( client_camera.angles2[i] / client_camera.pan_duration ) * ( cg.time - client_camera.pan_time ); cg.refdefViewAngles[i] = client_camera.angles[i] + ( client_camera.angles2[i] / client_camera.pan_duration ) * ( cg.time - client_camera.pan_time );
} }
} }
else
{
VectorCopy(client_camera.angles, cg.refdefViewAngles);
}
}
else if ( client_camera.info_state & CAMERA_PANNING ) else if ( client_camera.info_state & CAMERA_PANNING )
{
if (!vr->immersive_cinematics)
{ {
//Note: does not actually change the camera's angles until the pan time is done! //Note: does not actually change the camera's angles until the pan time is done!
if ( client_camera.pan_time + client_camera.pan_duration < cg.time ) if ( client_camera.pan_time + client_camera.pan_duration < cg.time )
@ -1117,6 +1134,11 @@ void CGCam_Update( void )
} }
} }
else else
{
VectorCopy(client_camera.angles, cg.refdefViewAngles);
}
}
else
{ {
checkFollow = qtrue; checkFollow = qtrue;
} }
@ -1148,7 +1170,8 @@ void CGCam_Update( void )
if ( checkFollow ) if ( checkFollow )
{ {
if ( client_camera.info_state & CAMERA_FOLLOWING ) //Don't follow if immersive
if (( client_camera.info_state & CAMERA_FOLLOWING ) && !vr->immersive_cinematics )
{//This needs to be done after camera movement {//This needs to be done after camera movement
CGCam_FollowUpdate(); CGCam_FollowUpdate();
} }
@ -1176,7 +1199,7 @@ void CGCam_Update( void )
if (vr->immersive_cinematics) if (vr->immersive_cinematics)
{ {
float yaw = cg.refdefViewAngles[YAW] + vr->hmdorientation[YAW]; float yaw = cg.refdefViewAngles[YAW] + (vr->hmdorientation[YAW] - vr->hmdorientation_snap[YAW]) + vr->snapTurn;
VectorCopy(vr->hmdorientation, cg.refdefViewAngles); VectorCopy(vr->hmdorientation, cg.refdefViewAngles);
cg.refdefViewAngles[YAW] = yaw; cg.refdefViewAngles[YAW] = yaw;
} }