summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Nazarov <skuller@skuller.net>2011-05-26 13:25:08 +0400
committerAndrey Nazarov <skuller@skuller.net>2011-05-26 13:25:08 +0400
commitd7bcacd9fb01162c70f5f44ed9bea360c1ad4be4 (patch)
treea6b2de2fccbea7b703281bd5f61521c3cb1077ff
parentf5624d2154c1aabc67a45c1e82cd25550df33a14 (diff)
Improve client event loop.
Execute command buffers directly inside CL_ProcessEvents. Break sub-msec spin loop when important event occurs.
-rw-r--r--src/cl_main.c16
-rw-r--r--src/cl_public.h2
-rw-r--r--src/common.c7
-rw-r--r--src/sv_main.c5
4 files changed, 19 insertions, 11 deletions
diff --git a/src/cl_main.c b/src/cl_main.c
index 3406d1b..726d177 100644
--- a/src/cl_main.c
+++ b/src/cl_main.c
@@ -2973,13 +2973,11 @@ unsigned CL_Frame( unsigned msec ) {
return UINT_MAX;
}
- CL_ProcessEvents();
-
- Cbuf_Execute( &cl_cmdbuf );
-
main_extra += msec;
cls.realtime += msec;
+ CL_ProcessEvents();
+
ref_frame = phys_frame = qtrue;
switch( sync_mode ) {
case SYNC_FULL:
@@ -3142,9 +3140,9 @@ run_fx:
CL_ProcessEvents
============
*/
-void CL_ProcessEvents( void ) {
+qboolean CL_ProcessEvents( void ) {
if( !cl_running->integer ) {
- return;
+ return qfalse;
}
CL_RunRefresh();
@@ -3164,9 +3162,15 @@ void CL_ProcessEvents( void ) {
CL_PacketEvent();
}
+ // process console and stuffed commands
+ Cbuf_Execute( &cmd_buffer );
+ Cbuf_Execute( &cl_cmdbuf );
+
#if USE_CURL
HTTP_RunDownloads();
#endif
+
+ return cl.sendPacketNow;
}
//============================================================================
diff --git a/src/cl_public.h b/src/cl_public.h
index 4c65705..223771c 100644
--- a/src/cl_public.h
+++ b/src/cl_public.h
@@ -47,7 +47,7 @@ typedef enum {
ACT_ACTIVATED
} active_t;
-void CL_ProcessEvents( void );
+qboolean CL_ProcessEvents( void );
#if USE_ICMP
void CL_ErrorEvent( void );
#endif
diff --git a/src/common.c b/src/common.c
index adb384e..ffe22ed 100644
--- a/src/common.c
+++ b/src/common.c
@@ -2134,9 +2134,11 @@ void Qcommon_Frame( void ) {
// spin until msec is non-zero if running a client
if( !dedicated->integer && !com_timedemo->integer ) {
while( msec < 1 ) {
- CL_ProcessEvents();
+ qboolean break_now = CL_ProcessEvents();
com_eventTime = Sys_Milliseconds();
msec = com_eventTime - oldtime;
+ if( break_now )
+ break;
}
}
#endif
@@ -2200,9 +2202,6 @@ void Qcommon_Frame( void ) {
all, ev, sv, gm, cl, rf );
}
#endif
-
- // this is the only place where console commands are processed.
- Cbuf_Execute( &cmd_buffer );
}
/*
diff --git a/src/sv_main.c b/src/sv_main.c
index 9ede239..2517779 100644
--- a/src/sv_main.c
+++ b/src/sv_main.c
@@ -1622,6 +1622,11 @@ unsigned SV_Frame( unsigned msec ) {
// advance local server time
svs.realtime += msec;
+ if( Com_IsDedicated() ) {
+ // process console commands if not running a client
+ Cbuf_Execute( &cmd_buffer );
+ }
+
#if USE_MVD_CLIENT
// run connections to MVD/GTV servers
MVD_Frame();