X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=client.h;h=31018173fa80ff352f1057c04876638af56c5c91;hb=46597646d10f73154d805b0bfe0524d414f29acf;hp=699a9c89909cf11b29a865a3ee1b4731b621bd4a;hpb=5d105e92ce94949fcd5659172907ddd571496457;p=xonotic%2Fdarkplaces.git diff --git a/client.h b/client.h index 699a9c89..31018173 100644 --- 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