X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=client.h;h=bd4689bc16bb0fbd5fffa64d6004155d23bd7e5c;hb=0be88e0d9213eba81574227fef8bc5bbce7d9732;hp=38402f6de4da02c3530c89da1e03a52c0256929c;hpb=6b6b622f054e260ca0644fa96647892e997d492c;p=xonotic%2Fdarkplaces.git diff --git a/client.h b/client.h index 38402f6d..bd4689bc 100644 --- a/client.h +++ b/client.h @@ -70,20 +70,122 @@ typedef struct } beam_t; -typedef struct +typedef struct rtlight_s +{ + // shadow volumes are done entirely in model space, so there are no matrices for dealing with them... they just use the origin + + // note that the world to light matrices are inversely scaled (divided) by lightradius + + // core properties + // matrix for transforming world coordinates to light filter coordinates + matrix4x4_t matrix_worldtolight; + // based on worldtolight this transforms -1 to +1 to 0 to 1 for purposes + // of attenuation texturing in full 3D (Z result often ignored) + matrix4x4_t matrix_worldtoattenuationxyz; + // this transforms only the Z to S, and T is always 0.5 + matrix4x4_t matrix_worldtoattenuationz; + // typically 1 1 1, can be lower (dim) or higher (overbright) + vec3_t color; + // size of the light (remove?) + vec_t radius; + // light filter + char cubemapname[64]; + // whether light should render shadows + int shadow; + // intensity of corona to render + vec_t corona; + // light style to monitor for brightness + int style; + + // generated properties + // used only for shadow volumes + vec3_t shadoworigin; + // culling + vec3_t cullmins; + vec3_t cullmaxs; + // culling + //vec_t cullradius; + // squared cullradius + //vec_t cullradius2; + + // lightmap renderer stuff (remove someday!) + // the size of the light + vec_t lightmap_cullradius; + // the size of the light, squared + vec_t lightmap_cullradius2; + // the brightness of the light + vec3_t lightmap_light; + // to avoid sudden brightness change at cullradius, subtract this + vec_t lightmap_subtract; + + // static light info + // true if this light should be compiled as a static light + int isstatic; + // true if this is a compiled world light, cleared if the light changes + int compiled; + // premade shadow volumes and lit surfaces to render for world entity + shadowmesh_t *static_meshchain_shadow; + shadowmesh_t *static_meshchain_light; + // used for visibility testing (more exact than bbox) + int static_numclusters; + int static_numclusterpvsbytes; + int *static_clusterlist; + qbyte *static_clusterpvs; +} +rtlight_t; + +typedef struct dlight_s { + // destroy light after this time + // (dlight only) + vec_t die; + // the entity that owns this light (can be NULL) + // (dlight only) + struct entity_render_s *ent; // location - vec3_t origin; - // stop lighting after this time - float die; + // (worldlight: saved to .rtlights file) + vec3_t origin; + // worldlight orientation + // (worldlight only) + // (worldlight: saved to .rtlights file) + vec3_t angles; + // dlight orientation/scaling/location + // (dlight only) + matrix4x4_t matrix; // color of light - vec3_t color; + // (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 + // (worldlight only) + int selected; // brightness (not really radius anymore) - float radius; - // drop this each second - float decay; - // the entity that owns this light (can be NULL) - struct entity_render_s *ent; + // (worldlight: saved to .rtlights file) + vec_t radius; + // drop radius this much each second + // (dlight only) + vec_t decay; + // light style which controls intensity of this light + // (worldlight: saved to .rtlights file) + int style; + // cast shadows + // (worldlight: saved to .rtlights file) + int shadow; + // corona intensity + // (worldlight: saved to .rtlights file) + vec_t corona; + // linked list of world lights + // (worldlight only) + struct dlight_s *next; + // embedded rtlight struct for renderer + // (renderer only) + rtlight_t rtlight; } dlight_t; @@ -94,8 +196,8 @@ typedef struct frameblend_s } frameblend_t; -// 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. +// LordHavoc: this struct is intended for the renderer but some fields are +// used by the client. typedef struct entity_render_s { // location @@ -124,14 +226,14 @@ typedef struct entity_render_s // render flags int flags; - // these are copied from the persistent data + // interpolated animation // 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; + float framelerp; // time frame1 began playing (for framegroup animations) double frame1time; // time frame2 began playing (for framegroup animations) @@ -157,13 +259,12 @@ entity_render_t; typedef struct entity_persistent_s { - // particles + int linkframe; - // trail rendering vec3_t trail_origin; - float trail_time; - // effects + // particle trail + float trail_time; // muzzleflash fading float muzzleflash; @@ -179,21 +280,6 @@ typedef struct entity_persistent_s float oldangles[3]; float neworigin[3]; float newangles[3]; - - // interpolated animation - - // 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; @@ -233,7 +319,6 @@ typedef struct typedef struct { char name[MAX_SCOREBOARDNAME]; - float entertime; int frags; int colors; // two 4 bit fields } scoreboard_t; @@ -248,7 +333,8 @@ typedef struct #define CSHIFT_DAMAGE 1 #define CSHIFT_BONUS 2 #define CSHIFT_POWERUP 3 -#define NUM_CSHIFTS 4 +#define CSHIFT_VCSHIFT 4 +#define NUM_CSHIFTS 5 #define NAME_LENGTH 64 @@ -283,6 +369,8 @@ typedef struct int demonum; // list of demos in loop char demos[MAX_DEMOS][MAX_DEMONAME]; + // the actively playing demo (set by CL_PlayDemo_f) + char demoname[64]; // demo recording info must be here, because record is started before // entering a map (and clearing client_state_t) @@ -298,15 +386,24 @@ typedef struct 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; // LordHavoc: pausedemo qboolean demopaused; + qboolean connect_trying; + int connect_remainingtries; + double connect_nextsendtime; + lhnetsocket_t *connect_mysocket; + lhnetaddress_t connect_address; // connection information // 0 to SIGNONS int signon; - // network socket - struct qsocket_s *netcon; + // network connection + netconn_t *netcon; // writing buffer to send to server sizebuf_t message; } @@ -320,6 +417,9 @@ extern client_static_t cls; // typedef struct { + // 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; @@ -337,6 +437,8 @@ typedef struct int items; // cl.time of acquiring item, for blinking float item_gettime[32]; + // cl.time of changing STAT_ACTIVEWEAPON + float weapontime; // use pain anim frame if cl.time < this float faceanimtime; @@ -434,8 +536,12 @@ typedef struct // for interpolation float viewzoomold, viewzoomnew; + // protocol version of the server we're connected to + int protocol; + // entity database stuff entity_database_t entitydatabase; + entity_database4_t *entitydatabase4; } client_state_t; @@ -446,6 +552,7 @@ extern mempool_t *cl_scores_mempool; // extern cvar_t cl_name; extern cvar_t cl_color; +extern cvar_t cl_rate; extern cvar_t cl_pmodel; extern cvar_t cl_upspeed; @@ -501,7 +608,7 @@ extern lightstyle_t *cl_lightstyle; extern client_state_t cl; -extern void CL_AllocDlight (entity_render_t *ent, vec3_t org, float radius, float red, float green, float blue, float decay, float lifetime); +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); extern void CL_DecayLights (void); //============================================================================= @@ -512,13 +619,17 @@ extern void CL_DecayLights (void); void CL_Init (void); -void CL_EstablishConnection (char *host); +void CL_EstablishConnection(const char *host); void CL_Disconnect (void); void CL_Disconnect_f (void); void CL_BoundingBoxForEntity(entity_render_t *ent); +extern cvar_t cl_beams_polygons; +extern cvar_t cl_beams_relative; +extern cvar_t cl_beams_lightatend; + // // cl_input // @@ -534,7 +645,7 @@ extern kbutton_t in_strafe; extern kbutton_t in_speed; void CL_InitInput (void); -void CL_SendCmd (void); +void CL_SendCmd (usercmd_t *cmd); void CL_SendMove (usercmd_t *cmd); void CL_LerpUpdate(entity_t *e); @@ -555,19 +666,20 @@ void CL_BaseMove (usercmd_t *cmd); float CL_KeyState (kbutton_t *key); -char *Key_KeynumToString (int keynum); +const char *Key_KeynumToString (int keynum); // // cl_demo.c // -void CL_StopPlayback (void); -int CL_GetMessage (void); +void CL_StopPlayback(void); +void CL_ReadDemoMessage(void); +void CL_WriteDemoMessage(void); -void CL_NextDemo (void); -void CL_Stop_f (void); -void CL_Record_f (void); -void CL_PlayDemo_f (void); -void CL_TimeDemo_f (void); +void CL_NextDemo(void); +void CL_Stop_f(void); +void CL_Record_f(void); +void CL_PlayDemo_f(void); +void CL_TimeDemo_f(void); // // cl_parse.c @@ -634,9 +746,8 @@ typedef struct int x, y, width, height; float fov_x, fov_y; - // view point - vec3_t vieworg; - vec3_t viewangles; + // view transform + matrix4x4_t viewentitymatrix; // fullscreen color blend float viewblend[4]; @@ -657,7 +768,5 @@ extern mempool_t *cl_refdef_mempool; #include "cgamevm.h" -void Host_PerformSpawnServerAndLoadGame(void); - #endif