mirror of
https://github.com/DrBeef/QuestZDoom.git
synced 2025-04-25 02:31:12 +00:00
Couple of things..
- Attempt to stop weapon recoil jarring the view - Slight refactoring and renaming of functions
This commit is contained in:
parent
dbf0170cc2
commit
2d2d33e719
9 changed files with 83 additions and 63 deletions
|
@ -154,12 +154,12 @@ LAMBDA1VR Stuff
|
|||
static bool useVirtualScreen = true;
|
||||
extern bool automapactive;
|
||||
|
||||
void setUseScreenLayer(bool use)
|
||||
void QzDoom_setUseScreenLayer(bool use)
|
||||
{
|
||||
useVirtualScreen = use;
|
||||
}
|
||||
|
||||
bool useScreenLayer()
|
||||
bool QzDoom_useScreenLayer()
|
||||
{
|
||||
return useVirtualScreen || automapactive;
|
||||
}
|
||||
|
@ -813,15 +813,15 @@ void setHMDPosition( float x, float y, float z, float yaw )
|
|||
|
||||
VectorSet(hmdPosition, x, y, z);
|
||||
|
||||
if (s_useScreen != useScreenLayer())
|
||||
if (s_useScreen != QzDoom_useScreenLayer())
|
||||
{
|
||||
s_useScreen = useScreenLayer();
|
||||
s_useScreen = QzDoom_useScreenLayer();
|
||||
|
||||
//Record player height on transition
|
||||
playerHeight = y;
|
||||
}
|
||||
|
||||
if (!useScreenLayer())
|
||||
if (!QzDoom_useScreenLayer())
|
||||
{
|
||||
playerYaw = yaw;
|
||||
}
|
||||
|
@ -835,7 +835,7 @@ bool isMultiplayer()
|
|||
|
||||
/*
|
||||
========================
|
||||
VR_Vibrate
|
||||
QzDoom_Vibrate
|
||||
========================
|
||||
*/
|
||||
|
||||
|
@ -843,7 +843,7 @@ VR_Vibrate
|
|||
float vibration_channel_duration[2] = {0.0f, 0.0f};
|
||||
float vibration_channel_intensity[2] = {0.0f, 0.0f};
|
||||
|
||||
void VR_Vibrate( float duration, int channel, float intensity )
|
||||
void QzDoom_Vibrate(float duration, int channel, float intensity )
|
||||
{
|
||||
if (vibration_channel_duration[channel] > 0.0f)
|
||||
return;
|
||||
|
@ -1244,7 +1244,7 @@ int m_height;
|
|||
|
||||
//qboolean R_SetMode( void );
|
||||
|
||||
void VR_GetScreenRes(uint32_t *width, uint32_t *height)
|
||||
void QzDoom_GetScreenRes(uint32_t *width, uint32_t *height)
|
||||
{
|
||||
*width = m_width;
|
||||
*height = m_height;
|
||||
|
@ -1284,9 +1284,9 @@ static ovrApp gAppState;
|
|||
static ovrJava java;
|
||||
static bool destroyed = false;
|
||||
|
||||
void prepareEyeBuffer(int eye )
|
||||
void QzDoom_prepareEyeBuffer(int eye )
|
||||
{
|
||||
ovrRenderer *renderer = useScreenLayer() ? &gAppState.Scene.CylinderRenderer : &gAppState.Renderer;
|
||||
ovrRenderer *renderer = QzDoom_useScreenLayer() ? &gAppState.Scene.CylinderRenderer : &gAppState.Renderer;
|
||||
|
||||
ovrFramebuffer *frameBuffer = &(renderer->FrameBuffer[eye]);
|
||||
ovrFramebuffer_SetCurrent(frameBuffer);
|
||||
|
@ -1305,9 +1305,9 @@ void prepareEyeBuffer(int eye )
|
|||
GL(glDisable(GL_SCISSOR_TEST));
|
||||
}
|
||||
|
||||
void finishEyeBuffer(int eye )
|
||||
void QzDoom_finishEyeBuffer(int eye )
|
||||
{
|
||||
ovrRenderer *renderer = useScreenLayer() ? &gAppState.Scene.CylinderRenderer : &gAppState.Renderer;
|
||||
ovrRenderer *renderer = QzDoom_useScreenLayer() ? &gAppState.Scene.CylinderRenderer : &gAppState.Renderer;
|
||||
|
||||
ovrFramebuffer *frameBuffer = &(renderer->FrameBuffer[eye]);
|
||||
|
||||
|
@ -1319,7 +1319,7 @@ void finishEyeBuffer(int eye )
|
|||
ovrFramebuffer_SetNone();
|
||||
}
|
||||
|
||||
bool processMessageQueue() {
|
||||
bool QzDoom_processMessageQueue() {
|
||||
for ( ; ; )
|
||||
{
|
||||
ovrMessage message;
|
||||
|
@ -1429,7 +1429,7 @@ void * AppThreadFunction(void * parm ) {
|
|||
|
||||
//First handle any messages in the queue
|
||||
while ( gAppState.Ovr == NULL ) {
|
||||
processMessageQueue();
|
||||
QzDoom_processMessageQueue();
|
||||
}
|
||||
|
||||
ovrRenderer_Create(m_width, m_height, &gAppState.Renderer, &java);
|
||||
|
@ -1446,7 +1446,7 @@ void * AppThreadFunction(void * parm ) {
|
|||
|
||||
//Run loading loop until we are ready to start QzDoom
|
||||
while (!destroyed && !qzdoom_initialised) {
|
||||
processMessageQueue();
|
||||
QzDoom_processMessageQueue();
|
||||
incrementFrameIndex();
|
||||
showLoadingIcon();
|
||||
}
|
||||
|
@ -1467,7 +1467,7 @@ void QzDoom_FrameSetup()
|
|||
vrapi_SetTrackingSpace(gAppState.Ovr, VRAPI_TRACKING_SPACE_LOCAL_FLOOR);
|
||||
}
|
||||
|
||||
void processHaptics() {//Handle haptics
|
||||
void QzDoom_processHaptics() {//Handle haptics
|
||||
static float lastFrameTime = 0.0f;
|
||||
float timestamp = (float)(GetTimeInMilliSeconds());
|
||||
float frametime = timestamp - lastFrameTime;
|
||||
|
@ -1521,7 +1521,7 @@ void showLoadingIcon()
|
|||
vrapi_SubmitFrame2( gAppState.Ovr, &frameDesc );
|
||||
}
|
||||
|
||||
void getHMDOrientation(ovrTracking2 *tracking) {//Get orientation
|
||||
void QzDoom_getHMDOrientation(ovrTracking2 *tracking) {//Get orientation
|
||||
|
||||
// Get the HMD pose, predicted for the middle of the time period during which
|
||||
// the new eye images will be displayed. The number of frames predicted ahead
|
||||
|
@ -1560,7 +1560,7 @@ void incrementFrameIndex()
|
|||
gAppState.FrameIndex);
|
||||
}
|
||||
|
||||
void getTrackedRemotesOrientation(int vr_control_scheme) {//Get info for tracked remotes
|
||||
void QzDoom_getTrackedRemotesOrientation(int vr_control_scheme) {//Get info for tracked remotes
|
||||
acquireTrackedRemotesData(gAppState.Ovr, gAppState.DisplayTime);
|
||||
|
||||
//Call additional control schemes here
|
||||
|
@ -1579,11 +1579,11 @@ void getTrackedRemotesOrientation(int vr_control_scheme) {//Get info for tracked
|
|||
}
|
||||
}
|
||||
|
||||
void submitFrame(ovrTracking2 *tracking)
|
||||
void QzDoom_submitFrame(ovrTracking2 *tracking)
|
||||
{
|
||||
ovrSubmitFrameDescription2 frameDesc = {0};
|
||||
|
||||
if (!useScreenLayer()) {
|
||||
if (!QzDoom_useScreenLayer()) {
|
||||
|
||||
ovrLayerProjection2 layer = vrapi_DefaultLayerProjection2();
|
||||
layer.HeadPose = (*tracking).HeadPose;
|
||||
|
|
|
@ -72,28 +72,24 @@ float nonLinearFilter(float in);
|
|||
bool between(float min, float val, float max);
|
||||
void rotateAboutOrigin(float v1, float v2, float rotation, vec2_t out);
|
||||
void QuatToYawPitchRoll(ovrQuatf q, vec3_t rotation, vec3_t out);
|
||||
bool useScreenLayer();
|
||||
void handleTrackedControllerButton(ovrInputStateTrackedRemote * trackedRemoteState, ovrInputStateTrackedRemote * prevTrackedRemoteState, uint32_t button, int key);
|
||||
void VR_GetScreenRes(uint32_t *width, uint32_t *height);
|
||||
void VR_Vibrate( float duration, int channel, float intensity );
|
||||
bool processMessageQueue();
|
||||
|
||||
//Called from engine code
|
||||
bool QzDoom_useScreenLayer();
|
||||
void QzDoom_GetScreenRes(uint32_t *width, uint32_t *height);
|
||||
void QzDoom_Vibrate(float duration, int channel, float intensity );
|
||||
bool QzDoom_processMessageQueue();
|
||||
void QzDoom_FrameSetup();
|
||||
|
||||
void C_DoCommandC (const char *cmd);
|
||||
|
||||
float VR_GetRawYaw();
|
||||
|
||||
void setUseScreenLayer(bool use);
|
||||
|
||||
void processHaptics();
|
||||
void getHMDOrientation(ovrTracking2 *tracking);
|
||||
void getTrackedRemotesOrientation(int vr_control_scheme);
|
||||
void QzDoom_setUseScreenLayer(bool use);
|
||||
void QzDoom_processHaptics();
|
||||
void QzDoom_getHMDOrientation(ovrTracking2 *tracking);
|
||||
void QzDoom_getTrackedRemotesOrientation(int vr_control_scheme);
|
||||
|
||||
void incrementFrameIndex();
|
||||
|
||||
void prepareEyeBuffer(int eye );
|
||||
void finishEyeBuffer(int eye );
|
||||
void submitFrame(ovrTracking2 *tracking);
|
||||
void QzDoom_prepareEyeBuffer(int eye );
|
||||
void QzDoom_finishEyeBuffer(int eye );
|
||||
void QzDoom_submitFrame(ovrTracking2 *tracking);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
#include <string>
|
||||
#include <map>
|
||||
#include <cmath>
|
||||
#include <VrApi_Ext.h>
|
||||
#include "p_trace.h"
|
||||
#include "p_linetracedata.h"
|
||||
#include "gl/system/gl_system.h"
|
||||
|
@ -41,15 +40,11 @@
|
|||
#include "r_utility.h" // viewpitch
|
||||
#include "gl/renderer/gl_renderer.h"
|
||||
#include "gl/renderer/gl_renderbuffers.h"
|
||||
#include "gl/renderer/gl_2ddrawer.h" // crosshair
|
||||
#include "gl/models/gl_models.h"
|
||||
#include "g_levellocals.h" // pixelstretch
|
||||
#include "g_statusbar/sbar.h"
|
||||
#include "math/cmath.h"
|
||||
#include "c_cvars.h"
|
||||
#include "cmdlib.h"
|
||||
#include "w_wad.h"
|
||||
#include "m_joy.h"
|
||||
#include "d_gui.h"
|
||||
#include "d_event.h"
|
||||
|
||||
|
@ -135,13 +130,13 @@ namespace s3d
|
|||
|
||||
bool OculusQuestEyePose::submitFrame() const
|
||||
{
|
||||
prepareEyeBuffer( eye );
|
||||
QzDoom_prepareEyeBuffer(eye);
|
||||
|
||||
GLRenderer->mBuffers->BindEyeTexture(eye, 0);
|
||||
GL_IRECT box = {0, 0, GLRenderer->mSceneViewport.width, GLRenderer->mSceneViewport.height};
|
||||
GLRenderer->DrawPresentTexture(box, true);
|
||||
|
||||
finishEyeBuffer( eye );
|
||||
QzDoom_finishEyeBuffer(eye);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -232,7 +227,7 @@ namespace s3d
|
|||
eye_ptrs.Push(&rightEyeView);
|
||||
|
||||
//Get this from my code
|
||||
VR_GetScreenRes(&sceneWidth, &sceneHeight);
|
||||
QzDoom_GetScreenRes(&sceneWidth, &sceneHeight);
|
||||
}
|
||||
|
||||
void OculusQuestMode::getTracking(ovrTracking2 *_tracking) const
|
||||
|
@ -339,7 +334,7 @@ namespace s3d
|
|||
leftEyeView.submitFrame();
|
||||
rightEyeView.submitFrame();
|
||||
|
||||
submitFrame(&tracking);
|
||||
QzDoom_submitFrame(&tracking);
|
||||
}
|
||||
|
||||
static int mAngleFromRadians(double radians)
|
||||
|
@ -397,7 +392,7 @@ namespace s3d
|
|||
return;
|
||||
}
|
||||
|
||||
processMessageQueue();
|
||||
QzDoom_processMessageQueue();
|
||||
|
||||
// Set VR-appropriate settings
|
||||
{
|
||||
|
@ -407,23 +402,23 @@ namespace s3d
|
|||
if (gamestate == GS_LEVEL && !isMenuActive()) {
|
||||
cachedScreenBlocks = screenblocks;
|
||||
screenblocks = 12;
|
||||
setUseScreenLayer(false);
|
||||
QzDoom_setUseScreenLayer(false);
|
||||
}
|
||||
else {
|
||||
//Ensure we are drawing on virtual screen
|
||||
setUseScreenLayer(true);
|
||||
QzDoom_setUseScreenLayer(true);
|
||||
}
|
||||
|
||||
processHaptics();
|
||||
QzDoom_processHaptics();
|
||||
|
||||
//Get controller state here
|
||||
getHMDOrientation(&tracking);
|
||||
QzDoom_getHMDOrientation(&tracking);
|
||||
|
||||
//Set up stuff used in the tracking code
|
||||
vr_weapon_pitchadjust = vr_weaponRotate;
|
||||
vr_snapturn_angle = vr_snapTurn;
|
||||
vr_walkdirection = !vr_moveFollowsOffHand;
|
||||
getTrackedRemotesOrientation(vr_control_scheme);
|
||||
QzDoom_getTrackedRemotesOrientation(vr_control_scheme);
|
||||
|
||||
//Some crazy stuff to ascertain the actual yaw that doom is using at the right times!
|
||||
if (gamestate != GS_LEVEL || isMenuActive() || (gamestate == GS_LEVEL && resetDoomYaw))
|
||||
|
|
|
@ -1292,6 +1292,13 @@ DEFINE_ACTION_FUNCTION(AActor, A_Recoil)
|
|||
PARAM_SELF_PROLOGUE(AActor);
|
||||
PARAM_FLOAT(xyvel);
|
||||
|
||||
//We don't want to adjust the player's camera - that could make them sick
|
||||
player_t* player = r_viewpoint.camera ? r_viewpoint.camera->player : nullptr;
|
||||
if (player != nullptr && self != nullptr && player->mo == self)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
self->Thrust(self->Angles.Yaw + 180., xyvel);
|
||||
return 0;
|
||||
}
|
||||
|
@ -2819,6 +2826,14 @@ DEFINE_ACTION_FUNCTION(AActor, A_SetAngle)
|
|||
PARAM_INT(ptr);
|
||||
|
||||
AActor *ref = COPY_AAPTR(self, ptr);
|
||||
|
||||
//We don't want to adjust the player's camera - that could make them sick
|
||||
player_t* player = r_viewpoint.camera ? r_viewpoint.camera->player : nullptr;
|
||||
if (player != nullptr && ref != nullptr && player->mo == ref)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ref != NULL)
|
||||
{
|
||||
ref->SetAngle(angle, !!(flags & SPF_INTERPOLATE));
|
||||
|
@ -2843,6 +2858,13 @@ DEFINE_ACTION_FUNCTION(AActor, A_SetPitch)
|
|||
|
||||
AActor *ref = COPY_AAPTR(self, ptr);
|
||||
|
||||
//We don't want to adjust the player's camera - that could make them sick
|
||||
player_t* player = r_viewpoint.camera ? r_viewpoint.camera->player : nullptr;
|
||||
if (player != nullptr && ref != nullptr && player->mo == ref)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ref != NULL)
|
||||
{
|
||||
ref->SetPitch(pitch, !!(flags & SPF_INTERPOLATE), !!(flags & SPF_FORCECLAMP));
|
||||
|
@ -2866,6 +2888,13 @@ DEFINE_ACTION_FUNCTION(AActor, A_SetRoll)
|
|||
PARAM_INT (ptr) ;
|
||||
AActor *ref = COPY_AAPTR(self, ptr);
|
||||
|
||||
//We don't want to adjust the player's camera - that could make them sick
|
||||
player_t* player = r_viewpoint.camera ? r_viewpoint.camera->player : nullptr;
|
||||
if (player != nullptr && ref != nullptr && player->mo == ref)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ref != NULL)
|
||||
{
|
||||
ref->SetRoll(roll, !!(flags & SPF_INTERPOLATE));
|
||||
|
|
|
@ -4391,7 +4391,7 @@ static ETraceStatus CheckForActor(FTraceResults &res, void *userdata)
|
|||
//
|
||||
//==========================================================================
|
||||
EXTERN_CVAR(Int, vr_control_scheme)
|
||||
extern "C" void VR_Vibrate( float duration, int channel, float intensity );
|
||||
extern "C" void QzDoom_Vibrate(float duration, int channel, float intensity );
|
||||
extern bool weaponStabilised;
|
||||
|
||||
AActor *P_LineAttack(AActor *t1, DAngle angle, double distance,
|
||||
|
@ -4434,10 +4434,10 @@ AActor *P_LineAttack(AActor *t1, DAngle angle, double distance,
|
|||
|
||||
//Haptics
|
||||
long rightHanded = vr_control_scheme < 10;
|
||||
VR_Vibrate( 150, rightHanded ? 1 : 0, 0.8 );
|
||||
QzDoom_Vibrate(150, rightHanded ? 1 : 0, 0.8);
|
||||
if (weaponStabilised)
|
||||
{
|
||||
VR_Vibrate( 150, rightHanded ? 0 : 1, 0.6 );
|
||||
QzDoom_Vibrate(150, rightHanded ? 0 : 1, 0.6);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6678,7 +6678,7 @@ DEFINE_ACTION_FUNCTION(AActor, SpawnSubMissile)
|
|||
================
|
||||
*/
|
||||
EXTERN_CVAR(Int, vr_control_scheme)
|
||||
extern "C" void VR_Vibrate( float duration, int channel, float intensity );
|
||||
extern "C" void QzDoom_Vibrate(float duration, int channel, float intensity );
|
||||
extern bool weaponStabilised;
|
||||
|
||||
AActor *P_SpawnPlayerMissile (AActor *source, double x, double y, double z,
|
||||
|
@ -6774,10 +6774,10 @@ AActor *P_SpawnPlayerMissile (AActor *source, double x, double y, double z,
|
|||
|
||||
//Haptics
|
||||
long rightHanded = vr_control_scheme < 10;
|
||||
VR_Vibrate( 150, rightHanded ? 1 : 0, 0.8 );
|
||||
QzDoom_Vibrate(150, rightHanded ? 1 : 0, 0.8);
|
||||
if (weaponStabilised)
|
||||
{
|
||||
VR_Vibrate( 150, rightHanded ? 0 : 1, 0.6 );
|
||||
QzDoom_Vibrate(150, rightHanded ? 0 : 1, 0.6);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -316,7 +316,7 @@ void NoSDLGLFB::SwapBuffers()
|
|||
int NoSDLGLFB::GetClientWidth()
|
||||
{
|
||||
uint32_t w, h;
|
||||
VR_GetScreenRes(&w, &h);
|
||||
QzDoom_GetScreenRes(&w, &h);
|
||||
int width = w;
|
||||
return width;
|
||||
}
|
||||
|
@ -324,7 +324,7 @@ int NoSDLGLFB::GetClientWidth()
|
|||
int NoSDLGLFB::GetClientHeight()
|
||||
{
|
||||
uint32_t w, h;
|
||||
VR_GetScreenRes(&w, &h);
|
||||
QzDoom_GetScreenRes(&w, &h);
|
||||
int height = h;
|
||||
return height;
|
||||
}
|
||||
|
@ -332,7 +332,7 @@ int NoSDLGLFB::GetClientHeight()
|
|||
void NoSDLGLFB::ScaleCoordsFromWindow(int16_t &x, int16_t &y)
|
||||
{
|
||||
uint32_t w, h;
|
||||
VR_GetScreenRes(&w, &h);
|
||||
QzDoom_GetScreenRes(&w, &h);
|
||||
|
||||
// Detect if we're doing scaling in the Window and adjust the mouse
|
||||
// coordinates accordingly. This could be more efficent, but I
|
||||
|
|
|
@ -232,7 +232,7 @@ void NoSDLFB::SetVSync (bool vsync)
|
|||
void NoSDLFB::ScaleCoordsFromWindow(int16_t &x, int16_t &y)
|
||||
{
|
||||
uint32_t w, h;
|
||||
VR_GetScreenRes(&w, &h);
|
||||
QzDoom_GetScreenRes(&w, &h);
|
||||
|
||||
|
||||
// Detect if we're doing scaling in the Window and adjust the mouse
|
||||
|
|
|
@ -1529,7 +1529,7 @@ void V_Init (bool restart)
|
|||
if (height == 0)
|
||||
{
|
||||
uint32_t uWidth, uHeight;
|
||||
VR_GetScreenRes(&uWidth, &uHeight);
|
||||
QzDoom_GetScreenRes(&uWidth, &uHeight);
|
||||
width = uWidth;
|
||||
height = uHeight;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue