X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=in_win.c;h=04cdbcdcf0e5c934516d026db598074561597809;hb=0fd6ba6decb661516e054a41e796eed450218df0;hp=fb055bbb416e991c11aa2ff4d92029188d1cddb3;hpb=e4b3858e7aca0ead91be1d8f675db084d025abad;p=xonotic%2Fdarkplaces.git diff --git a/in_win.c b/in_win.c index fb055bbb..04cdbcdc 100644 --- a/in_win.c +++ b/in_win.c @@ -20,11 +20,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // in_win.c -- windows 95 mouse and joystick code // 02/21/97 JCB Added extended DirectInput code to support external controllers. -#include #include "quakedef.h" #include "winquake.h" //#include "dosisms.h" +#include + #define DINPUT_BUFFERSIZE 16 #define iDirectInputCreate(a,b,c,d) pDirectInputCreate(a,b,c,d) @@ -32,8 +33,6 @@ HRESULT (WINAPI *pDirectInputCreate)(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUT * lplpDirectInput, LPUNKNOWN punkOuter); // mouse variables -cvar_t m_filter = {"m_filter","0"}; - int mouse_buttons; int mouse_oldbuttonstate; POINT current_pos; @@ -82,25 +81,25 @@ PDWORD pdwRawValue[JOY_MAX_AXES]; // each time. this avoids any problems with getting back to a default usage // or when changing from one controller to another. this way at least something // works. -cvar_t in_joystick = {"joystick","0", true}; -cvar_t joy_name = {"joyname", "joystick"}; -cvar_t joy_advanced = {"joyadvanced", "0"}; -cvar_t joy_advaxisx = {"joyadvaxisx", "0"}; -cvar_t joy_advaxisy = {"joyadvaxisy", "0"}; -cvar_t joy_advaxisz = {"joyadvaxisz", "0"}; -cvar_t joy_advaxisr = {"joyadvaxisr", "0"}; -cvar_t joy_advaxisu = {"joyadvaxisu", "0"}; -cvar_t joy_advaxisv = {"joyadvaxisv", "0"}; -cvar_t joy_forwardthreshold = {"joyforwardthreshold", "0.15"}; -cvar_t joy_sidethreshold = {"joysidethreshold", "0.15"}; -cvar_t joy_pitchthreshold = {"joypitchthreshold", "0.15"}; -cvar_t joy_yawthreshold = {"joyyawthreshold", "0.15"}; -cvar_t joy_forwardsensitivity = {"joyforwardsensitivity", "-1.0"}; -cvar_t joy_sidesensitivity = {"joysidesensitivity", "-1.0"}; -cvar_t joy_pitchsensitivity = {"joypitchsensitivity", "1.0"}; -cvar_t joy_yawsensitivity = {"joyyawsensitivity", "-1.0"}; -cvar_t joy_wwhack1 = {"joywwhack1", "0.0"}; -cvar_t joy_wwhack2 = {"joywwhack2", "0.0"}; +cvar_t in_joystick = {CVAR_SAVE, "joystick","0"}; +cvar_t joy_name = {0, "joyname", "joystick"}; +cvar_t joy_advanced = {0, "joyadvanced", "0"}; +cvar_t joy_advaxisx = {0, "joyadvaxisx", "0"}; +cvar_t joy_advaxisy = {0, "joyadvaxisy", "0"}; +cvar_t joy_advaxisz = {0, "joyadvaxisz", "0"}; +cvar_t joy_advaxisr = {0, "joyadvaxisr", "0"}; +cvar_t joy_advaxisu = {0, "joyadvaxisu", "0"}; +cvar_t joy_advaxisv = {0, "joyadvaxisv", "0"}; +cvar_t joy_forwardthreshold = {0, "joyforwardthreshold", "0.15"}; +cvar_t joy_sidethreshold = {0, "joysidethreshold", "0.15"}; +cvar_t joy_pitchthreshold = {0, "joypitchthreshold", "0.15"}; +cvar_t joy_yawthreshold = {0, "joyyawthreshold", "0.15"}; +cvar_t joy_forwardsensitivity = {0, "joyforwardsensitivity", "-1.0"}; +cvar_t joy_sidesensitivity = {0, "joysidesensitivity", "-1.0"}; +cvar_t joy_pitchsensitivity = {0, "joypitchsensitivity", "1.0"}; +cvar_t joy_yawsensitivity = {0, "joyyawsensitivity", "-1.0"}; +cvar_t joy_wwhack1 = {0, "joywwhack1", "0.0"}; +cvar_t joy_wwhack2 = {0, "joywwhack2", "0.0"}; qboolean joy_avail, joy_advancedinit, joy_haspov; DWORD joy_oldbuttonstate, joy_oldpovstate; @@ -155,17 +154,6 @@ void Joy_AdvancedUpdate_f (void); void IN_JoyMove (usercmd_t *cmd); -/* -=========== -Force_CenterView_f -=========== -*/ -void Force_CenterView_f (void) -{ - cl.viewangles[PITCH] = 0; -} - - /* =========== IN_UpdateClipCursor @@ -188,7 +176,6 @@ IN_ShowMouse */ void IN_ShowMouse (void) { - if (!mouseshowtoggle) { ShowCursor (true); @@ -204,7 +191,6 @@ IN_HideMouse */ void IN_HideMouse (void) { - if (mouseshowtoggle) { ShowCursor (false); @@ -248,6 +234,7 @@ void IN_ActivateMouse (void) SetCursorPos (window_center_x, window_center_y); SetCapture (mainwindow); ClipCursor (&window_rect); + } mouseactive = true; @@ -255,18 +242,6 @@ void IN_ActivateMouse (void) } -/* -=========== -IN_SetQuakeMouseState -=========== -*/ -void IN_SetQuakeMouseState (void) -{ - if (mouseactivatetoggle) - IN_ActivateMouse (); -} - - /* =========== IN_DeactivateMouse @@ -304,26 +279,6 @@ void IN_DeactivateMouse (void) } -/* -=========== -IN_RestoreOriginalMouseState -=========== -*/ -void IN_RestoreOriginalMouseState (void) -{ - if (mouseactivatetoggle) - { - IN_DeactivateMouse (); - mouseactivatetoggle = true; - } - -// try to redraw the cursor so it gets reinitialized, because sometimes it -// has garbage after the mode switch - ShowCursor (true); - ShowCursor (false); -} - - /* =========== IN_InitDInput @@ -481,9 +436,6 @@ IN_Init */ void IN_Init (void) { - // mouse variables - Cvar_RegisterVariable (&m_filter); - // joystick variables Cvar_RegisterVariable (&in_joystick); Cvar_RegisterVariable (&joy_name); @@ -505,7 +457,6 @@ void IN_Init (void) Cvar_RegisterVariable (&joy_wwhack1); Cvar_RegisterVariable (&joy_wwhack2); - Cmd_AddCommand ("force_centerview", Force_CenterView_f); Cmd_AddCommand ("joyadvancedupdate", Joy_AdvancedUpdate_f); uiWheelMessage = RegisterWindowMessage ( "MSWHEEL_ROLLMSG" ); @@ -521,7 +472,7 @@ IN_Shutdown */ void IN_Shutdown (void) { - +// usingmouse = false; IN_DeactivateMouse (); IN_ShowMouse (); @@ -578,14 +529,17 @@ IN_MouseMove */ void IN_MouseMove (usercmd_t *cmd) { - int mx, my; - int i; + int i, mx, my; DIDEVICEOBJECTDATA od; DWORD dwElements; HRESULT hr; if (!mouseactive) + { + GetCursorPos (¤t_pos); + ui_mouseupdate(current_pos.x - window_x, current_pos.y - window_y); return; + } if (dinput) { @@ -637,7 +591,7 @@ void IN_MouseMove (usercmd_t *cmd) else mstate_di &= ~(1<<1); break; - + case DIMOFS_BUTTON2: if (od.dwData & 0x80) mstate_di |= (1<<2); @@ -661,8 +615,8 @@ void IN_MouseMove (usercmd_t *cmd) { Key_Event (K_MOUSE1 + i, false); } - } - + } + mouse_oldbuttonstate = mstate_di; } else @@ -674,57 +628,11 @@ void IN_MouseMove (usercmd_t *cmd) my_accum = 0; } -//if (mx || my) -// Con_DPrintf("mx=%d, my=%d\n", mx, my); - - if (m_filter.value) - { - mouse_x = (mx + old_mouse_x) * 0.5; - mouse_y = (my + old_mouse_y) * 0.5; - } - else - { - mouse_x = mx; - mouse_y = my; - } - - old_mouse_x = mx; - old_mouse_y = my; - - mouse_x *= sensitivity.value; - mouse_y *= sensitivity.value; + IN_Mouse(cmd, mx, my); -// add mouse X/Y movement to cmd - if ( (in_strafe.state & 1) || (lookstrafe.value && (in_mlook.state & 1) )) - cmd->sidemove += m_side.value * mouse_x; - else - cl.viewangles[YAW] -= m_yaw.value * mouse_x; - - if (in_mlook.state & 1) - V_StopPitchDrift (); - - // LordHavoc: changed limits on pitch from -70 to 80, to -90 to 90 - if ( (in_mlook.state & 1) && !(in_strafe.state & 1)) - { - cl.viewangles[PITCH] += m_pitch.value * mouse_y; - if (cl.viewangles[PITCH] > 90) - cl.viewangles[PITCH] = 90; - if (cl.viewangles[PITCH] < -90) - cl.viewangles[PITCH] = -90; - } - else - { - if ((in_strafe.state & 1) && noclip_anglehack) - cmd->upmove -= m_forward.value * mouse_y; - else - cmd->forwardmove -= m_forward.value * mouse_y; - } - -// if the mouse has moved, force it to the center, so there's room to move - if (mx || my) - { + // if the mouse has moved, force it to the center, so there's room to move + if (!dinput && (mx || my)) SetCursorPos (window_center_x, window_center_y); - } } @@ -735,12 +643,13 @@ IN_Move */ void IN_Move (usercmd_t *cmd) { - if (ActiveApp && !Minimized) { IN_MouseMove (cmd); IN_JoyMove (cmd); } + + cl.viewangles[PITCH] = bound (in_pitch_min.value, cl.viewangles[PITCH], in_pitch_max.value); } @@ -794,6 +703,7 @@ void IN_StartupJoystick (void) int numdevs; JOYCAPS jc; MMRESULT mmr; + mmr = 0; // assume no joystick joy_avail = false; @@ -900,7 +810,7 @@ void Joy_AdvancedUpdate_f (void) pdwRawValue[i] = RawValuePointer(i); } - if( joy_advanced.value == 0.0) + if( joy_advanced.integer == 0) { // default joystick initialization // 2 axes only with joystick control @@ -1038,7 +948,7 @@ qboolean IN_ReadJoystick (void) // this is a hack -- there is a bug in the Logitech WingMan Warrior DirectInput Driver // rather than having 32768 be the zero point, they have the zero point at 32668 // go figure -- anyway, now we get the full resolution out of the device - if (joy_wwhack1.value != 0.0) + if (joy_wwhack1.integer != 0.0) { ji.dwUpos += 100; } @@ -1047,7 +957,7 @@ qboolean IN_ReadJoystick (void) else { // read error occurred - // turning off the joystick seems too harsh for 1 read error,\ + // turning off the joystick seems too harsh for 1 read error, // but what should be done? // Con_Printf ("IN_ReadJoystick: no response\n"); // joy_avail = false; @@ -1065,7 +975,7 @@ void IN_JoyMove (usercmd_t *cmd) { float speed, aspeed; float fAxisValue, fTemp; - int i; + int i, mouselook = (in_mlook.state & 1) || freelook.integer; // complete initialization if first time in // this is needed as cvars are not available at initialization time @@ -1076,11 +986,11 @@ void IN_JoyMove (usercmd_t *cmd) } // verify joystick is available and that the user wants to use it - if (!joy_avail || !in_joystick.value) + if (!joy_avail || !in_joystick.integer) { return; } - + // collect the joystick data, if possible if (IN_ReadJoystick () != true) { @@ -1091,7 +1001,8 @@ void IN_JoyMove (usercmd_t *cmd) speed = cl_movespeedkey.value; else speed = 1; - aspeed = speed * host_realframetime; + // LordHavoc: viewzoom affects sensitivity for sniping + aspeed = speed * host_realframetime * cl.viewzoom; // loop through the axes for (i = 0; i < JOY_MAX_AXES; i++) @@ -1101,7 +1012,7 @@ void IN_JoyMove (usercmd_t *cmd) // move centerpoint to zero fAxisValue -= 32768.0; - if (joy_wwhack2.value != 0.0) + if (joy_wwhack2.integer != 0.0) { if (dwAxisMap[i] == AxisTurn) { @@ -1123,7 +1034,7 @@ void IN_JoyMove (usercmd_t *cmd) switch (dwAxisMap[i]) { case AxisForward: - if ((joy_advanced.value == 0.0) && (in_mlook.state & 1)) + if ((joy_advanced.integer == 0) && mouselook) { // user wants forward control to become look control if (fabs(fAxisValue) > joy_pitchthreshold.value) @@ -1168,7 +1079,7 @@ void IN_JoyMove (usercmd_t *cmd) break; case AxisTurn: - if ((in_strafe.state & 1) || (lookstrafe.value && (in_mlook.state & 1))) + if ((in_strafe.state & 1) || (lookstrafe.integer && mouselook)) { // user wants turn control to become side control if (fabs(fAxisValue) > joy_sidethreshold.value) @@ -1195,7 +1106,7 @@ void IN_JoyMove (usercmd_t *cmd) break; case AxisLook: - if (in_mlook.state & 1) + if (mouselook) { if (fabs(fAxisValue) > joy_pitchthreshold.value) { @@ -1216,7 +1127,7 @@ void IN_JoyMove (usercmd_t *cmd) // disable pitch return-to-center unless requested by user // *** this code can be removed when the lookspring bug is fixed // *** the bug always has the lookspring feature on - if(lookspring.value == 0.0) + if(lookspring.integer == 0) V_StopPitchDrift(); } } @@ -1226,10 +1137,4 @@ void IN_JoyMove (usercmd_t *cmd) break; } } - - // bounds check pitch - if (cl.viewangles[PITCH] > 80.0) - cl.viewangles[PITCH] = 80.0; - if (cl.viewangles[PITCH] < -70.0) - cl.viewangles[PITCH] = -70.0; }