]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - in_win.c
rewrote memory system entirely (hunk, cache, and zone are gone, memory pools replaced...
[xonotic/darkplaces.git] / in_win.c
index 2641749e01f6b30334b8ef31b01f79fcf94db5bd..c6ce7aaa85a298643dd572662be8db6445219af8 100644 (file)
--- 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 <dinput.h>
 #include "quakedef.h"
 #include "winquake.h"
 //#include "dosisms.h"
 
+#include <dinput.h>
+
 #define DINPUT_BUFFERSIZE           16
 #define iDirectInputCreate(a,b,c,d)    pDirectInputCreate(a,b,c,d)
 
@@ -32,7 +33,7 @@ HRESULT (WINAPI *pDirectInputCreate)(HINSTANCE hinst, DWORD dwVersion,
        LPDIRECTINPUT * lplpDirectInput, LPUNKNOWN punkOuter);
 
 // mouse variables
-cvar_t m_filter = {"m_filter","0"};
+cvar_t m_filter = {CVAR_SAVE, "m_filter","0"};
 
 int                    mouse_buttons;
 int                    mouse_oldbuttonstate;
@@ -82,25 +83,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 +156,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,10 +178,9 @@ IN_ShowMouse
 */
 void IN_ShowMouse (void)
 {
-
        if (!mouseshowtoggle)
        {
-               ShowCursor (TRUE);
+               ShowCursor (true);
                mouseshowtoggle = 1;
        }
 }
@@ -204,10 +193,9 @@ IN_HideMouse
 */
 void IN_HideMouse (void)
 {
-
        if (mouseshowtoggle)
        {
-               ShowCursor (FALSE);
+               ShowCursor (false);
                mouseshowtoggle = 0;
        }
 }
@@ -248,6 +236,7 @@ void IN_ActivateMouse (void)
                        SetCursorPos (window_center_x, window_center_y);
                        SetCapture (mainwindow);
                        ClipCursor (&window_rect);
+                       
                }
 
                mouseactive = true;
@@ -255,18 +244,6 @@ void IN_ActivateMouse (void)
 }
 
 
-/*
-===========
-IN_SetQuakeMouseState
-===========
-*/
-void IN_SetQuakeMouseState (void)
-{
-       if (mouseactivatetoggle)
-               IN_ActivateMouse ();
-}
-
-
 /*
 ===========
 IN_DeactivateMouse
@@ -304,26 +281,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
@@ -505,7 +462,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 +477,7 @@ IN_Shutdown
 */
 void IN_Shutdown (void)
 {
-
+//     usingmouse = false;
        IN_DeactivateMouse ();
        IN_ShowMouse ();
 
@@ -578,14 +534,17 @@ IN_MouseMove
 */
 void IN_MouseMove (usercmd_t *cmd)
 {
-       int                                     mx, my;
-       int                                     i;
+       int                                     i, mx, my, mouselook = (in_mlook.state & 1) || freelook.integer;
        DIDEVICEOBJECTDATA      od;
        DWORD                           dwElements;
        HRESULT                         hr;
 
        if (!mouseactive)
+       {
+               GetCursorPos (&current_pos);
+               ui_mouseupdate(current_pos.x - window_x, current_pos.y - window_y);
                return;
+       }
 
        if (dinput)
        {
@@ -637,7 +596,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 +620,8 @@ void IN_MouseMove (usercmd_t *cmd)
                        {
                                Key_Event (K_MOUSE1 + i, false);
                        }
-               }       
-                       
+               }
+
                mouse_oldbuttonstate = mstate_di;
        }
        else
@@ -677,7 +636,7 @@ void IN_MouseMove (usercmd_t *cmd)
 //if (mx ||  my)
 //     Con_DPrintf("mx=%d, my=%d\n", mx, my);
 
-       if (m_filter.value)
+       if (m_filter.integer)
        {
                mouse_x = (mx + old_mouse_x) * 0.5;
                mouse_y = (my + old_mouse_y) * 0.5;
@@ -695,21 +654,22 @@ void IN_MouseMove (usercmd_t *cmd)
        mouse_y *= sensitivity.value;
 
 // add mouse X/Y movement to cmd
-       if ( (in_strafe.state & 1) || (lookstrafe.value && (in_mlook.state & 1) ))
+       if ( (in_strafe.state & 1) || (lookstrafe.integer && mouselook))
                cmd->sidemove += m_side.value * mouse_x;
        else
                cl.viewangles[YAW] -= m_yaw.value * mouse_x;
 
-       if (in_mlook.state & 1)
+       if (mouselook)
                V_StopPitchDrift ();
-               
-       if ( (in_mlook.state & 1) && !(in_strafe.state & 1))
+       
+       // LordHavoc: changed limits on pitch from -70 to 80, to -90 to 90
+       if (mouselook && !(in_strafe.state & 1))
        {
                cl.viewangles[PITCH] += m_pitch.value * mouse_y;
-               if (cl.viewangles[PITCH] > 80)
-                       cl.viewangles[PITCH] = 80;
-               if (cl.viewangles[PITCH] < -70)
-                       cl.viewangles[PITCH] = -70;
+               if (cl.viewangles[PITCH] > 90)
+                       cl.viewangles[PITCH] = 90;
+               if (cl.viewangles[PITCH] < -90)
+                       cl.viewangles[PITCH] = -90;
        }
        else
        {
@@ -874,6 +834,7 @@ PDWORD RawValuePointer (int axis)
        case JOY_AXIS_V:
                return &ji.dwVpos;
        }
+       return NULL; // LordHavoc: hush compiler warning
 }
 
 
@@ -898,7 +859,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
@@ -1036,7 +997,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;
                }
@@ -1063,7 +1024,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
@@ -1074,11 +1035,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)
        {
@@ -1089,7 +1050,7 @@ void IN_JoyMove (usercmd_t *cmd)
                speed = cl_movespeedkey.value;
        else
                speed = 1;
-       aspeed = speed * host_frametime;
+       aspeed = speed * host_realframetime;
 
        // loop through the axes
        for (i = 0; i < JOY_MAX_AXES; i++)
@@ -1099,7 +1060,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)
                        {
@@ -1121,7 +1082,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)
@@ -1166,7 +1127,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)
@@ -1193,7 +1154,7 @@ void IN_JoyMove (usercmd_t *cmd)
                        break;
 
                case AxisLook:
-                       if (in_mlook.state & 1)
+                       if (mouselook)
                        {
                                if (fabs(fAxisValue) > joy_pitchthreshold.value)
                                {
@@ -1214,7 +1175,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();
                                }
                        }