]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - client.h
client: Implement CL_Frame. Move client cvars out of host to cl_main
[xonotic/darkplaces.git] / client.h
index 7bd78e027ffb92598b057727fece17724f301622..159d3233a39be822aa6ab3a6414bcff4995ad07e 100644 (file)
--- a/client.h
+++ b/client.h
@@ -234,7 +234,7 @@ typedef struct effect_s
        vec3_t origin;
        double starttime;
        float framerate;
-       int modelindex;
+       dp_model_t *model;
        int startframe;
        int endframe;
        // these are for interpolation
@@ -343,8 +343,6 @@ typedef struct rtlight_s
        int isstatic;
        /// true if this is a compiled world light, cleared if the light changes
        int compiled;
-       /// the shadowing mode used to compile this light
-       int shadowmode;
        /// the size that this light should have (assuming no scene LOD kicking in to reduce it)
        int shadowmapsidesize;
        /// position of this light in the shadowmap atlas
@@ -578,7 +576,8 @@ typedef struct entity_render_s
        // MATERIALFLAG_MODELLIGHT uses these parameters
        float render_modellight_ambient[3];
        float render_modellight_diffuse[3];
-       float render_modellight_lightdir[3];
+       float render_modellight_lightdir_world[3];
+       float render_modellight_lightdir_local[3];
        float render_modellight_specular[3];
        // lightmap rendering (not MATERIALFLAG_MODELLIGHT)
        float render_lightmap_ambient[3];
@@ -587,10 +586,12 @@ typedef struct entity_render_s
        // rtlights use these colors for the materials on this entity
        float render_rtlight_diffuse[3];
        float render_rtlight_specular[3];
-       // ignore lightmap and use lightgrid on this entity (e.g. FULLBRIGHT)
+       // ignore lightmap and use fixed lighting settings on this entity (e.g. FULLBRIGHT)
        qboolean render_modellight_forced;
        // do not process per pixel lights on this entity at all (like MATERIALFLAG_NORTLIGHT)
        qboolean render_rtlight_disabled;
+       // use the 3D lightmap from q3bsp on this entity
+       qboolean render_lightgrid;
 
        // storage of decals on this entity
        // (note: if allowdecals is set, be sure to call R_DecalSystem_Reset on removal!)
@@ -737,6 +738,7 @@ typedef enum qw_downloadtype_e
 }
 qw_downloadtype_t;
 
+#ifdef CONFIG_VIDEO_CAPTURE
 typedef enum capturevideoformat_e
 {
        CAPTUREVIDEOFORMAT_AVI_I420,
@@ -788,6 +790,7 @@ typedef struct capturevideostate_s
        void *formatspecific;
 }
 capturevideostate_t;
+#endif
 
 #define CL_MAX_DOWNLOADACKS 4
 
@@ -917,8 +920,10 @@ typedef struct client_static_s
        // extra user info for the "connect" command
        char connect_userinfo[MAX_USERINFO_STRING];
 
+#ifdef CONFIG_VIDEO_CAPTURE
        // video capture stuff
        capturevideostate_t capturevideo;
+#endif
 
        // crypto channel
        crypto_t crypto;
@@ -986,29 +991,6 @@ typedef enum ptype_e
 }
 ptype_t;
 
