X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=client.h;h=278bd92e230cfa806eb1e005fc203443efc191b4;hb=d8812d8220ccaa6ae1fd7b7e735c50b8262b8b20;hp=afc49452860accdbedaf92abef7035396bd76e13;hpb=eb3d71b9feaefca24fe80b9970eb11d07fd295b5;p=xonotic%2Fdarkplaces.git diff --git a/client.h b/client.h index afc49452..278bd92e 100644 --- a/client.h +++ b/client.h @@ -19,6 +19,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // client.h +#ifndef CLIENT_H +#define CLIENT_H + typedef struct frameblend_s { int frame; @@ -26,60 +29,108 @@ typedef struct frameblend_s } frameblend_t; -// LordHavoc: nothing in this structure is persistant, it may be overwritten by the client every frame, for persistant data use entity_lerp_t. +#define MAXENTLIGHTS 128 + +// LordHavoc: disregard the following warning, entlights stuff is semi-persistent... +// LordHavoc: nothing in this structure is persistent, it may be overwritten by the client every frame, for persistent data use entity_lerp_t. typedef struct entity_render_s { - vec3_t origin; // location - vec3_t angles; // orientation - float alpha; // opacity (alpha) of the model - float scale; // size the model is shown - - model_t *model; // NULL = no model - int frame; // current uninterpolated animation frame (for things which do not use interpolation) - int colormap; // entity shirt and pants colors - int effects; // light, particles, etc - int skinnum; // for Alias models - int flags; // render flags + // location + vec3_t origin; + // orientation + vec3_t angles; + // opacity (alpha) of the model + float alpha; + // size the model is shown + float scale; + + // NULL = no model + model_t *model; + // current uninterpolated animation frame (for things which do not use interpolation) + int frame; + // entity shirt and pants colors + int colormap; + // light, particles, etc + int effects; + // for Alias models + int skinnum; + // render flags + int flags; // these are copied from the persistent data - int frame1; // frame that the model is interpolating from - int frame2; // frame that the model is interpolating to - double framelerp; // interpolation factor, usually computed from frame2time - double frame1time; // time frame1 began playing (for framegroup animations) - double frame2time; // time frame2 began playing (for framegroup animations) + + // frame that the model is interpolating from + int frame1; + // frame that the model is interpolating to + int frame2; + // interpolation factor, usually computed from frame2time + double framelerp; + // time frame1 began playing (for framegroup animations) + double frame1time; + // time frame2 began playing (for framegroup animations) + double frame2time; // calculated by the renderer (but not persistent) - int visframe; // if visframe == r_framecount, it is visible - vec3_t mins, maxs; // calculated during R_AddModelEntities - frameblend_t frameblend[4]; // 4 frame numbers (-1 if not used) and their blending scalers (0-1), if interpolation is not desired, use frame instead + + // if visframe == r_framecount, it is visible + int visframe; + // calculated during R_AddModelEntities + vec3_t mins, maxs; + // 4 frame numbers (-1 if not used) and their blending scalers (0-1), if interpolation is not desired, use frame instead + frameblend_t frameblend[4]; + + // caching results of static light traces (this is semi-persistent) + double entlightstime; + vec3_t entlightsorigin; + int numentlights; + unsigned short entlights[MAXENTLIGHTS]; } entity_render_t; typedef struct entity_persistent_s { // particles - vec3_t trail_origin; // trail rendering - float trail_time; // trail rendering + + // trail rendering + vec3_t trail_origin; + float trail_time; + + // effects + + // muzzleflash fading + float muzzleflash; // interpolated animation - int modelindex; // lerp resets when model changes - int frame1; // frame that the model is interpolating from - int frame2; // frame that the model is interpolating to - double framelerp; // interpolation factor, usually computed from frame2time - double frame1time; // time frame1 began playing (for framegroup animations) - double frame2time; // time frame2 began playing (for framegroup animations) + + // lerp resets when model changes + int modelindex; + // frame that the model is interpolating from + int frame1; + // frame that the model is interpolating to + int frame2; + // interpolation factor, usually computed from frame2time + double framelerp; + // time frame1 began playing (for framegroup animations) + double frame1time; + // time frame2 began playing (for framegroup animations) + double frame2time; } entity_persistent_t; typedef struct entity_s { - entity_state_t state_baseline; // baseline state (default values) - entity_state_t state_previous; // previous state (interpolating from this) - entity_state_t state_current; // current state (interpolating to this) - - entity_persistent_t persistent; // used for regenerating parts of render - - entity_render_t render; // the only data the renderer should know about + // baseline state (default values) + entity_state_t state_baseline; + // previous state (interpolating from this) + entity_state_t state_previous; + // current state (interpolating to this) + entity_state_t state_current; + + // used for regenerating parts of render + entity_persistent_t persistent; + + // the only data the renderer should know about + entity_render_t render; } entity_t; @@ -151,7 +202,7 @@ typedef enum cactive_t; // -// the client_static_t structure is persistant through an arbitrary number +// the client_static_t structure is persistent through an arbitrary number // of server connections // typedef struct @@ -198,6 +249,7 @@ typedef struct // throw out the first couple, so the player // doesn't accidentally do something the // first frame + float sendnoptime; // send a clc_nop periodically until connected usercmd_t cmd; // last command sent to the server // information for local display @@ -266,7 +318,6 @@ typedef struct // refresh related state struct model_s *worldmodel; // cl_entitites[0].model -// int num_entities; // held in cl_entities array int num_statics; // held in cl_staticentities array entity_t viewent; // the gun model @@ -276,6 +327,8 @@ typedef struct scoreboard_t *scores; // [cl.maxclients] vec3_t viewentorigin; + float viewzoom; // LordHavoc: sniping zoom, QC controlled + float viewzoomold, viewzoomnew; // for interpolation // entity database stuff vec3_t viewentoriginold, viewentoriginnew; @@ -321,6 +374,11 @@ extern cvar_t m_yaw; extern cvar_t m_forward; extern cvar_t m_side; +extern cvar_t r_draweffects; + +extern cvar_t cl_explosions; +extern cvar_t cl_stainmaps; + // LordHavoc: raised these from 64 and 128 to 512 and 256 #define MAX_TEMP_ENTITIES 512 // lightning bolts, effects, etc @@ -432,20 +490,6 @@ void CL_InitTEnts (void); #define PARTICLE_UPRIGHT_FACING 2 #define PARTICLE_ORIENTED_DOUBLESIDED 3 -typedef struct renderparticle_s -{ - int tex; - int orientation; - int additive; - int dynlight; - float scalex; - float scaley; - float org[3]; - float dir[3]; - float color[4]; -} -renderparticle_t; - void CL_Particles_Clear(void); void CL_Particles_Init(void); @@ -456,6 +500,7 @@ void CL_RocketTrail2 (vec3_t start, vec3_t end, int color, entity_t *ent); void CL_SparkShower (vec3_t org, vec3_t dir, int count); void CL_PlasmaBurn (vec3_t org); void CL_BloodPuff (vec3_t org, vec3_t vel, int count); +void CL_Stardust (vec3_t mins, vec3_t maxs, int count); void CL_FlameCube (vec3_t mins, vec3_t maxs, int count); void CL_Flames (vec3_t org, vec3_t vel, int count); void CL_BloodShower (vec3_t mins, vec3_t maxs, float velspeed, int count); @@ -471,13 +516,6 @@ void CL_MoveParticles(void); void R_MoveExplosions(void); void R_NewExplosion(vec3_t org); -// if contents is not zero, it will impact on content changes -// (leafs matching contents are considered empty, others are solid) -extern int traceline_endcontents; // set by TraceLine -// need to call this sometime before using TraceLine with hitbmodels -void TraceLine_ScanForBModels(void); -float TraceLine (vec3_t start, vec3_t end, vec3_t impact, vec3_t normal, int contents, int hitbmodels); - #include "cl_screen.h" #define MAX_VISEDICTS (MAX_EDICTS + MAX_STATIC_ENTITIES + MAX_TEMP_ENTITIES) @@ -501,10 +539,7 @@ typedef struct int numentities; entity_render_t **entities; - int numparticles; - struct renderparticle_s *particles; - - byte drawqueue[MAX_DRAWQUEUE]; + qbyte drawqueue[MAX_DRAWQUEUE]; int drawqueuesize; } refdef_t; @@ -514,3 +549,6 @@ refdef_t r_refdef; extern mempool_t *cl_refdef_mempool; #include "cgamevm.h" + +#endif +