]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - client.h
fix "wrong ping times" issue once and for all (I don't see another fix that wouldn...
[xonotic/darkplaces.git] / client.h
index 6546773a928c229c2e9be4e0d873c0959d4049aa..7a96a47568d3e0680ac33850506bde601ae2b319 100644 (file)
--- a/client.h
+++ b/client.h
@@ -27,9 +27,8 @@ 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
+// this is the maximum number of input packets that can be predicted
+#define CL_MAX_USERCMDS 256
 
 // flags for rtlight rendering
 #define LIGHTFLAG_NORMALMODE 1
@@ -356,14 +355,21 @@ typedef struct usercmd_s
        vec_t   cursor_fraction;
        int             cursor_entitynumber;
 
-       double time;
-       double receivetime;
-       int msec; // for qw moves
+       double time; // time the move is executed for (cl_movement: clienttime, non-cl_movement: receivetime)
+       double receivetime; // time the move was received at
+       double clienttime; // time to which server state the move corresponds to
+       int msec; // for predicted moves
        int buttons;
        int impulse;
        int sequence;
        qboolean applied; // if false we're still accumulating a move
        qboolean predicted; // if true the sequence should be sent as 0
+
+       // derived properties
+       double frametime;
+       qboolean canjump;
+       qboolean jump;
+       qboolean crouch;
 } usercmd_t;
 
 typedef struct lightstyle_s
@@ -415,6 +421,7 @@ typedef struct cshift_s
 
 typedef enum cactive_e
 {
+       ca_uninitialized,       // during early startup
        ca_dedicated,           // a dedicated server with no ability to start a client
        ca_disconnected,        // full screen console with no connection
        ca_connected            // valid netcon, talking to a server
@@ -484,6 +491,14 @@ typedef struct cl_downloadack_s
 }
 cl_downloadack_t;
 
+typedef struct cl_soundstats_s
+{
+       int mixedsounds;
+       int totalsounds;
+       int latency_milliseconds;
+}
+cl_soundstats_t;
+
 //
 // the client_static_t structure is persistent through an arbitrary number
 // of server connections
@@ -517,13 +532,17 @@ typedef struct client_static_s
        int td_frames; // total frames parsed
        double td_onesecondnexttime;
        double td_onesecondframes;
-       double td_onesecondminframes;
-       double td_onesecondmaxframes;
-       double td_onesecondavgframes;
+       double td_onesecondrealtime;
+       double td_onesecondminfps;
+       double td_onesecondmaxfps;
+       double td_onesecondavgfps;
        int td_onesecondavgcount;
        // LordHavoc: pausedemo
        qboolean demopaused;
 
+       // sound mixer statistics for showsound display
+       cl_soundstats_t soundstats;
+
        qboolean connect_trying;
        int connect_remainingtries;
        double connect_nextsendtime;
@@ -646,7 +665,8 @@ typedef struct decal_s
        vec3_t                  normal;
        float                   size;
        float                   alpha; // 0-255
-       unsigned char   color[4];
+       unsigned char   color[3];
+       unsigned char   unused1;
 
        // fields not used by rendering: (36 bytes in 32bit, 40 bytes in 64bit)
        float                   time2; // used for decal fade
@@ -654,7 +674,6 @@ typedef struct decal_s
        model_t                 *ownermodel; // model the decal is stuck to (used to make sure the entity is still alive)
        vec3_t                  relativeorigin; // decal at this location in entity's coordinate space
        vec3_t                  relativenormal; // decal oriented this way relative to entity's coordinate space
-
 }
 decal_t;
 
@@ -667,7 +686,8 @@ typedef struct particle_s
        vec3_t                  vel; // velocity of particle, or orientation of decal, or end point of beam
        float                   size;
        float                   alpha; // 0-255
-       unsigned char   color[4];
+       unsigned char   color[3];
+       unsigned char   qualityreduction; // enables skipping of this particle according to r_refdef.view.qualityreduction
 
        // fields not used by rendering:  (40 bytes)
        float                   sizeincrease; // rate of size change per second
@@ -780,18 +800,9 @@ typedef struct client_state_s
        qboolean movement_predicted;
        // if true the CL_ClientMovement_Replay function will update origin, etc
        qboolean movement_replay;
-       // this is set true by svc_time parsing and causes a new movement to be
-       // queued for prediction purposes
-       qboolean movement_needupdate;
-       // timestamps of latest two predicted moves for interpolation
-       double movement_time[4];
        // simulated data (this is valid even if cl.movement is false)
        vec3_t movement_origin;
-       vec3_t movement_oldorigin;
        vec3_t movement_velocity;
-       // queue of proposed moves
-       int movement_numqueue;
-       client_movementqueue_t movement_queue[256];
        // whether the replay should allow a jump at the first sequence
        qboolean movement_replay_canjump;
 
@@ -1001,7 +1012,6 @@ typedef struct client_state_s
        float movevars_wallfriction;
        float movevars_waterfriction;
        float movevars_friction;
-       float movevars_packetinterval; // in game time (cl.time), not realtime
        float movevars_timescale;
        float movevars_gravity;
        float movevars_stopspeed;
@@ -1314,7 +1324,7 @@ void CL_ParticleExplosion (const vec3_t org);
 void CL_ParticleExplosion2 (const vec3_t org, int colorStart, int colorLength);
 void R_NewExplosion(const vec3_t org);
 
-void Debug_PolygonBegin(const char *picname, int flags, qboolean draw2d, float linewidth);
+void Debug_PolygonBegin(const char *picname, int flags);
 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);
 
@@ -1328,6 +1338,7 @@ float FogForDistance(vec_t dist);
 
 typedef struct r_refdef_stats_s
 {
+       int renders;
        int entities;
        int entities_surfaces;
        int entities_triangles;
@@ -1398,6 +1409,8 @@ typedef struct r_refdef_view_s
 
        // whether to call R_ClearScreen before rendering stuff
        qboolean clear;
+       // if true, don't clear or do any post process effects (bloom, etc)
+       qboolean isoverlay;
 
        // whether to draw r_showtris and such, this is only true for the main
        // view render, all secondary renders (HDR, mirrors, portals, cameras,
@@ -1407,6 +1420,9 @@ typedef struct r_refdef_view_s
        // these define which values to use in GL_CullFace calls to request frontface or backface culling
        int cullface_front;
        int cullface_back;
+
+       // render quality (0 to 1) - affects r_drawparticles_drawdistance and others
+       float quality;
 }
 r_refdef_view_t;
 
@@ -1464,6 +1480,13 @@ typedef struct r_refdef_scene_s {
        // 8.8bit fixed point intensities for light styles
        // controls intensity lightmap layers
        unsigned short lightstylevalue[256];    // 8.8 fraction of base light value
+
+       float ambient;
+
+       qboolean rtworld;
+       qboolean rtworldshadows;
+       qboolean rtdlight;
+       qboolean rtdlightshadows;
 } r_refdef_scene_t;
 
 typedef struct r_refdef_s
@@ -1517,10 +1540,6 @@ typedef struct r_refdef_s
        // (often reduced when world rtlights are enabled)
        float lightmapintensity;
        // whether to draw world lights realtime, dlights realtime, and their shadows
-       qboolean rtworld;
-       qboolean rtworldshadows;
-       qboolean rtdlight;
-       qboolean rtdlightshadows;
        float polygonfactor;
        float polygonoffset;
        float shadowpolygonfactor;