diff options
Diffstat (limited to 'samples/quake/jni/cl_demo.cpp')
-rw-r--r-- | samples/quake/jni/cl_demo.cpp | 383 |
1 files changed, 0 insertions, 383 deletions
diff --git a/samples/quake/jni/cl_demo.cpp b/samples/quake/jni/cl_demo.cpp deleted file mode 100644 index 2208001..0000000 --- a/samples/quake/jni/cl_demo.cpp +++ /dev/null @@ -1,383 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ - -#include "quakedef.h" - -void CL_FinishTimeDemo (void); - -/* -============================================================================== - -DEMO CODE - -When a demo is playing back, all NET_SendMessages are skipped, and -NET_GetMessages are read from the demo file. - -Whenever cl.time gets past the last received message, another message is -read from the demo file. -============================================================================== -*/ - -/* -============== -CL_StopPlayback - -Called when a demo file runs out, or the user starts a game -============== -*/ -void CL_StopPlayback (void) -{ - if (!cls.demoplayback) - return; - - fclose (cls.demofile); - cls.demoplayback = false; - cls.demofile = NULL; - cls.state = ca_disconnected; - - if (cls.timedemo) - CL_FinishTimeDemo (); -} - -/* -==================== -CL_WriteDemoMessage - -Dumps the current net message, prefixed by the length and view angles -==================== -*/ -void CL_WriteDemoMessage (void) -{ - int len; - int i; - float f; - - len = LittleLong (net_message.cursize); - fwrite (&len, 4, 1, cls.demofile); - for (i=0 ; i<3 ; i++) - { - f = LittleFloat (cl.viewangles[i]); - fwrite (&f, 4, 1, cls.demofile); - } - fwrite (net_message.data, net_message.cursize, 1, cls.demofile); - fflush (cls.demofile); -} - -/* -==================== -CL_GetMessage - -Handles recording and playback of demos, on top of NET_ code -==================== -*/ -int CL_GetMessage (void) -{ - int r, i; - float f; - - if (cls.demoplayback) - { - // decide if it is time to grab the next message - if (cls.signon == SIGNONS) // allways grab until fully connected - { - if (cls.timedemo) - { - if (host_framecount == cls.td_lastframe) - return 0; // allready read this frame's message - cls.td_lastframe = host_framecount; - // if this is the second frame, grab the real td_starttime - // so the bogus time on the first frame doesn't count - if (host_framecount == cls.td_startframe + 1) - cls.td_starttime = realtime; - } - else if ( /* cl.time > 0 && */ cl.time <= cl.mtime[0]) - { - return 0; // don't need another message yet - } - } - - // get the next message - fread (&net_message.cursize, 4, 1, cls.demofile); - VectorCopy (cl.mviewangles[0], cl.mviewangles[1]); - for (i=0 ; i<3 ; i++) - { - r = fread (&f, 4, 1, cls.demofile); - cl.mviewangles[0][i] = LittleFloat (f); - } - - net_message.cursize = LittleLong (net_message.cursize); - if (net_message.cursize > MAX_MSGLEN) - Sys_Error ("Demo message > MAX_MSGLEN"); - r = fread (net_message.data, net_message.cursize, 1, cls.demofile); - if (r != 1) - { - CL_StopPlayback (); - return 0; - } - - return 1; - } - - while (1) - { - r = NET_GetMessage (cls.netcon); - - if (r != 1 && r != 2) - return r; - - // discard nop keepalive message - if (net_message.cursize == 1 && net_message.data[0] == svc_nop) - Con_Printf ("<-- server to client keepalive\n"); - else - break; - } - - if (cls.demorecording) - CL_WriteDemoMessage (); - - return r; -} - - -/* -==================== -CL_Stop_f - -stop recording a demo -==================== -*/ -void CL_Stop_f (void) -{ - if (cmd_source != src_command) - return; - - if (!cls.demorecording) - { - Con_Printf ("Not recording a demo.\n"); - return; - } - -// write a disconnect message to the demo file - SZ_Clear (&net_message); - MSG_WriteByte (&net_message, svc_disconnect); - CL_WriteDemoMessage (); - -// finish up - fclose (cls.demofile); - cls.demofile = NULL; - cls.demorecording = false; - Con_Printf ("Completed demo\n"); -} - -/* -==================== -CL_Record_f - -record <demoname> <map> [cd track] -==================== -*/ -void CL_Record_f (void) -{ - int c; - char name[MAX_OSPATH]; - int track; - - if (cmd_source != src_command) - return; - - c = Cmd_Argc(); - if (c != 2 && c != 3 && c != 4) - { - Con_Printf ("record <demoname> [<map> [cd track]]\n"); - return; - } - - if (strstr(Cmd_Argv(1), "..")) - { - Con_Printf ("Relative pathnames are not allowed.\n"); - return; - } - - if (c == 2 && cls.state == ca_connected) - { - Con_Printf("Can not record - already connected to server\nClient demo recording must be started before connecting\n"); - return; - } - -// write the forced cd track number, or -1 - if (c == 4) - { - track = atoi(Cmd_Argv(3)); - Con_Printf ("Forcing CD track to %i\n", cls.forcetrack); - } - else - track = -1; - - sprintf (name, "%s/%s", com_gamedir, Cmd_Argv(1)); - -// -// start the map up -// - if (c > 2) - Cmd_ExecuteString ( va("map %s", Cmd_Argv(2)), src_command); - -// -// open the demo file -// - COM_DefaultExtension (name, ".dem"); - - Con_Printf ("recording to %s.\n", name); - cls.demofile = fopen (name, "wb"); - if (!cls.demofile) - { - Con_Printf ("ERROR: couldn't open.\n"); - return; - } - - cls.forcetrack = track; - fprintf (cls.demofile, "%i\n", cls.forcetrack); - - cls.demorecording = true; -} - - -/* -==================== -CL_PlayDemo_f - -play [demoname] -==================== -*/ -void CL_PlayDemo_f (void) -{ - char name[256]; - int c; - qboolean neg = false; - - if (cmd_source != src_command) - return; - - if (Cmd_Argc() > 2) - { - Con_Printf ("play <demoname> : plays a demo\n"); - return; - } - -// -// disconnect from server -// - CL_Disconnect (); - -// -// open the demo file -// - const char* cmdName = "demo1"; - if (Cmd_Argc() == 2) { - cmdName = Cmd_Argv(1); - } - strcpy (name, cmdName); - COM_DefaultExtension (name, ".dem"); - - Con_Printf ("Playing demo from %s.\n", name); - COM_FOpenFile (name, &cls.demofile); - if (!cls.demofile) - { - Con_Printf ("ERROR: couldn't open.\n"); - cls.demonum = -1; // stop demo loop - return; - } - - cls.demoplayback = true; - cls.state = ca_connected; - cls.forcetrack = 0; - - while ((c = getc(cls.demofile)) != '\n') - if (c == '-') - neg = true; - else - cls.forcetrack = cls.forcetrack * 10 + (c - '0'); - - if (neg) - cls.forcetrack = -cls.forcetrack; -// ZOID, fscanf is evil -// fscanf (cls.demofile, "%i\n", &cls.forcetrack); -} - -// The timedemo numbers are very important to testing, so log them even if normal console printing is disabled. - -#define LOGANDPRINT(ARGS) Con_Printf ARGS ; PMPLOG(ARGS) - -/* -==================== -CL_FinishTimeDemo - -==================== -*/ -void CL_FinishTimeDemo (void) -{ - int frames; - float time; - - cls.timedemo = false; - -// the first frame didn't count - frames = (host_framecount - cls.td_startframe) - 1; - time = realtime - cls.td_starttime; - if (!time) - time = 1; - LOGANDPRINT(("%i frames %5.3f seconds %5.3f fps\n", frames, time, frames/time)); - if (frames > 0) - { - LOGANDPRINT(("Fastest: %5.1f ms on frame %d\n", fastestFrame.time * 1000.0, fastestFrame.frame)); - LOGANDPRINT(("Average: %5.1f ms\n", (time / frames) * 1000.0)); - LOGANDPRINT(("Slowest: %5.1f ms on frame %d\n", slowestFrame.time * 1000.0, slowestFrame.frame)); - } -} - -/* -==================== -CL_TimeDemo_f - -timedemo [demoname] -==================== -*/ -void CL_TimeDemo_f (void) -{ - if (cmd_source != src_command) - return; - - if (Cmd_Argc() > 2) - { - Con_Printf ("timedemo <demoname> : gets demo speeds\n"); - return; - } - - CL_PlayDemo_f (); - -// cls.td_starttime will be grabbed at the second frame of the demo, so -// all the loading time doesn't get counted - - cls.timedemo = true; - cls.td_startframe = host_framecount; - cls.td_lastframe = -1; // get a new message this frame - - InitFrameTimes(); -} - |