mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-25 04:00:56 +00:00
Refactor mouse
This commit is contained in:
parent
99c773f39e
commit
6bf76602ed
4 changed files with 59 additions and 32 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
//
|
||||
|
|
31
src/g_game.c
31
src/g_game.c
|
@ -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();
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue