mirror of
https://github.com/DrBeef/ioq3quest.git
synced 2024-11-29 15:21:54 +00:00
Weapon selector fixes
This commit is contained in:
parent
3196c2b676
commit
caa14c81e7
3 changed files with 32 additions and 18 deletions
|
@ -1860,6 +1860,11 @@ void CG_DrawWeaponSelect( void ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// don't display when weapon wheel is opened
|
||||||
|
if (vr->weapon_select) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
color = CG_FadeColor( cg.weaponSelectTime, WEAPON_SELECT_TIME );
|
color = CG_FadeColor( cg.weaponSelectTime, WEAPON_SELECT_TIME );
|
||||||
if ( !color ) {
|
if ( !color ) {
|
||||||
return;
|
return;
|
||||||
|
@ -2114,7 +2119,8 @@ void CG_DrawWeaponSelector( void )
|
||||||
float thumbstickAxisX = 0.0f;
|
float thumbstickAxisX = 0.0f;
|
||||||
float thumbstickAxisY = 0.0f;
|
float thumbstickAxisY = 0.0f;
|
||||||
float a = atan2(vr->thumbstick_location[thumb][0], vr->thumbstick_location[thumb][1]);
|
float a = atan2(vr->thumbstick_location[thumb][0], vr->thumbstick_location[thumb][1]);
|
||||||
if (length(vr->thumbstick_location[thumb][0], vr->thumbstick_location[thumb][1]) > 0.95f)
|
float thumbstickValue = length(vr->thumbstick_location[thumb][0], vr->thumbstick_location[thumb][1]);
|
||||||
|
if (thumbstickValue > 0.95f)
|
||||||
{
|
{
|
||||||
thumbstickAxisX = sinf(a) * 0.95f;
|
thumbstickAxisX = sinf(a) * 0.95f;
|
||||||
thumbstickAxisY = cosf(a) * 0.95f;
|
thumbstickAxisY = cosf(a) * 0.95f;
|
||||||
|
@ -2384,12 +2390,13 @@ void CG_DrawWeaponSelector( void )
|
||||||
// In case was invoked by thumbstick axis and thumbstick is centered
|
// In case was invoked by thumbstick axis and thumbstick is centered
|
||||||
// select weapon (if any selected) and close the selector
|
// select weapon (if any selected) and close the selector
|
||||||
if (vr->weapon_select_autoclose && frac > 0.25f) {
|
if (vr->weapon_select_autoclose && frac > 0.25f) {
|
||||||
if (thumbstickAxisX > -0.1f && thumbstickAxisX < 0.1f && thumbstickAxisY > -0.1f && thumbstickAxisY < 0.1f) {
|
if (thumbstickValue < 0.1f) {
|
||||||
if (selected) {
|
if (selected) {
|
||||||
cg.weaponSelect = cg.weaponSelectorSelection;
|
cg.weaponSelect = cg.weaponSelectorSelection;
|
||||||
}
|
}
|
||||||
vr->weapon_select = qfalse;
|
vr->weapon_select = qfalse;
|
||||||
vr->weapon_select_autoclose = qfalse;
|
vr->weapon_select_autoclose = qfalse;
|
||||||
|
vr->weapon_select_using_thumbstick = qfalse;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ typedef struct {
|
||||||
vrFollowMode_t follow_mode;
|
vrFollowMode_t follow_mode;
|
||||||
qboolean weapon_select;
|
qboolean weapon_select;
|
||||||
qboolean weapon_select_autoclose;
|
qboolean weapon_select_autoclose;
|
||||||
|
qboolean weapon_select_using_thumbstick;
|
||||||
qboolean no_crosshair;
|
qboolean no_crosshair;
|
||||||
|
|
||||||
int realign; // used to realign the fake 6DoF playspace in a multiplayer game
|
int realign; // used to realign the fake 6DoF playspace in a multiplayer game
|
||||||
|
|
|
@ -46,8 +46,11 @@ static vrController_t rightController;
|
||||||
static int in_vrEventTime = 0;
|
static int in_vrEventTime = 0;
|
||||||
static double lastframetime = 0;
|
static double lastframetime = 0;
|
||||||
|
|
||||||
static float pressedThreshold = 0.75f;
|
static float triggerPressedThreshold = 0.75f;
|
||||||
static float releasedThreshold = 0.5f;
|
static float triggerReleasedThreshold = 0.5f;
|
||||||
|
|
||||||
|
static float thumbstickPressedThreshold = 0.5f;
|
||||||
|
static float thumbstickReleasedThreshold = 0.4f;
|
||||||
|
|
||||||
extern cvar_t *cl_sensitivity;
|
extern cvar_t *cl_sensitivity;
|
||||||
extern cvar_t *m_pitch;
|
extern cvar_t *m_pitch;
|
||||||
|
@ -313,9 +316,13 @@ static qboolean IN_SendInputAction(const char* action, qboolean inputActive, flo
|
||||||
else if (strcmp(action, "+weapon_select") == 0)
|
else if (strcmp(action, "+weapon_select") == 0)
|
||||||
{
|
{
|
||||||
vr.weapon_select = inputActive;
|
vr.weapon_select = inputActive;
|
||||||
vr.weapon_select_autoclose = thumbstickAxis;
|
if (inputActive) {
|
||||||
if (!inputActive)
|
int selectorType = (int) Cvar_VariableValue("vr_weaponSelectorMode");
|
||||||
{
|
vr.weapon_select_using_thumbstick = (selectorType == WS_HMD);
|
||||||
|
vr.weapon_select_autoclose = vr.weapon_select_using_thumbstick && thumbstickAxis;
|
||||||
|
} else {
|
||||||
|
vr.weapon_select_using_thumbstick = qfalse;
|
||||||
|
vr.weapon_select_autoclose = qfalse;
|
||||||
Cbuf_AddText("weapon_select");
|
Cbuf_AddText("weapon_select");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -728,12 +735,11 @@ static void IN_VRJoystick( qboolean isRightController, float joystickX, float jo
|
||||||
Com_QueueEvent(in_vrEventTime, SE_JOYSTICK_AXIS, 1, joystick[1] * 127.0f + positional[1] * 127.0f, 0, NULL);
|
Com_QueueEvent(in_vrEventTime, SE_JOYSTICK_AXIS, 1, joystick[1] * 127.0f + positional[1] * 127.0f, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// In case weapon wheel is opened, and is in HMD/thumbstick mode or was opened by thumbstick, ignore standard thumbstick inputs
|
// In case thumbstick is used by weapon wheel (is in HMD/thumbstick mode), ignore standard thumbstick inputs
|
||||||
// In case weapon wheel is in controller mode and is opened by grip, allow use use of thumbstick e.g. to not block turning while wheel is open
|
else if (!vr.weapon_select_using_thumbstick)
|
||||||
else if (!vr.weapon_select || ((int)Cvar_VariableValue("vr_weaponSelectorMode") == WS_CONTROLLER && !vr.weapon_select_autoclose))
|
|
||||||
{
|
{
|
||||||
float joystickValue = length(joystickX, joystickY);
|
float joystickValue = length(joystickX, joystickY);
|
||||||
if (joystickValue < releasedThreshold) {
|
if (joystickValue < thumbstickReleasedThreshold) {
|
||||||
// Joystick within threshold -> disable all inputs
|
// Joystick within threshold -> disable all inputs
|
||||||
IN_HandleInactiveInput(&controller->axisButtons, VR_TOUCH_AXIS_UP, "RTHUMBFORWARD", joystickValue, qtrue);
|
IN_HandleInactiveInput(&controller->axisButtons, VR_TOUCH_AXIS_UP, "RTHUMBFORWARD", joystickValue, qtrue);
|
||||||
IN_HandleInactiveInput(&controller->axisButtons, VR_TOUCH_AXIS_UPRIGHT, "RTHUMBFORWARDRIGHT", joystickValue, qtrue);
|
IN_HandleInactiveInput(&controller->axisButtons, VR_TOUCH_AXIS_UPRIGHT, "RTHUMBFORWARDRIGHT", joystickValue, qtrue);
|
||||||
|
@ -743,7 +749,7 @@ static void IN_VRJoystick( qboolean isRightController, float joystickX, float jo
|
||||||
IN_HandleInactiveInput(&controller->axisButtons, VR_TOUCH_AXIS_DOWNLEFT, "RTHUMBBACKLEFT", joystickValue, qtrue);
|
IN_HandleInactiveInput(&controller->axisButtons, VR_TOUCH_AXIS_DOWNLEFT, "RTHUMBBACKLEFT", joystickValue, qtrue);
|
||||||
IN_HandleInactiveInput(&controller->axisButtons, VR_TOUCH_AXIS_LEFT, "RTHUMBLEFT", joystickValue, qtrue);
|
IN_HandleInactiveInput(&controller->axisButtons, VR_TOUCH_AXIS_LEFT, "RTHUMBLEFT", joystickValue, qtrue);
|
||||||
IN_HandleInactiveInput(&controller->axisButtons, VR_TOUCH_AXIS_UPLEFT, "RTHUMBFORWARDLEFT", joystickValue, qtrue);
|
IN_HandleInactiveInput(&controller->axisButtons, VR_TOUCH_AXIS_UPLEFT, "RTHUMBFORWARDLEFT", joystickValue, qtrue);
|
||||||
} else {
|
} else if (joystickValue > thumbstickPressedThreshold) {
|
||||||
float joystickAngle = AngleNormalize360(RAD2DEG(atan2(joystickX, joystickY)));
|
float joystickAngle = AngleNormalize360(RAD2DEG(atan2(joystickX, joystickY)));
|
||||||
if (IN_VRJoystickUse8WayMapping()) {
|
if (IN_VRJoystickUse8WayMapping()) {
|
||||||
IN_VRJoystickHandle8WayMapping(&controller->axisButtons, joystickAngle, joystickValue);
|
IN_VRJoystickHandle8WayMapping(&controller->axisButtons, joystickAngle, joystickValue);
|
||||||
|
@ -762,7 +768,7 @@ static void IN_VRTriggers( qboolean isRightController, float triggerValue ) {
|
||||||
if (VR_useScreenLayer() || cl.snap.ps.pm_type == PM_INTERMISSION) {
|
if (VR_useScreenLayer() || cl.snap.ps.pm_type == PM_INTERMISSION) {
|
||||||
|
|
||||||
// Triggers are used for menu navigation in screen mode or in intermission
|
// Triggers are used for menu navigation in screen mode or in intermission
|
||||||
if (triggerValue > pressedThreshold && !IN_InputActivated(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX))
|
if (triggerValue > triggerPressedThreshold && !IN_InputActivated(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX))
|
||||||
{
|
{
|
||||||
IN_ActivateInput(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX);
|
IN_ActivateInput(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX);
|
||||||
if ((isRightController && !vr.menuLeftHanded) || (!isRightController && vr.menuLeftHanded)) {
|
if ((isRightController && !vr.menuLeftHanded) || (!isRightController && vr.menuLeftHanded)) {
|
||||||
|
@ -774,7 +780,7 @@ static void IN_VRTriggers( qboolean isRightController, float triggerValue ) {
|
||||||
vr.menuLeftHanded = !vr.menuLeftHanded;
|
vr.menuLeftHanded = !vr.menuLeftHanded;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (triggerValue < releasedThreshold && IN_InputActivated(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX))
|
else if (triggerValue < triggerReleasedThreshold && IN_InputActivated(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX))
|
||||||
{
|
{
|
||||||
IN_DeactivateInput(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX);
|
IN_DeactivateInput(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX);
|
||||||
if ((isRightController && !vr.menuLeftHanded) || (!isRightController && vr.menuLeftHanded)) {
|
if ((isRightController && !vr.menuLeftHanded) || (!isRightController && vr.menuLeftHanded)) {
|
||||||
|
@ -787,9 +793,9 @@ static void IN_VRTriggers( qboolean isRightController, float triggerValue ) {
|
||||||
// Primary trigger
|
// Primary trigger
|
||||||
if (isRightController == (vr_righthanded->integer != 0))
|
if (isRightController == (vr_righthanded->integer != 0))
|
||||||
{
|
{
|
||||||
if (triggerValue > pressedThreshold) {
|
if (triggerValue > triggerPressedThreshold) {
|
||||||
IN_HandleActiveInput(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX, "PRIMARYTRIGGER", triggerValue, qfalse);
|
IN_HandleActiveInput(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX, "PRIMARYTRIGGER", triggerValue, qfalse);
|
||||||
} else if (triggerValue < releasedThreshold) {
|
} else if (triggerValue < triggerReleasedThreshold) {
|
||||||
IN_HandleInactiveInput(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX, "PRIMARYTRIGGER", triggerValue, qfalse);
|
IN_HandleInactiveInput(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX, "PRIMARYTRIGGER", triggerValue, qfalse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -797,9 +803,9 @@ static void IN_VRTriggers( qboolean isRightController, float triggerValue ) {
|
||||||
// Off hand trigger
|
// Off hand trigger
|
||||||
if (isRightController != (vr_righthanded->integer != 0))
|
if (isRightController != (vr_righthanded->integer != 0))
|
||||||
{
|
{
|
||||||
if (triggerValue > pressedThreshold) {
|
if (triggerValue > triggerPressedThreshold) {
|
||||||
IN_HandleActiveInput(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX, "SECONDARYTRIGGER", triggerValue, qfalse);
|
IN_HandleActiveInput(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX, "SECONDARYTRIGGER", triggerValue, qfalse);
|
||||||
} else if (triggerValue < releasedThreshold) {
|
} else if (triggerValue < triggerReleasedThreshold) {
|
||||||
IN_HandleInactiveInput(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX, "SECONDARYTRIGGER", triggerValue, qfalse);
|
IN_HandleInactiveInput(&controller->axisButtons, VR_TOUCH_AXIS_TRIGGER_INDEX, "SECONDARYTRIGGER", triggerValue, qfalse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue