X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=cl_main.c;h=2f99a303b1507690e8cf4dfcf4899647142072da;hb=1dfb76a50d855048ba125cbea61489d39535e7f4;hp=2f3af19a31a5dd7fa267c6209b06b14d7171eff5;hpb=5d76717a7cea3e31a2c9b27389d1a0753fa872ce;p=xonotic%2Fdarkplaces.git diff --git a/cl_main.c b/cl_main.c index 2f3af19a..2f99a303 100644 --- a/cl_main.c +++ b/cl_main.c @@ -340,6 +340,16 @@ void CL_ExpandCSQCRenderEntities(int num) } } +static void CL_ToggleMenu_Hook(void) +{ +#ifdef CONFIG_MENU + // remove menu + if (key_dest == key_menu || key_dest == key_menu_grabbed) + MR_ToggleMenu(0); +#endif + key_dest = key_game; +} + extern cvar_t rcon_secure; /* @@ -352,7 +362,7 @@ This is also called on Host_Error, so it shouldn't cause any errors */ void CL_Disconnect(void) { - if (cls.state == ca_dedicated || cls.state != ca_connected || !cls.demoplayback) + if (cls.state == ca_dedicated) return; if (Sys_CheckParm("-profilegameonly")) @@ -430,7 +440,7 @@ This command causes the client to wait for the signon messages again. This is sent just before a server changes levels ================== */ -void CL_Reconnect_f(cmd_state_t *cmd) +static void CL_Reconnect_f(cmd_state_t *cmd) { char temp[128]; // if not connected, reconnect to the most recent server @@ -534,8 +544,6 @@ void CL_EstablishConnection(const char *address, int firstarg) if (LHNETADDRESS_FromString(&cls.connect_address, address, 26000) && (cls.connect_mysocket = NetConn_ChooseClientSocketForAddress(&cls.connect_address))) { - // Disconnect from the current server, or stop a running demo. - CL_Disconnect(); cls.connect_trying = true; cls.connect_remainingtries = 3; cls.connect_nextsendtime = 0; @@ -574,6 +582,11 @@ static void CL_EstablishConnection_Local(void) CL_EstablishConnection("local:1", -2); } +static qbool CL_Intermission(void) +{ + return cl.intermission; +} + /* ============== CL_PrintEntities_f @@ -609,7 +622,7 @@ List information on all models in the client modelindex static void CL_ModelIndexList_f(cmd_state_t *cmd) { int i; - dp_model_t *model; + model_t *model; // Print Header Con_Printf("%3s: %-30s %-8s %-8s\n", "ID", "Name", "Type", "Triangles"); @@ -656,7 +669,7 @@ void CL_UpdateRenderEntity(entity_render_t *ent) { vec3_t org; vec_t scale; - dp_model_t *model = ent->model; + model_t *model = ent->model; // update the inverse matrix for the renderer Matrix4x4_Invert_Simple(&ent->inversematrix, &ent->matrix); // update the animation blend state @@ -766,7 +779,7 @@ entity_render_t *CL_NewTempEntity(double shadertime) return render; } -void CL_Effect(vec3_t org, dp_model_t *model, int startframe, int framecount, float framerate) +void CL_Effect(vec3_t org, model_t *model, int startframe, int framecount, float framerate) { int i; cl_effect_t *e; @@ -2463,7 +2476,7 @@ void CL_Locs_Reload_f(cmd_state_t *cmd) } entity_t cl_meshentities[NUM_MESHENTITIES]; -dp_model_t cl_meshentitymodels[NUM_MESHENTITIES]; +model_t cl_meshentitymodels[NUM_MESHENTITIES]; const char *cl_meshentitynames[NUM_MESHENTITIES] = { "MESH_SCENE", @@ -2715,6 +2728,21 @@ void CL_UpdateEntityShading(void) CL_UpdateEntityShading_Entity(r_refdef.scene.entities[i]); } +qbool vid_opened = false; +void CL_StartVideo(void) +{ + if (!vid_opened && cls.state != ca_dedicated) + { + vid_opened = true; +#ifdef WIN32 + // make sure we open sockets before opening video because the Windows Firewall "unblock?" dialog can screw up the graphics context on some graphics drivers + NetConn_UpdateSockets(); +#endif + VID_Start(); + CDAudio_Startup(); + } +} + extern cvar_t host_framerate; extern cvar_t host_speeds; @@ -2726,6 +2754,9 @@ double CL_Frame (double time) static double wait; int pass1, pass2, pass3; + if(!host_isclient.integer) + return 0; + CL_VM_PreventInformationLeaks(); // get new key events @@ -3057,5 +3088,8 @@ void CL_Init (void) CL_Video_Init(); host.hook.ConnectLocal = CL_EstablishConnection_Local; + host.hook.Disconnect = CL_Disconnect; + host.hook.CL_Intermission = CL_Intermission; + host.hook.ToggleMenu = CL_ToggleMenu_Hook; } }