]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_input.c
added r_renderview cvar (similar to scr_refresh but disables only 3D
[xonotic/darkplaces.git] / cl_input.c
index 99ed2551f007c3c121fd9d1831a9d4aca56afdc4..aae1f635c9ab138e9aed00fa7841051c37bb5b9e 100644 (file)
@@ -1587,6 +1587,7 @@ void CL_SendMove(void)
        double packettime;
        int msecdelta;
        qboolean quemove;
+       qboolean important;
 
        // if playing a demo, do nothing
        if (!cls.netcon)
@@ -1695,24 +1696,23 @@ void CL_SendMove(void)
                float maxtic = cl.movevars_ticrate / cl.movevars_timescale;
                packettime = min(packettime, maxtic);
        }
-       // send input every frame in singleplayer
-       if (cl.islocalgame)
-               packettime = 0;
 
-       // do not send if we do not have anything useful to send
-       if(msecdelta <= 0 && cls.signon == SIGNONS && !cl.paused && cl.movevars_ticrate > 0)
+       // do not send 0ms packets because they mess up physics
+       if(cl.cmd.msec == 0 && cl.time > cl.oldtime && (cls.protocol == PROTOCOL_QUAKEWORLD || cls.signon == SIGNONS))
                return;
        // always send if buttons changed or an impulse is pending
        // even if it violates the rate limit!
-       if (!cl.cmd.impulse && (!cl_netimmediatebuttons.integer || cl.cmd.buttons == cl.movecmd[1].buttons))
-       {
-               // don't choke the connection with packets (obey rate limit)
-               if ((cls.protocol == PROTOCOL_QUAKEWORLD || cls.signon == SIGNONS) && !NetConn_CanSend(cls.netcon) && !cl.islocalgame)
-                       return;
-               // don't send too often (cl_netfps)
-               if (realtime < cl.lastpackettime + packettime)
-                       return;
-       }
+       important = (cl.cmd.impulse || (cl_netimmediatebuttons.integer && cl.cmd.buttons != cl.movecmd[1].buttons));
+       // don't send too often (cl_netfps)
+       if (!important && realtime < cl.lastpackettime + packettime)
+               return;
+       // don't choke the connection with packets (obey rate limit)
+       // it is important that this check be last, because it adds a new
+       // frame to the shownetgraph output and any cancelation after this
+       // will produce a nasty spike-like look to the netgraph
+       // we also still send if it is important
+       if (!NetConn_CanSend(cls.netcon) && !important)
+               return;
        // try to round off the lastpackettime to a multiple of the packet interval
        // (this causes it to emit packets at a steady beat)
        if (packettime > 0)