mirror of
https://github.com/DrBeef/ioq3quest.git
synced 2025-02-16 00:51:05 +00:00
A few small improvements
- Controller haptics - If two handing the weapon and carrying an item then ensure item is hidden and show on HUD instead
This commit is contained in:
parent
f2b9eaee60
commit
e1c6762194
3 changed files with 112 additions and 5 deletions
|
@ -1428,7 +1428,13 @@ static void CG_DrawHoldableItem( void ) {
|
||||||
value = cg.snap->ps.stats[STAT_HOLDABLE_ITEM];
|
value = cg.snap->ps.stats[STAT_HOLDABLE_ITEM];
|
||||||
if ( value ) {
|
if ( value ) {
|
||||||
CG_RegisterItemVisuals( value );
|
CG_RegisterItemVisuals( value );
|
||||||
//CG_DrawPic( 640-ICON_SIZE, (SCREEN_HEIGHT-ICON_SIZE)/2, ICON_SIZE, ICON_SIZE, cg_items[ value ].icon );
|
|
||||||
|
//If we are two handing the weapon, move the item icon back to the HUD
|
||||||
|
if (trap_Cvar_VariableValue("vr_twoHandedWeapons") != 0.0f && vr->weapon_stabilised)
|
||||||
|
{
|
||||||
|
CG_DrawPic(640 - ICON_SIZE, (SCREEN_HEIGHT - ICON_SIZE) / 2, ICON_SIZE, ICON_SIZE,
|
||||||
|
cg_items[value].icon);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // MISSIONPACK
|
#endif // MISSIONPACK
|
||||||
|
|
|
@ -1677,6 +1677,11 @@ void CG_TrailItem( centity_t *cent, qhandle_t hModel, vec3_t offset, float scale
|
||||||
|
|
||||||
if (cent->currentState.clientNum == vr->clientNum)
|
if (cent->currentState.clientNum == vr->clientNum)
|
||||||
{
|
{
|
||||||
|
if (trap_Cvar_VariableValue("vr_twoHandedWeapons") != 0.0f && vr->weapon_stabilised)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
CG_CalculateVROffHandPosition(ent.origin, angles);
|
CG_CalculateVROffHandPosition(ent.origin, angles);
|
||||||
AnglesToAxis(angles, ent.axis);
|
AnglesToAxis(angles, ent.axis);
|
||||||
VectorScale( ent.axis[0], scale, ent.axis[0] );
|
VectorScale( ent.axis[0], scale, ent.axis[0] );
|
||||||
|
@ -1910,12 +1915,11 @@ static void CG_PlayerPowerups( centity_t *cent, refEntity_t *torso ) {
|
||||||
int value;
|
int value;
|
||||||
value = cg.snap->ps.stats[STAT_HOLDABLE_ITEM];
|
value = cg.snap->ps.stats[STAT_HOLDABLE_ITEM];
|
||||||
|
|
||||||
if (!(trap_Cvar_VariableValue("vr_twoHandedWeapons") != 0.0f && vr->weapon_stabilised)
|
if (value ) {
|
||||||
&& value ) {
|
|
||||||
CG_RegisterItemVisuals( value );
|
CG_RegisterItemVisuals( value );
|
||||||
vec3_t offset;
|
vec3_t offset;
|
||||||
VectorSet(offset, 0, 0, -8);
|
VectorSet(offset, 0, 4, -8);
|
||||||
CG_TrailItem( cent, cg_items[ value ].models[0], offset, 0.25f );
|
CG_TrailItem( cent, cg_items[ value ].models[0], offset, 0.35f );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -187,6 +187,57 @@ void QuatToYawPitchRoll(ovrQuatf q, vec3_t rotation, vec3_t out) {
|
||||||
GetAnglesFromVectors(forwardNormal, rightNormal, upNormal, out);
|
GetAnglesFromVectors(forwardNormal, rightNormal, upNormal, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//0 = left, 1 = right
|
||||||
|
float vibration_channel_duration[2] = {0.0f, 0.0f};
|
||||||
|
float vibration_channel_intensity[2] = {0.0f, 0.0f};
|
||||||
|
ovrDeviceID controllerIDs[2];
|
||||||
|
|
||||||
|
void VR_Vibrate( int duration, int chan, float intensity )
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 2; ++i)
|
||||||
|
{
|
||||||
|
int channel = (i + 1) & chan;
|
||||||
|
if (channel)
|
||||||
|
{
|
||||||
|
if (vibration_channel_duration[channel-1] > 0.0f)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (vibration_channel_duration[channel-1] == -1.0f && duration != 0.0f)
|
||||||
|
return;
|
||||||
|
|
||||||
|
vibration_channel_duration[channel-1] = duration;
|
||||||
|
vibration_channel_intensity[channel-1] = intensity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void VR_processHaptics() {
|
||||||
|
static float lastFrameTime = 0.0f;
|
||||||
|
float timestamp = (float)(Sys_Milliseconds( ));
|
||||||
|
float frametime = timestamp - lastFrameTime;
|
||||||
|
lastFrameTime = timestamp;
|
||||||
|
|
||||||
|
for (int i = 0; i < 2; ++i) {
|
||||||
|
if (vibration_channel_duration[i] > 0.0f ||
|
||||||
|
vibration_channel_duration[i] == -1.0f) {
|
||||||
|
vrapi_SetHapticVibrationSimple(VR_GetEngine()->ovr, controllerIDs[i],
|
||||||
|
vibration_channel_intensity[i]);
|
||||||
|
|
||||||
|
if (vibration_channel_duration[i] != -1.0f) {
|
||||||
|
vibration_channel_duration[i] -= frametime;
|
||||||
|
|
||||||
|
if (vibration_channel_duration[i] < 0.0f) {
|
||||||
|
vibration_channel_duration[i] = 0.0f;
|
||||||
|
vibration_channel_intensity[i] = 0.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
vrapi_SetHapticVibrationSimple(VR_GetEngine()->ovr, controllerIDs[i], 0.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void IN_SendButtonAction(const char* action, qboolean pressed)
|
static void IN_SendButtonAction(const char* action, qboolean pressed)
|
||||||
{
|
{
|
||||||
if (action)
|
if (action)
|
||||||
|
@ -220,6 +271,47 @@ void VR_HapticEvent(const char* event, int position, int flags, int intensity, f
|
||||||
engine_t* engine = VR_GetEngine();
|
engine_t* engine = VR_GetEngine();
|
||||||
jstring StringArg1 = (*(engine->java.Env))->NewStringUTF(engine->java.Env, event);
|
jstring StringArg1 = (*(engine->java.Env))->NewStringUTF(engine->java.Env, event);
|
||||||
(*(engine->java.Env))->CallVoidMethod(engine->java.Env, engine->java.ActivityObject, android_haptic_event, StringArg1, position, flags, intensity, angle, yHeight);
|
(*(engine->java.Env))->CallVoidMethod(engine->java.Env, engine->java.ActivityObject, android_haptic_event, StringArg1, position, flags, intensity, angle, yHeight);
|
||||||
|
|
||||||
|
//Controller Haptic Support
|
||||||
|
int weaponFireChannel = vr.weapon_stabilised ? 3 : (vr_righthanded->integer ? 2 : 1);
|
||||||
|
if (strcmp(event, "pickup_shield") == 0 ||
|
||||||
|
strcmp(event, "pickup_weapon") == 0 ||
|
||||||
|
strstr(event, "pickup_item") != NULL)
|
||||||
|
{
|
||||||
|
VR_Vibrate(100, 3, 1.0);
|
||||||
|
}
|
||||||
|
else if (strcmp(event, "weapon_switch") == 0)
|
||||||
|
{
|
||||||
|
VR_Vibrate(250, vr_righthanded->integer ? 2 : 1, 0.8);
|
||||||
|
}
|
||||||
|
else if (strcmp(event, "shotgun") == 0 || strcmp(event, "fireball") == 0)
|
||||||
|
{
|
||||||
|
VR_Vibrate(400, 3, 1.0);
|
||||||
|
}
|
||||||
|
else if (strcmp(event, "bullet") == 0)
|
||||||
|
{
|
||||||
|
VR_Vibrate(150, 3, 1.0);
|
||||||
|
}
|
||||||
|
else if (strcmp(event, "chainsaw_fire") == 0 ||
|
||||||
|
strcmp(event, "RTCWQuest:fire_tesla") == 0)
|
||||||
|
{
|
||||||
|
VR_Vibrate(500, weaponFireChannel, 1.0);
|
||||||
|
}
|
||||||
|
else if (strcmp(event, "machinegun_fire") == 0 || strcmp(event, "plasmagun_fire") == 0)
|
||||||
|
{
|
||||||
|
VR_Vibrate(90, weaponFireChannel, 0.8);
|
||||||
|
}
|
||||||
|
else if (strcmp(event, "shotgun_fire") == 0)
|
||||||
|
{
|
||||||
|
VR_Vibrate(250, weaponFireChannel, 1.0);
|
||||||
|
}
|
||||||
|
else if (strcmp(event, "rocket_fire") == 0 ||
|
||||||
|
strcmp(event, "RTCWQuest:fire_sniper") == 0 ||
|
||||||
|
strcmp(event, "bfg_fire") == 0 ||
|
||||||
|
strcmp(event, "handgrenade_fire") == 0 )
|
||||||
|
{
|
||||||
|
VR_Vibrate(400, weaponFireChannel, 1.0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static qboolean IN_GetButtonAction(const char* button, char* action)
|
static qboolean IN_GetButtonAction(const char* button, char* action)
|
||||||
|
@ -472,6 +564,7 @@ static void IN_VRTriggers( qboolean isRightController, float index ) {
|
||||||
{
|
{
|
||||||
controller->axisButtons |= VR_TOUCH_AXIS_TRIGGER_INDEX;
|
controller->axisButtons |= VR_TOUCH_AXIS_TRIGGER_INDEX;
|
||||||
Com_QueueEvent(in_vrEventTime, SE_KEY, K_MOUSE1, qtrue, 0, NULL);
|
Com_QueueEvent(in_vrEventTime, SE_KEY, K_MOUSE1, qtrue, 0, NULL);
|
||||||
|
VR_Vibrate(200, vr_righthanded->integer ? 2 : 1, 0.8);
|
||||||
}
|
}
|
||||||
else if ((controller->axisButtons & VR_TOUCH_AXIS_TRIGGER_INDEX) &&
|
else if ((controller->axisButtons & VR_TOUCH_AXIS_TRIGGER_INDEX) &&
|
||||||
index < releasedThreshold)
|
index < releasedThreshold)
|
||||||
|
@ -704,6 +797,8 @@ void IN_VRInputFrame( void )
|
||||||
|
|
||||||
vr.virtual_screen = VR_useScreenLayer();
|
vr.virtual_screen = VR_useScreenLayer();
|
||||||
|
|
||||||
|
VR_processHaptics();
|
||||||
|
|
||||||
//trigger frame tick for haptics
|
//trigger frame tick for haptics
|
||||||
VR_HapticEvent("frame_tick", 0, 0, 0, 0, 0);
|
VR_HapticEvent("frame_tick", 0, 0, 0, 0, 0);
|
||||||
|
|
||||||
|
@ -770,9 +865,11 @@ void IN_VRInputFrame( void )
|
||||||
if (caps.ControllerCapabilities & ovrControllerCaps_LeftHand) {
|
if (caps.ControllerCapabilities & ovrControllerCaps_LeftHand) {
|
||||||
isRight = qfalse;
|
isRight = qfalse;
|
||||||
controller = &leftController;
|
controller = &leftController;
|
||||||
|
controllerIDs[0] = capsHeader.DeviceID;
|
||||||
} else if (caps.ControllerCapabilities & ovrControllerCaps_RightHand) {
|
} else if (caps.ControllerCapabilities & ovrControllerCaps_RightHand) {
|
||||||
isRight = qtrue;
|
isRight = qtrue;
|
||||||
controller = &rightController;
|
controller = &rightController;
|
||||||
|
controllerIDs[1] = capsHeader.DeviceID;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in a new issue