Refactor mouse

This commit is contained in:
SwitchKaze 2021-03-23 00:02:49 -05:00
parent 99c773f39e
commit 6bf76602ed
4 changed files with 59 additions and 32 deletions

View file

@ -175,6 +175,10 @@ void D_ProcessEvents(void)
boolean eaten;
// Reset possibly stale mouse info
G_SetMouseData(0, 0, 1);
G_SetMouseData(0, 0, 2);
for (; eventtail != eventhead; eventtail = (eventtail+1) & (MAXEVENTS-1))
{
ev = &events[eventtail];
@ -219,6 +223,11 @@ void D_ProcessEvents(void)
G_Responder(ev);
}
if (mouse.rdx || mouse.rdy)
G_SetMouseData(mouse.rdx, mouse.rdy, 1);
if (mouse2.rdx || mouse2.rdy)
G_SetMouseData(mouse2.rdx, mouse2.rdy, 2);
}
//

View file

@ -1094,7 +1094,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
angle_t drawangleoffset = (player->powers[pw_carry] == CR_ROLLOUT) ? ANGLE_180 : 0;
INT32 chasecam, chasefreelook, alwaysfreelook, usejoystick, invertmouse, turnmultiplier, mousemove;
controlstyle_e controlstyle = G_ControlStyle(ssplayer);
INT32 *mx; INT32 *my; INT32 *mly;
mouse_t *m = &mouse;
static INT32 turnheld[2]; // for accelerative turning
static boolean keyboard_look[2]; // true if lookup/down using keyboard
@ -1117,9 +1117,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
invertmouse = cv_invertmouse.value;
turnmultiplier = cv_cam_turnmultiplier.value;
mousemove = cv_mousemove.value;
mx = &mousex;
my = &mousey;
mly = &mlooky;
G_CopyTiccmd(cmd, I_BaseTiccmd(), 1); // empty, or external driver
}
else
@ -1131,9 +1128,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
invertmouse = cv_invertmouse2.value;
turnmultiplier = cv_cam2_turnmultiplier.value;
mousemove = cv_mousemove2.value;
mx = &mouse2x;
my = &mouse2y;
mly = &mlook2y;
m = &mouse2;
G_CopyTiccmd(cmd, I_BaseTiccmd2(), 1); // empty, or external driver
}
@ -1476,7 +1471,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
keyboard_look[forplayer] = false;
// looking up/down
*myaiming += (*mly<<19)*player_invert*screen_invert;
*myaiming += (m->mlookdy<<19)*player_invert*screen_invert;
}
if (analogjoystickmove && joyaiming[forplayer] && lookjoystickvector.yaxis != 0 && configlookaxis != 0)
@ -1510,24 +1505,22 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
}
if (!mouseaiming && mousemove)
forward += *my;
forward += m->dy;
if ((!demoplayback && (player->pflags & PF_SLIDING))) // Analog for mouse
side += *mx*2;
side += m->dx*2;
else if (controlstyle == CS_LMAOGALOG)
{
if (*mx)
if (m->dx)
{
if (*mx > 0)
if (m->dx > 0)
cmd->buttons |= BT_CAMRIGHT;
else
cmd->buttons |= BT_CAMLEFT;
}
}
else
cmd->angleturn = (INT16)(cmd->angleturn - (*mx*8));
*mx = *my = *mly = 0;
cmd->angleturn = (INT16)(cmd->angleturn - (m->dx*8));
if (forward > MAXPLMOVE)
forward = MAXPLMOVE;
@ -1873,8 +1866,8 @@ void G_DoLoadLevel(boolean resetplayer)
joyxmove[i] = joyymove[i] = 0;
joy2xmove[i] = joy2ymove[i] = 0;
}
mousex = mousey = 0;
mouse2x = mouse2y = 0;
G_SetMouseData(0, 0, 1);
G_SetMouseData(0, 0, 2);
// clear hud messages remains (usually from game startup)
CON_ClearHUD();
@ -3095,8 +3088,8 @@ void G_DoReborn(INT32 playernum)
joyxmove[i] = joyymove[i] = 0;
joy2xmove[i] = joy2ymove[i] = 0;
}
mousex = mousey = 0;
mouse2x = mouse2y = 0;
G_SetMouseData(0, 0, 1);
G_SetMouseData(0, 0, 2);
// clear hud messages remains (usually from game startup)
CON_ClearHUD();

View file

@ -31,10 +31,8 @@ consvar_t cv_mouseysens = CVAR_INIT ("mouseysens", "20", CV_SAVE, mousesens_cons
consvar_t cv_mouseysens2 = CVAR_INIT ("mouseysens2", "20", CV_SAVE, mousesens_cons_t, NULL);
consvar_t cv_controlperkey = CVAR_INIT ("controlperkey", "One", CV_SAVE, onecontrolperkey_cons_t, NULL);
INT32 mousex, mousey;
INT32 mlooky; // like mousey but with a custom sensitivity for mlook
INT32 mouse2x, mouse2y, mlook2y;
mouse_t mouse;
mouse_t mouse2;
// joystick values are repeated
INT32 joyxmove[JOYAXISSET], joyymove[JOYAXISSET], joy2xmove[JOYAXISSET], joy2ymove[JOYAXISSET];
@ -142,9 +140,8 @@ void G_MapEventsToControls(event_t *ev)
case ev_mouse: // buttons are virtual keys
if (menuactive || CON_Ready() || chat_on)
break;
mousex = (INT32)(ev->data2*((cv_mousesens.value*cv_mousesens.value)/110.0f + 0.1f));
mousey = (INT32)(ev->data3*((cv_mousesens.value*cv_mousesens.value)/110.0f + 0.1f));
mlooky = (INT32)(ev->data3*((cv_mouseysens.value*cv_mousesens.value)/110.0f + 0.1f));
mouse.rdx = ev->data2;
mouse.rdy = ev->data3;
break;
case ev_joystick: // buttons are virtual keys
@ -166,9 +163,8 @@ void G_MapEventsToControls(event_t *ev)
case ev_mouse2: // buttons are virtual keys
if (menuactive || CON_Ready() || chat_on)
break;
mouse2x = (INT32)(ev->data2*((cv_mousesens2.value*cv_mousesens2.value)/110.0f + 0.1f));
mouse2y = (INT32)(ev->data3*((cv_mousesens2.value*cv_mousesens2.value)/110.0f + 0.1f));
mlook2y = (INT32)(ev->data3*((cv_mouseysens2.value*cv_mousesens2.value)/110.0f + 0.1f));
mouse2.rdx = ev->data2;
mouse2.rdy = ev->data3;
break;
default:
@ -1073,3 +1069,21 @@ void Command_Setcontrol2_f(void)
setcontrol(gamecontrolbis);
}
void G_SetMouseData(INT32 realdx, INT32 realdy, UINT8 ssplayer)
{
mouse_t *m = ssplayer == 1 ? &mouse : &mouse2;
consvar_t *cvsens, *cvysens;
if (!realdx && !realdy) {
memset(m, 0, sizeof(*m));
return;
}
cvsens = ssplayer == 1 ? &cv_mousesens : &cv_mousesens2;
cvysens = ssplayer == 1 ? &cv_mouseysens : &cv_mouseysens2;
m->rdx = realdx;
m->rdy = realdy;
m->dx = (INT32)(m->rdx*((cvsens->value*cvsens->value)/110.0f + 0.1f));
m->dy = (INT32)(m->rdy*((cvsens->value*cvsens->value)/110.0f + 0.1f));
m->mlookdy = (INT32)(m->rdy*((cvysens->value*cvsens->value)/110.0f + 0.1f));
}

View file

@ -116,9 +116,17 @@ extern consvar_t cv_mousesens, cv_mouseysens;
extern consvar_t cv_mousesens2, cv_mouseysens2;
extern consvar_t cv_controlperkey;
extern INT32 mousex, mousey;
extern INT32 mlooky; //mousey with mlookSensitivity
extern INT32 mouse2x, mouse2y, mlook2y;
typedef struct
{
INT32 dx; // deltas with mousemove sensitivity
INT32 dy;
INT32 mlookdy; // dy with mouselook sensitivity
INT32 rdx; // deltas without sensitivity
INT32 rdy;
} mouse_t;
extern mouse_t mouse;
extern mouse_t mouse2;
extern INT32 joyxmove[JOYAXISSET], joyymove[JOYAXISSET], joy2xmove[JOYAXISSET], joy2ymove[JOYAXISSET];
@ -175,4 +183,7 @@ void G_CopyControls(INT32 (*setupcontrols)[2], INT32 (*fromcontrols)[2], const I
void G_SaveKeySetting(FILE *f, INT32 (*fromcontrols)[2], INT32 (*fromcontrolsbis)[2]);
INT32 G_CheckDoubleUsage(INT32 keynum, boolean modify);
// sets the members of a mouse_t given position deltas
void G_SetMouseData(INT32 realdx, INT32 realdy, UINT8 ssplayer);
#endif