mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-22 20:51:31 +00:00
Implement distinct versions of Qcommon_Frame() for both build types.
Yes, this duplicates some code. But it's at least 100 times more readable to have two distinct functions for distinct purposes instead of about 25 #ifdef.
This commit is contained in:
parent
85890da3bb
commit
70f678fb80
1 changed files with 87 additions and 15 deletions
|
@ -76,8 +76,6 @@ void SCR_EndLoadingPlaque(void);
|
||||||
void
|
void
|
||||||
Qcommon_Init(int argc, char **argv)
|
Qcommon_Init(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *s;
|
|
||||||
|
|
||||||
// Jump point used in emergency situations.
|
// Jump point used in emergency situations.
|
||||||
if (setjmp(abortframe))
|
if (setjmp(abortframe))
|
||||||
{
|
{
|
||||||
|
@ -132,6 +130,7 @@ Qcommon_Init(int argc, char **argv)
|
||||||
modder = Cvar_Get("modder", "0", 0);
|
modder = Cvar_Get("modder", "0", 0);
|
||||||
timescale = Cvar_Get("timescale", "1", 0);
|
timescale = Cvar_Get("timescale", "1", 0);
|
||||||
|
|
||||||
|
char *s;
|
||||||
s = va("%s %s %s %s", YQ2VERSION, YQ2ARCH, BUILD_DATE, YQ2OSTYPE);
|
s = va("%s %s %s %s", YQ2VERSION, YQ2ARCH, BUILD_DATE, YQ2OSTYPE);
|
||||||
Cvar_Get("version", s, CVAR_SERVERINFO | CVAR_NOSET);
|
Cvar_Get("version", s, CVAR_SERVERINFO | CVAR_NOSET);
|
||||||
|
|
||||||
|
@ -186,16 +185,17 @@ Qcommon_Init(int argc, char **argv)
|
||||||
Com_Printf("*************************************\n\n");
|
Com_Printf("*************************************\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef DEDICATED_ONLY
|
||||||
void
|
void
|
||||||
Qcommon_Frame(int msec)
|
Qcommon_Frame(int msec)
|
||||||
{
|
{
|
||||||
|
// Used for the dedicated server console.
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
#ifndef DEDICATED_ONLY
|
// Statistics.
|
||||||
int time_before = 0;
|
int time_before = 0;
|
||||||
int time_between = 0;
|
int time_between = 0;
|
||||||
int time_after;
|
int time_after;
|
||||||
#endif
|
|
||||||
|
|
||||||
// Target packetframerate.
|
// Target packetframerate.
|
||||||
int pfps;
|
int pfps;
|
||||||
|
@ -287,7 +287,6 @@ Qcommon_Frame(int msec)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef DEDICATED_ONLY
|
|
||||||
if (showtrace->value)
|
if (showtrace->value)
|
||||||
{
|
{
|
||||||
extern int c_traces, c_brush_traces;
|
extern int c_traces, c_brush_traces;
|
||||||
|
@ -298,11 +297,9 @@ Qcommon_Frame(int msec)
|
||||||
c_brush_traces = 0;
|
c_brush_traces = 0;
|
||||||
c_pointcontents = 0;
|
c_pointcontents = 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// Calculate target packet- and renderframerate.
|
// Calculate target packet- and renderframerate.
|
||||||
#ifndef DEDICATED_ONLY
|
|
||||||
if (R_IsVSyncActive())
|
if (R_IsVSyncActive())
|
||||||
{
|
{
|
||||||
rfps = GLimp_GetRefreshRate();
|
rfps = GLimp_GetRefreshRate();
|
||||||
|
@ -318,10 +315,6 @@ Qcommon_Frame(int msec)
|
||||||
}
|
}
|
||||||
|
|
||||||
pfps = (cl_maxfps->value > rfps) ? rfps : cl_maxfps->value;
|
pfps = (cl_maxfps->value > rfps) ? rfps : cl_maxfps->value;
|
||||||
#else
|
|
||||||
pfps = (int)cl_maxfps->value;
|
|
||||||
rfps = (int)gl_maxfps->value;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// Calculate timings.
|
// Calculate timings.
|
||||||
|
@ -374,12 +367,10 @@ Qcommon_Frame(int msec)
|
||||||
Cbuf_Execute();
|
Cbuf_Execute();
|
||||||
|
|
||||||
|
|
||||||
#ifndef DEDICATED_ONLY
|
|
||||||
if (host_speeds->value)
|
if (host_speeds->value)
|
||||||
{
|
{
|
||||||
time_before = Sys_Milliseconds();
|
time_before = Sys_Milliseconds();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// Run the serverframe.
|
// Run the serverframe.
|
||||||
|
@ -389,7 +380,6 @@ Qcommon_Frame(int msec)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef DEDICATED_ONLY
|
|
||||||
if (host_speeds->value)
|
if (host_speeds->value)
|
||||||
{
|
{
|
||||||
time_between = Sys_Milliseconds();
|
time_between = Sys_Milliseconds();
|
||||||
|
@ -419,7 +409,6 @@ Qcommon_Frame(int msec)
|
||||||
Com_Printf("all:%3i sv:%3i gm:%3i cl:%3i rf:%3i\n",
|
Com_Printf("all:%3i sv:%3i gm:%3i cl:%3i rf:%3i\n",
|
||||||
all, sv, gm, cl, rf);
|
all, sv, gm, cl, rf);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// Reset deltas if necessary.
|
// Reset deltas if necessary.
|
||||||
|
@ -435,4 +424,87 @@ Qcommon_Frame(int msec)
|
||||||
miscdelta = 0;
|
miscdelta = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
void
|
||||||
|
Qcommon_Frame(int msec)
|
||||||
|
{
|
||||||
|
// For the dedicated server terminal console.
|
||||||
|
char *s;
|
||||||
|
|
||||||
|
// Target packetframerate.
|
||||||
|
int pfps;
|
||||||
|
|
||||||
|
// Time since last packetframe in microsec.
|
||||||
|
static int packetdelta = 1000000;
|
||||||
|
|
||||||
|
// Accumulated time since last server run.
|
||||||
|
static int servertimedelta = 0;
|
||||||
|
|
||||||
|
/* A packetframe runs the server and the client,
|
||||||
|
but not the renderer. The minimal interval of
|
||||||
|
packetframes is about 10.000 microsec. If run
|
||||||
|
more often the movement prediction in pmove.c
|
||||||
|
breaks. That's the Q2 variant if the famous
|
||||||
|
125hz bug. */
|
||||||
|
qboolean packetframe = true;
|
||||||
|
|
||||||
|
|
||||||
|
/* In case of ERR_DROP we're jumping here. Don't know
|
||||||
|
if that' really save but it seems to work. So leave
|
||||||
|
it alone. */
|
||||||
|
if (setjmp(abortframe))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Timing debug crap. Just for historical reasons.
|
||||||
|
if (fixedtime->value)
|
||||||
|
{
|
||||||
|
msec = (int)fixedtime->value;
|
||||||
|
}
|
||||||
|
else if (timescale->value)
|
||||||
|
{
|
||||||
|
msec *= timescale->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pfps = (int)cl_maxfps->value;
|
||||||
|
|
||||||
|
|
||||||
|
// Calculate timings.
|
||||||
|
packetdelta += msec;
|
||||||
|
servertimedelta += msec;
|
||||||
|
|
||||||
|
|
||||||
|
// Network frame time.
|
||||||
|
if (packetdelta < (1000000.0f / pfps)) {
|
||||||
|
packetframe = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Dedicated server terminal console.
|
||||||
|
do {
|
||||||
|
s = Sys_ConsoleInput();
|
||||||
|
|
||||||
|
if (s) {
|
||||||
|
Cbuf_AddText(va("%s\n", s));
|
||||||
|
}
|
||||||
|
} while (s);
|
||||||
|
|
||||||
|
Cbuf_Execute();
|
||||||
|
|
||||||
|
|
||||||
|
// Run the serverframe.
|
||||||
|
if (packetframe) {
|
||||||
|
SV_Frame(servertimedelta);
|
||||||
|
servertimedelta = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Reset deltas if necessary.
|
||||||
|
if (packetframe) {
|
||||||
|
packetdelta = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue