mirror of
https://github.com/DrBeef/JKXR.git
synced 2024-11-12 23:54:15 +00:00
some hacking to try to make immersive cutscenes better
not great so far
This commit is contained in:
parent
2538e8df30
commit
93f18988d4
4 changed files with 57 additions and 24 deletions
|
@ -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"/>
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -1089,31 +1097,45 @@ 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) )
|
||||||
{
|
{
|
||||||
for ( i = 0; i < 3; i++ )
|
if (!vr->immersive_cinematics)
|
||||||
{
|
{
|
||||||
cg.refdefViewAngles[i] = client_camera.angles[i] + ( client_camera.angles2[i] / client_camera.pan_duration ) * ( cg.time - client_camera.pan_time );
|
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 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VectorCopy(client_camera.angles, cg.refdefViewAngles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( client_camera.info_state & CAMERA_PANNING )
|
else if ( client_camera.info_state & CAMERA_PANNING )
|
||||||
{
|
{
|
||||||
//Note: does not actually change the camera's angles until the pan time is done!
|
if (!vr->immersive_cinematics)
|
||||||
if ( client_camera.pan_time + client_camera.pan_duration < cg.time )
|
{
|
||||||
{//finished panning
|
//Note: does not actually change the camera's angles until the pan time is done!
|
||||||
for ( i = 0; i < 3; i++ )
|
if ( client_camera.pan_time + client_camera.pan_duration < cg.time )
|
||||||
{
|
{//finished panning
|
||||||
client_camera.angles[i] = AngleNormalize360( ( client_camera.angles[i] + client_camera.angles2[i] ) );
|
for ( i = 0; i < 3; i++ )
|
||||||
}
|
{
|
||||||
|
client_camera.angles[i] = AngleNormalize360( ( client_camera.angles[i] + client_camera.angles2[i] ) );
|
||||||
|
}
|
||||||
|
|
||||||
client_camera.info_state &= ~CAMERA_PANNING;
|
client_camera.info_state &= ~CAMERA_PANNING;
|
||||||
VectorCopy(client_camera.angles, cg.refdefViewAngles );
|
VectorCopy(client_camera.angles, cg.refdefViewAngles );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{//still panning
|
||||||
|
for ( i = 0; i < 3; i++ )
|
||||||
|
{
|
||||||
|
//NOTE: does not store the resultant angle in client_camera.angles until pan is done
|
||||||
|
cg.refdefViewAngles[i] = client_camera.angles[i] + ( client_camera.angles2[i] / client_camera.pan_duration ) * ( cg.time - client_camera.pan_time );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{//still panning
|
{
|
||||||
for ( i = 0; i < 3; i++ )
|
VectorCopy(client_camera.angles, cg.refdefViewAngles);
|
||||||
{
|
|
||||||
//NOTE: does not store the resultant angle in client_camera.angles until pan is done
|
|
||||||
cg.refdefViewAngles[i] = client_camera.angles[i] + ( client_camera.angles2[i] / client_camera.pan_duration ) * ( cg.time - client_camera.pan_time );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue