]> 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 06031c9409588bac7596d25c7d526e71c270f876..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
@@ -576,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];
@@ -585,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!)
@@ -735,6 +738,7 @@ typedef enum qw_downloadtype_e
 }
 qw_downloadtype_t;
 
+#ifdef CONFIG_VIDEO_CAPTURE
 typedef enum capturevideoformat_e
 {
        CAPTUREVIDEOFORMAT_AVI_I420,
@@ -786,6 +790,7 @@ typedef struct capturevideostate_s
        void *formatspecific;
 }
 capturevideostate_t;
+#endif
 
 #define CL_MAX_DOWNLOADACKS 4
 
@@ -915,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;
@@ -1151,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
@@ -1240,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
 
@@ -1516,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);
@@ -1527,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);
 
@@ -1568,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);
@@ -1586,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
 //
@@ -1602,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
 //
@@ -2010,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);
@@ -2043,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