-typedef struct decal_s
-{
-       // fields used by rendering:  (44 bytes)
-       unsigned short  typeindex;
-       unsigned short  texnum;
-       unsigned int    decalsequence;
-       vec3_t                  org;
-       vec3_t                  normal;
-       float                   size;
-       float                   alpha; // 0-255
-       unsigned char   color[3];
-       unsigned char   unused1;
-       int                             clusterindex; // cheap culling by pvs
-
-       // fields not used by rendering: (36 bytes in 32bit, 40 bytes in 64bit)
-       float                   time2; // used for decal fade
-       unsigned int    owner; // decal stuck to this entity
-       dp_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;
-
 typedef struct particle_s
 {
        // for faster batch rendering, particles are rendered in groups by effect (resulting in less perfect sorting but far less state changes)
@@ -1176,7 +1158,6 @@ typedef struct client_state_s
        float sensitivityscale;
        csqc_vidvars_t csqc_vidvars;    //[515]: these parms must be set to true by default
        qboolean csqc_wantsmousemove;
-       qboolean csqc_paused; // vortex: int because could be flags
        struct model_s *csqc_model_precache[MAX_MODELS];
 
        // local amount for smoothing stepups
@@ -1265,7 +1246,7 @@ typedef struct client_state_s
        sfx_t *sfx_ric3;
        sfx_t *sfx_r_exp3;
        // indicates that the file "sound/misc/talk2.wav" was found (for use by team chat messages)
-       qboolean foundtalk2wav;
+       qboolean foundteamchatsound;
 
 // refresh related state
 
@@ -1325,7 +1306,6 @@ typedef struct client_state_s
        int max_lightstyle;
        int max_brushmodel_entities;
        int max_particles;
-       int max_decals;
        int max_showlmps;
 
        entity_t *entities;
@@ -1338,7 +1318,6 @@ typedef struct client_state_s
        lightstyle_t *lightstyle;
        int *brushmodel_entities;
        particle_t *particles;
-       decal_t *decals;
        showlmp_t *showlmps;
 
        int num_entities;
@@ -1543,7 +1522,7 @@ extern cvar_t cl_locs_enable;
 
 extern client_state_t cl;
 
-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);
+extern void CL_AllocLightFlash (entity_render_t *ent, matrix4x4_t *matrix, float radius, float red, float green, float blue, float decay, float lifetime, char *cubemapname, int style, int shadowenable, vec_t corona, vec_t coronasizescale, vec_t ambientscale, vec_t diffusescale, vec_t specularscale, int flags);
 
 cl_locnode_t *CL_Locs_FindNearest(const vec3_t point);
 void CL_Locs_FindLocationName(char *buffer, size_t buffersize, vec3_t point);
@@ -1554,6 +1533,8 @@ void CL_Locs_FindLocationName(char *buffer, size_t buffersize, vec3_t point);
 // cl_main
 //
 
+double CL_Frame(double time);
+
 void CL_Shutdown (void);
 void CL_Init (void);
 
@@ -1595,7 +1576,7 @@ void CL_ClientMovement_Replay(void);
 void CL_ClearTempEntities (void);
 entity_render_t *CL_NewTempEntity (double shadertime);
 
-void CL_Effect(vec3_t org, int modelindex, int startframe, int framecount, float framerate);
+void CL_Effect(vec3_t org, dp_model_t *model, int startframe, int framecount, float framerate);
 
 void CL_ClearState (void);
 void CL_ExpandEntities(int num);
@@ -1613,6 +1594,20 @@ float CL_KeyState (kbutton_t *key);
 const char *Key_KeynumToString (int keynum, char *buf, size_t buflength);
 int Key_StringToKeynum (const char *str);
 
+//
+// cl_cmd.c
+//
+/// adds the string as a clc_stringcmd to the client message.
+/// (used when there is no reason to generate a local command to do it)
+void CL_ForwardToServer (const char *s);
+
+/// adds the current command line as a clc_stringcmd to the client message.
+/// things like godmode, noclip, etc, are commands directed to the server,
+/// so when they are typed in at the console, they will need to be forwarded.
+void CL_ForwardToServer_f (cmd_state_t *cmd);
+void CL_InitCommands(void);
+
+
 //
 // cl_demo.c
 //
@@ -1629,6 +1624,8 @@ void CL_Record_f(cmd_state_t *cmd);
 void CL_PlayDemo_f(cmd_state_t *cmd);
 void CL_TimeDemo_f(cmd_state_t *cmd);
 
+void CL_Demo_Init(void);
+
 //
 // cl_parse.c
 //
@@ -2037,21 +2034,18 @@ void CL_ClientMovement_PlayerMove_Frame(cl_clientmovement_state_t *s);
 void CL_RotateMoves(const matrix4x4_t *m);
 
 typedef enum meshname_e {
-       MESH_DEBUG,
-       MESH_CSQCPOLYGONS,
-       MESH_PARTICLES,
+       MESH_SCENE, // CSQC R_PolygonBegin, potentially also engine particles and debug stuff
        MESH_UI,
        NUM_MESHENTITIES,
 } meshname_t;
 extern entity_t cl_meshentities[NUM_MESHENTITIES];
 extern dp_model_t cl_meshentitymodels[NUM_MESHENTITIES];
 extern const char *cl_meshentitynames[NUM_MESHENTITIES];
-#define CL_Mesh_Debug() (&cl_meshentitymodels[MESH_DEBUG])
-#define CL_Mesh_CSQC() (&cl_meshentitymodels[MESH_CSQCPOLYGONS])
-#define CL_Mesh_Particles() (&cl_meshentitymodels[MESH_PARTICLES])
+#define CL_Mesh_Scene() (&cl_meshentitymodels[MESH_SCENE])
 #define CL_Mesh_UI() (&cl_meshentitymodels[MESH_UI])
-void CL_MeshEntities_AddToScene(void);
-void CL_MeshEntities_Reset(void);
+void CL_MeshEntities_Scene_Clear(void);
+void CL_MeshEntities_Scene_AddRenderEntity(void);
+void CL_MeshEntities_Scene_FinalizeRenderEntity(void);
 void CL_UpdateEntityShading(void);
 
 void CL_NewFrameReceived(int num);
@@ -2070,6 +2064,9 @@ void V_FadeViewFlashs(void);
 void V_CalcViewBlend(void);
 void V_CalcRefdefUsing (const matrix4x4_t *entrendermatrix, const vec3_t clviewangles, qboolean teleported, qboolean clonground, qboolean clcmdjump, float clstatsviewheight, qboolean cldead, qboolean clintermission, const vec3_t clvelocity);
 void V_CalcRefdef(void);
+void V_MakeViewIsometric(void);
+void V_MakeViewIsometric(void);
+void V_StartPitchDrift(void);
 void CL_Locs_Reload_f(cmd_state_t *cmd);
 
 #endif