X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=client.h;h=01d443301dc1563a7aa43f22fe80a03ac4ca4f5e;hb=c205fc63e780877ef0b6b3cfe747e2f9e8228c40;hp=df05ea43df18387ea5a081bf68796e19cebce478;hpb=8b37a3a674013f693250d761388cbf39265a0d42;p=xonotic%2Fdarkplaces.git diff --git a/client.h b/client.h index df05ea43..01d44330 100644 --- a/client.h +++ b/client.h @@ -27,6 +27,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // LordHavoc: 256 dynamic lights #define MAX_DLIGHTS 256 +// this is the maximum number of input packets that can be lost without a +// misprediction +#define CL_MAX_USERCMDS 16 + // flags for rtlight rendering #define LIGHTFLAG_NORMALMODE 1 #define LIGHTFLAG_REALTIMEMODE 2 @@ -274,8 +278,6 @@ entity_render_t; typedef struct entity_persistent_s { - int linkframe; - vec3_t trail_origin; // particle trail @@ -300,7 +302,6 @@ entity_persistent_t; typedef struct entity_s { - qboolean csqc; // baseline state (default values) entity_state_t state_baseline; // previous state (interpolating from this) @@ -335,6 +336,7 @@ typedef struct usercmd_s double time; double receivetime; + int msec; // for qw moves int buttons; int impulse; int sequence; @@ -483,10 +485,12 @@ typedef struct client_static_s int td_startframe; // realtime at second frame of timedemo (LordHavoc: changed to double) double td_starttime; - // LordHavoc: for measuring maxfps - double td_minframetime; - // LordHavoc: for measuring minfps - double td_maxframetime; + double td_onesecondnexttime; + double td_onesecondframes; + double td_onesecondminframes; + double td_onesecondmaxframes; + double td_onesecondavgframes; + int td_onesecondavgcount; // LordHavoc: pausedemo qboolean demopaused; @@ -567,18 +571,6 @@ typedef struct qboolean drawcrosshair; }csqc_vidvars_t; -typedef struct qw_usercmd_s -{ - vec3_t angles; - short forwardmove, sidemove, upmove; - unsigned char padding1[2]; - unsigned char msec; - unsigned char buttons; - unsigned char impulse; - unsigned char padding2; -} -qw_usercmd_t; - typedef enum { PARTICLE_BILLBOARD = 0, @@ -652,15 +644,13 @@ typedef struct client_state_s // true if playing in a local game and no one else is connected int islocalgame; - // when connecting to the server throw out the first couple move messages - // so the player doesn't accidentally do something the first frame - int movemessages; - // send a clc_nop periodically until connected float sendnoptime; - // current input to send to the server + // current input being accumulated by mouse/joystick/etc input usercmd_t cmd; + // latest moves sent to the server that have not been confirmed yet + usercmd_t movecmd[CL_MAX_USERCMDS]; // information for local display // health, etc @@ -713,10 +703,8 @@ typedef struct client_state_s // this is set true by svc_time parsing and causes a new movement to be // queued for prediction purposes qboolean movement_needupdate; - // indicates the queue has been updated and should be replayed - qboolean movement_replay; // timestamps of latest two predicted moves for interpolation - double movement_time[2]; + double movement_time[4]; // simulated data (this is valid even if cl.movement is false) vec3_t movement_origin; vec3_t movement_oldorigin; @@ -763,6 +751,12 @@ typedef struct client_state_s // the timestamp of the last two messages double mtime[2]; + // similar to cl.time but this can go past cl.mtime[0] when packets are + // not being received, it is still clamped to the cl.mtime[1] to + // cl.mtime[0] range whenever a packet is received, it just does not stop + // when interpolation finishes + double timenonlerp; + // clients view of time, time should be between mtime[0] and mtime[1] to // generate a lerp point for other data, oldtime is the previous frame's // value of time, frametime is the difference between time and oldtime @@ -852,7 +846,6 @@ typedef struct client_state_s vec3_t playercrouchmaxs; int max_entities; - int max_csqcentities; int max_static_entities; int max_temp_entities; int max_effects; @@ -863,9 +856,7 @@ typedef struct client_state_s int max_particles; entity_t *entities; - entity_t *csqcentities; //[515]: csqc unsigned char *entities_active; - unsigned char *csqcentities_active; //[515]: csqc entity_t *static_entities; entity_t *temp_entities; cl_effect_t *effects; @@ -876,7 +867,6 @@ typedef struct client_state_s particle_t *particles; int num_entities; - int num_csqcentities; //[515]: csqc int num_static_entities; int num_temp_entities; int num_brushmodel_entities; @@ -944,8 +934,6 @@ typedef struct client_state_s int qw_validsequence; - qw_usercmd_t qw_moves[QW_UPDATE_BACKUP]; - int qw_deltasequence[QW_UPDATE_BACKUP]; } client_state_t; @@ -1026,6 +1014,7 @@ void CL_Disconnect (void); void CL_Disconnect_f (void); void CL_UpdateRenderEntity(entity_render_t *ent); +void CL_UpdateEntities(void); // // cl_input @@ -1191,6 +1180,10 @@ void CL_MoveParticles(void); void R_MoveExplosions(void); void R_NewExplosion(const vec3_t org); +void Debug_PolygonBegin(const char *picname, int flags, qboolean draw2d, float linewidth); +void Debug_PolygonVertex(float x, float y, float z, float s, float t, float r, float g, float b, float a); +void Debug_PolygonEnd(void); + #include "cl_screen.h" extern qboolean sb_showscores;