]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - client.h
less hacky solution to resetting movesequence on a level change
[xonotic/darkplaces.git] / client.h
index 699a9c89909cf11b29a865a3ee1b4731b621bd4a..31018173fa80ff352f1057c04876638af56c5c91 100644 (file)
--- a/client.h
+++ b/client.h
@@ -126,6 +126,19 @@ typedef struct rtlight_s
        // surfaces seen by light
        int static_numsurfaces;
        int *static_surfacelist;
+       // flag bits indicating which triangles of the world model should cast
+       // shadows, and which ones should be lit
+       //
+       // this avoids redundantly scanning the triangles in each surface twice
+       // for whether they should cast shadows, once in culling and once in the
+       // actual shadowmarklist production.
+       int static_numshadowtrispvsbytes;
+       unsigned char *static_shadowtrispvs;
+       // this allows the lighting batch code to skip backfaces andother culled
+       // triangles not relevant for lighting
+       // (important on big surfaces such as terrain)
+       int static_numlighttrispvsbytes;
+       unsigned char *static_lighttrispvs;
 }
 rtlight_t;
 
@@ -150,11 +163,7 @@ typedef struct dlight_s
        // color of light
        // (worldlight: saved to .rtlights file)
        vec3_t color;
-       // cubemap number to use on this light
-       // (dlight only)
-       int cubemapnum;
        // cubemap name to use on this light
-       // (worldlight only)
        // (worldlight: saved to .rtlights file)
        char cubemapname[64];
        // make light flash while selected
@@ -201,7 +210,7 @@ typedef struct dlight_s
        // (worldlight only)
        struct dlight_s *next;
        // embedded rtlight struct for renderer
-       // (renderer only)
+       // (worldlight only)
        rtlight_t rtlight;
 }
 dlight_t;
@@ -273,6 +282,9 @@ typedef struct entity_render_s
        vec3_t modellight_ambient;
        vec3_t modellight_diffuse; // q3bsp
        vec3_t modellight_lightdir; // q3bsp
+
+       // last time visible during trace culling
+       double last_trace_visibility;
 }
 entity_render_t;
 
@@ -513,6 +525,10 @@ typedef struct client_static_s
        // (note: qw_download variables are also used)
        cl_downloadack_t dp_downloadack[CL_MAX_DOWNLOADACKS];
 
+       // input sequence numbers are not reset on level change, only connect
+       int movesequence;
+       int servermovesequence;
+
        // quakeworld stuff below
 
        // value of "qport" cvar at time of connection
@@ -644,10 +660,6 @@ 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;
 
@@ -670,7 +682,8 @@ typedef struct client_state_s
        // use pain anim frame if cl.time < this
        float faceanimtime;
        // for stair smoothing
-       float stairoffset;
+       float stairsmoothz;
+       double stairsmoothtime;
 
        // color shifts for damage, powerups
        cshift_t cshifts[NUM_CSHIFTS];
@@ -716,8 +729,6 @@ typedef struct client_state_s
        // queue of proposed moves
        int movement_numqueue;
        client_movementqueue_t movement_queue[256];
-       int movesequence;
-       int servermovesequence;
        // whether the replay should allow a jump at the first sequence
        qboolean movement_replay_canjump;
 
@@ -755,15 +766,11 @@ 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
+       // note: cl.time may be beyond cl.mtime[0] if packet loss is occuring, it
+       // is only forcefully limited when a packet is received
        double time, oldtime;
        // how long it has been since the previous client frame in real time
        // (not game time, for that use cl.time - cl.oldtime)
@@ -889,6 +896,7 @@ typedef struct client_state_s
        int downloadsound_current;
        int loadsound_total;
        qboolean downloadcsqc;
+       qboolean loadbegun;
        qboolean loadfinished;
 
        // quakeworld stuff
@@ -939,6 +947,11 @@ typedef struct client_state_s
        int qw_validsequence;
 
        int qw_deltasequence[QW_UPDATE_BACKUP];
+
+       // csqc stuff:
+
+       // collision culling data
+       world_t world;
 }
 client_state_t;
 
@@ -971,6 +984,7 @@ extern cvar_t cl_autofire;
 
 extern cvar_t cl_shownet;
 extern cvar_t cl_nolerp;
+extern cvar_t cl_nettimesyncmode;
 
 extern cvar_t cl_pitchdriftspeed;
 extern cvar_t lookspring;
@@ -1001,7 +1015,7 @@ extern cvar_t cl_prydoncursor;
 
 extern client_state_t cl;
 
-extern void CL_AllocDlight (entity_render_t *ent, matrix4x4_t *matrix, float radius, float red, float green, float blue, float decay, float lifetime, int cubemapnum, int style, int shadowenable, vec_t corona, vec_t coronasizescale, vec_t ambientscale, vec_t diffusescale, vec_t specularscale, int flags);
+extern void CL_AllocLightFlash (entity_render_t *ent, matrix4x4_t *matrix, float radius, float red, float green, float blue, float decay, float lifetime, int cubemapnum, int style, int shadowenable, vec_t corona, vec_t coronasizescale, vec_t ambientscale, vec_t diffusescale, vec_t specularscale, int flags);
 
 //=============================================================================
 
@@ -1057,7 +1071,7 @@ void CL_SetInfo(const char *key, const char *value, qboolean send, qboolean allo
 
 int  CL_ReadFromServer (void);
 void CL_WriteToServer (void);
-void CL_Move (void);
+void CL_Input (void);
 extern qboolean cl_ignoremousemove;
 
 
@@ -1112,7 +1126,6 @@ extern cvar_t cl_particles_blood;
 extern cvar_t cl_particles_blood_alpha;
 extern cvar_t cl_particles_blood_bloodhack;
 extern cvar_t cl_particles_bulletimpacts;
-extern cvar_t cl_particles_explosions_bubbles;
 extern cvar_t cl_particles_explosions_smoke;
 extern cvar_t cl_particles_explosions_sparks;
 extern cvar_t cl_particles_explosions_shell;
@@ -1174,6 +1187,7 @@ effectnameindex_t;
 int CL_ParticleEffectIndexForName(const char *name);
 const char *CL_ParticleEffectNameForIndex(int i);
 void CL_ParticleEffect(int effectindex, float pcount, const vec3_t originmins, const vec3_t originmaxs, const vec3_t velocitymins, const vec3_t velocitymaxs, entity_t *ent, int palettecolor);
+void CL_ParticleTrail(int effectindex, float pcount, const vec3_t originmins, const vec3_t originmaxs, const vec3_t velocitymins, const vec3_t velocitymaxs, entity_t *ent, int palettecolor, qboolean spawndlight, qboolean spawnparticles);
 void CL_ParseParticleEffect (void);
 void CL_ParticleCube (const vec3_t mins, const vec3_t maxs, const vec3_t dir, int count, int colorbase, vec_t gravity, vec_t randomvel);
 void CL_ParticleRain (const vec3_t mins, const vec3_t maxs, const vec3_t dir, int count, int colorbase, int type);
@@ -1258,7 +1272,7 @@ typedef struct r_refdef_s
        int maxentities;
 
        // renderable dynamic lights
-       dlight_t *lights[MAX_DLIGHTS];
+       rtlight_t lights[MAX_DLIGHTS];
        int numlights;
 
        // 8.8bit fixed point intensities for light styles