static void set_active_state(void) { cls.state = ca_active; cl.serverdelta = Q_align(cl.frame.number, CL_FRAMEDIV); cl.time = cl.servertime = 0; // set time, needed for demos #if USE_FPS cl.keytime = cl.keyservertime = 0; cl.keyframe = cl.frame; // initialize keyframe to make sure it's valid #endif // initialize oldframe so lerping doesn't hurt anything cl.oldframe.valid = false; cl.oldframe.ps = cl.frame.ps; #if USE_FPS cl.oldkeyframe.valid = false; cl.oldkeyframe.ps = cl.keyframe.ps; #endif cl.frameflags = 0; if (cls.netchan) { cl.initialSeq = cls.netchan->outgoing_sequence; } if (cls.demo.playback) { // init some demo things CL_FirstDemoFrame(); } else { // set initial cl.predicted_origin and cl.predicted_angles VectorScale(cl.frame.ps.pmove.origin, 0.125f, cl.predicted_origin); VectorScale(cl.frame.ps.pmove.velocity, 0.125f, cl.predicted_velocity); if (cl.frame.ps.pmove.pm_type < PM_DEAD && cls.serverProtocol > PROTOCOL_VERSION_DEFAULT) { // enhanced servers don't send viewangles CL_PredictAngles(); } else { // just use what server provided VectorCopy(cl.frame.ps.viewangles, cl.predicted_angles); } } SCR_EndLoadingPlaque(); // get rid of loading plaque SCR_LagClear(); Con_Close(false); // get rid of connection screen CL_CheckForPause(); CL_UpdateFrameTimes(); if (!cls.demo.playback) { EXEC_TRIGGER(cl_beginmapcmd); Cmd_ExecTrigger("#cl_enterlevel"); } }
/* =================== Key_SetDest =================== */ void Key_SetDest(keydest_t dest) { int diff; // if not connected, console or menu should be up if (cls.state < ca_active && !(dest & (KEY_MENU | KEY_CONSOLE))) { dest |= KEY_CONSOLE; } diff = cls.key_dest ^ dest; cls.key_dest = dest; // activate or deactivate mouse if (diff & (KEY_CONSOLE | KEY_MENU)) { IN_Activate(); CL_CheckForPause(); } }