void UI_ForceMenuOff(void) { uis.menusp = 0; uis.activemenu = NULL; trap_Key_SetCatcher(trap_Key_GetCatcher() & ~KEYCATCH_UI); trap_Key_ClearStates(); trap_Cvar_Set("cl_paused", "0"); }
void CG_MouseEvent(int x, int y) { switch ((int)cgs.eventHandling) { case CGAME_EVENT_SPEAKEREDITOR: case CGAME_EVENT_GAMEVIEW: case CGAME_EVENT_CAMPAIGNBREIFING: case CGAME_EVENT_FIRETEAMMSG: cgs.cursorX += x; if (cgs.cursorX < 0) { cgs.cursorX = 0; } else if (cgs.cursorX > 640) { cgs.cursorX = 640; } cgs.cursorY += y; if (cgs.cursorY < 0) { cgs.cursorY = 0; } else if (cgs.cursorY > 480) { cgs.cursorY = 480; } if ((int)cgs.eventHandling == CGAME_EVENT_SPEAKEREDITOR) { CG_SpeakerEditorMouseMove_Handling(x, y); } break; case CGAME_EVENT_DEMO: cgs.cursorX += x; if (cgs.cursorX < 0) { cgs.cursorX = 0; } else if (cgs.cursorX > 640) { cgs.cursorX = 640; } cgs.cursorY += y; if (cgs.cursorY < 0) { cgs.cursorY = 0; } else if (cgs.cursorY > 480) { cgs.cursorY = 480; } if (x != 0 || y != 0) { cgs.cursorUpdate = cg.time + 5000; } break; default: // default handling if ((cg.predictedPlayerState.pm_type == PM_NORMAL || cg.predictedPlayerState.pm_type == PM_SPECTATOR) && cg.showScores == qfalse) { trap_Key_SetCatcher(trap_Key_GetCatcher() & ~KEYCATCH_CGAME); return; } break; } }
/* ================ Con_ToggleConsole_f ================ */ void Con_ToggleConsole_f (void) { uiClientState_t cls; trap_GetClientState( &cls ); // Can't toggle the console when it's the only thing available if ( cls.connState == CA_DISCONNECTED && trap_Key_GetCatcher( ) == KEYCATCH_CONSOLE ) { return; } if ( con_autoclear.integer ) { MField_Clear( &g_consoleField ); } g_consoleField.widthInChars = g_console_field_width; trap_Key_SetCatcher( trap_Key_GetCatcher( ) ^ KEYCATCH_CONSOLE ); }
static void UI_CloseMenus_f( void ) { if( Menu_Count( ) > 0 ) { trap_Key_SetCatcher( trap_Key_GetCatcher( ) & ~KEYCATCH_UI ); trap_Key_ClearStates( ); trap_Cvar_Set( "cl_paused", "0" ); Menus_CloseAll( ); } }
void CG_OnPlayerUpgradeChange() { playerState_t *ps = &cg.snap->ps; // Rebuild weapon lists if UI is in focus. if ( trap_Key_GetCatcher() == KEYCATCH_UI && ps->persistant[ PERS_TEAM ] == TEAM_HUMANS ) { CG_Rocket_BuildArmourySellList( "default" ); CG_Rocket_BuildArmouryBuyList( "default" ); } }
/* ================== Con_DrawConsole ================== */ void Con_DrawConsole( connstate_t state ) { // if disconnected, render console full screen if ( state == CA_DISCONNECTED ) { if ( !( trap_Key_GetCatcher( ) & KEYCATCH_UI) ) { Con_DrawSolidConsole( state, 1.0f ); return; } } if ( con.displayFrac ) { Con_DrawSolidConsole( state, con.displayFrac ); } }
/* ================ Con_DrawInput Draw the editline after a ] prompt ================ */ void Con_DrawInput ( connstate_t state, int lines ) { int y; if ( state != CA_DISCONNECTED && !(trap_Key_GetCatcher( ) & KEYCATCH_CONSOLE ) ) { return; } y = lines - ( SMALLCHAR_HEIGHT * 2 ); CG_DrawSmallStringColor( con.sideMargin, y, "]", g_color_table[ColorIndex(COLOR_WHITE)] ); MField_Draw( &g_consoleField, 2 * SMALLCHAR_WIDTH, y, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, g_color_table[ColorIndex(COLOR_WHITE)] ); }
/* ========================= CG_OnPlayerWeaponChange Called on weapon change ========================= */ void CG_OnPlayerWeaponChange( weapon_t oldWeapon ) { playerState_t *ps = &cg.snap->ps; // Change the HUD to match the weapon. Close the old hud first trap_Rocket_ShowHud( ps->weapon ); // Rebuild weapon lists if UI is in focus. if ( trap_Key_GetCatcher() == KEYCATCH_UI && ps->persistant[ PERS_TEAM ] == TEAM_HUMANS ) { CG_Rocket_BuildArmourySellList( "default" ); CG_Rocket_BuildArmouryBuyList( "default" ); } cg.weaponOffsetsFilter.Reset( ); cg.predictedPlayerEntity.pe.weapon.animationNumber = -1; //force weapon lerpframe recalculation }
/* ================== CG_RunConsole Scroll it up or down and draw it ================== */ void CG_RunConsole( connstate_t state ) { // decide on the destination height of the console if ( trap_Key_GetCatcher( ) & KEYCATCH_CONSOLE ) con.finalFrac = 0.5; // half screen else con.finalFrac = 0; // none visible // scroll towards the destination height if (con.finalFrac < con.displayFrac) { con.displayFrac -= con_conspeed.value*cg.realFrameTime*0.001; if (con.finalFrac > con.displayFrac) con.displayFrac = con.finalFrac; } else if (con.finalFrac > con.displayFrac) { con.displayFrac += con_conspeed.value*cg.realFrameTime*0.001; if (con.finalFrac < con.displayFrac) con.displayFrac = con.finalFrac; } Con_DrawConsole( state ); }
/* ================== CG_EventHandling ================== */ void CG_EventHandling( int type, qboolean fForced ) { // CG_Printf("EventHandling: %d\n", type); if( cg.demoPlayback && type == CGAME_EVENT_NONE && !fForced ) { type = CGAME_EVENT_DEMO; } if( type != CGAME_EVENT_NONE ) { trap_Cvar_Set( "cl_bypassMouseInput", 0 ); } switch( type ) { // OSP - Demo support case CGAME_EVENT_DEMO: cgs.fResize = qfalse; cgs.fSelect = qfalse; cgs.cursorUpdate = cg.time + 10000; cgs.timescaleUpdate = cg.time + 4000; CG_ScoresUp_f(); break; case CGAME_EVENT_SPEAKEREDITOR: case CGAME_EVENT_GAMEVIEW: case CGAME_EVENT_NONE: case CGAME_EVENT_CAMPAIGNBREIFING: case CGAME_EVENT_FIRETEAMMSG: case CGAME_EVENT_MULTIVIEW: default: // default handling (cleanup mostly) if( cgs.eventHandling == CGAME_EVENT_HUDEDITOR) { // forty - visual hud editor cg.hudEditor.showHudEditor = qfalse; } else if(cgs.eventHandling == CGAME_EVENT_MULTIVIEW) { if( type == -CGAME_EVENT_MULTIVIEW) { type = CGAME_EVENT_NONE; } else { trap_Key_SetCatcher( KEYCATCH_CGAME ); return; } } else if( cgs.eventHandling == CGAME_EVENT_GAMEVIEW ) { cg.showGameView = qfalse; trap_S_FadeBackgroundTrack( 0.0f, 500, 0 ); trap_S_StopStreamingSound( -1 ); cg.limboEndCinematicTime = 0; if( fForced ) { if( cgs.limboLoadoutModified ) { trap_SendClientCommand( "rs" ); cgs.limboLoadoutSelected = qfalse; } } } else if( cgs.eventHandling == CGAME_EVENT_SPEAKEREDITOR ) { if( type == -CGAME_EVENT_SPEAKEREDITOR ) { type = CGAME_EVENT_NONE; } else { trap_Key_SetCatcher( KEYCATCH_CGAME ); return; } } else if( cgs.eventHandling == CGAME_EVENT_CAMPAIGNBREIFING ) { type = CGAME_EVENT_GAMEVIEW; } else if( cgs.eventHandling == CGAME_EVENT_FIRETEAMMSG ) { cg.showFireteamMenu = qfalse; trap_Cvar_Set( "cl_bypassmouseinput", "0" ); } else if( cg.snap && cg.snap->ps.pm_type == PM_INTERMISSION && fForced ) { trap_UI_Popup( UIMENU_INGAME ); } break; } cgs.eventHandling = type; if(type == CGAME_EVENT_NONE) { trap_Key_SetCatcher(trap_Key_GetCatcher() & ~KEYCATCH_CGAME); ccInitial = qfalse; if(cg.demoPlayback && cg.demohelpWindow != SHOW_OFF) { CG_ShowHelp_Off(&cg.demohelpWindow); } } else if( type == CGAME_EVENT_HUDEDITOR ) { // forty - visual hud editor cg.hudEditor.showHudEditor = qtrue; trap_Key_SetCatcher(KEYCATCH_CGAME); } else if( type == CGAME_EVENT_MULTIVIEW ) { trap_Key_SetCatcher(KEYCATCH_CGAME); } else if( type == CGAME_EVENT_GAMEVIEW ) { cg.showGameView = qtrue; CG_LimboPanel_Setup(); trap_Key_SetCatcher(KEYCATCH_CGAME); } else if( type == CGAME_EVENT_FIRETEAMMSG ) { cgs.ftMenuPos = -1; cgs.ftMenuMode = 0; cg.showFireteamMenu = qtrue; trap_Cvar_Set( "cl_bypassmouseinput", "1" ); trap_Key_SetCatcher(KEYCATCH_CGAME); } else { trap_Key_SetCatcher(KEYCATCH_CGAME); } }
void CG_CloseConsole( void ) { MField_Clear( &g_consoleField ); trap_Key_SetCatcher( trap_Key_GetCatcher( ) & ~KEYCATCH_CONSOLE ); con.finalFrac = 0; // none visible con.displayFrac = 0; }
/* ================= CG_ServerCommand The string has been tokenized and can be retrieved with Cmd_Argc() / Cmd_Argv() ================= */ static void CG_ServerCommand( void ) { const char *cmd; char text[MAX_SAY_TEXT]; cmd = CG_Argv(0); if ( !cmd[0] ) { // server claimed the command return; } if ( !strcmp( cmd, "spd" ) ) { const char *ID; int holdInt,count,i; char string[1204]; count = trap_Argc(); ID = CG_Argv(1); holdInt = atoi(ID); memset( &string, 0, sizeof( string ) ); Com_sprintf( string,sizeof(string)," \"%s\"", (const char *) CG_Argv(2)); for (i=3;i<count;i++) { Com_sprintf( string,sizeof(string)," %s \"%s\"", string, (const char *) CG_Argv(i)); } trap_SP_Print(holdInt, (byte *)string); return; } if ( !strcmp( cmd, "nfr" ) ) { //"nfr" == "new force rank" (want a short string) int doMenu = 0; int setTeam = 0; int newRank = 0; if (trap_Argc() < 3) { #ifdef _DEBUG Com_Printf("WARNING: Invalid newForceRank string\n"); #endif return; } newRank = atoi(CG_Argv(1)); doMenu = atoi(CG_Argv(2)); setTeam = atoi(CG_Argv(3)); trap_Cvar_Set("ui_rankChange", va("%i", newRank)); trap_Cvar_Set("ui_myteam", va("%i", setTeam)); if (!( trap_Key_GetCatcher() & KEYCATCH_UI ) && doMenu) { trap_OpenUIMenu(3); } return; } if ( !strcmp( cmd, "kg2" ) ) { //Kill a ghoul2 instance in this slot. //If it has been occupied since this message was sent somehow, the worst that can (should) happen //is the instance will have to reinit with its current info. int indexNum = 0; int argNum = trap_Argc(); int i = 1; if (argNum < 1) { return; } while (i < argNum) { indexNum = atoi(CG_Argv(i)); if (cg_entities[indexNum].ghoul2 && trap_G2_HaveWeGhoul2Models(cg_entities[indexNum].ghoul2)) { if (indexNum < MAX_CLIENTS) { //You try to do very bad thing! #ifdef _DEBUG Com_Printf("WARNING: Tried to kill a client ghoul2 instance with a kg2 command!\n"); #endif return; } trap_G2API_CleanGhoul2Models(&(cg_entities[indexNum].ghoul2)); } i++; } return; } if ( !strcmp( cmd, "cp" ) ) { char strEd[MAX_STRIPED_SV_STRING]; CG_CheckSVStripEdRef(strEd, CG_Argv(1)); CG_CenterPrint( strEd, SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH ); return; } if ( !strcmp( cmd, "cs" ) ) { CG_ConfigStringModified(); return; } if ( !strcmp( cmd, "print" ) ) { char strEd[MAX_STRIPED_SV_STRING]; CG_CheckSVStripEdRef(strEd, CG_Argv(1)); CG_Printf( "%s", strEd ); return; } if ( !strcmp( cmd, "chat" ) ) { if ( !cg_teamChatsOnly.integer ) { trap_S_StartLocalSound( cgs.media.talkSound, CHAN_LOCAL_SOUND ); Q_strncpyz( text, CG_Argv(1), MAX_SAY_TEXT ); CG_RemoveChatEscapeChar( text ); CG_Printf( "%s\n", text ); } return; } if ( !strcmp( cmd, "tchat" ) ) { trap_S_StartLocalSound( cgs.media.talkSound, CHAN_LOCAL_SOUND ); Q_strncpyz( text, CG_Argv(1), MAX_SAY_TEXT ); CG_RemoveChatEscapeChar( text ); CG_AddToTeamChat( text ); CG_Printf( "%s\n", text ); return; } if ( !strcmp( cmd, "vchat" ) ) { CG_VoiceChat( SAY_ALL ); return; } if ( !strcmp( cmd, "vtchat" ) ) { CG_VoiceChat( SAY_TEAM ); return; } if ( !strcmp( cmd, "vtell" ) ) { CG_VoiceChat( SAY_TELL ); return; } if ( !strcmp( cmd, "scores" ) ) { CG_ParseScores(); return; } if ( !strcmp( cmd, "tinfo" ) ) { CG_ParseTeamInfo(); return; } if ( !strcmp( cmd, "map_restart" ) ) { CG_MapRestart(); return; } if ( Q_stricmp (cmd, "remapShader") == 0 ) { if (trap_Argc() == 4) { trap_R_RemapShader(CG_Argv(1), CG_Argv(2), CG_Argv(3)); } } // loaddeferred can be both a servercmd and a consolecmd if ( !strcmp( cmd, "loaddefered" ) ) { // FIXME: spelled wrong, but not changing for demo CG_LoadDeferredPlayers(); return; } // clientLevelShot is sent before taking a special screenshot for // the menu system during development if ( !strcmp( cmd, "clientLevelShot" ) ) { cg.levelShot = qtrue; return; } CG_Printf( "Unknown client game command: %s\n", cmd ); }
static void CG_ServerCommand( void ) { const char *cmd; char text[MAX_SAY_TEXT]; qboolean IRCG = qfalse; cmd = CG_Argv(0); if ( !cmd[0] ) { // server claimed the command return; } #if 0 // never seems to get used -Ste if ( !strcmp( cmd, "spd" ) ) { const char *ID; int holdInt,count,i; char string[1204]; count = trap_Argc(); ID = CG_Argv(1); holdInt = atoi(ID); memset( &string, 0, sizeof( string ) ); Com_sprintf( string,sizeof(string)," \"%s\"", (const char *) CG_Argv(2)); for (i=3;i<count;i++) { Com_sprintf( string,sizeof(string)," %s \"%s\"", string, (const char *) CG_Argv(i)); } trap_SP_Print(holdInt, (byte *)string); return; } #endif if (!strcmp(cmd, "sxd")) { //siege extended data, contains extra info certain classes may want to know about other clients CG_ParseSiegeExtendedData(); return; } if (!strcmp(cmd, "sb")) { //siege briefing display CG_SiegeBriefingDisplay(atoi(CG_Argv(1)), 0); return; } if ( !strcmp( cmd, "scl" ) ) { //if (!( trap_Key_GetCatcher() & KEYCATCH_UI )) //Well, I want it to come up even if the briefing display is up. { trap_OpenUIMenu(UIMENU_CLASSSEL); //UIMENU_CLASSSEL } return; } if ( !strcmp( cmd, "spc" ) ) { trap_Cvar_Set("ui_myteam", "3"); trap_OpenUIMenu(UIMENU_PLAYERCONFIG); //UIMENU_CLASSSEL return; } if ( !strcmp( cmd, "nfr" ) ) { //"nfr" == "new force rank" (want a short string) int doMenu = 0; int setTeam = 0; int newRank = 0; if (trap_Argc() < 3) { #ifdef _DEBUG Com_Printf("WARNING: Invalid newForceRank string\n"); #endif return; } newRank = atoi(CG_Argv(1)); doMenu = atoi(CG_Argv(2)); setTeam = atoi(CG_Argv(3)); trap_Cvar_Set("ui_rankChange", va("%i", newRank)); trap_Cvar_Set("ui_myteam", va("%i", setTeam)); if (!( trap_Key_GetCatcher() & KEYCATCH_UI ) && doMenu) { trap_OpenUIMenu(UIMENU_PLAYERCONFIG); } return; } if ( !strcmp( cmd, "kg2" ) ) { //Kill a ghoul2 instance in this slot. //If it has been occupied since this message was sent somehow, the worst that can (should) happen //is the instance will have to reinit with its current info. int indexNum = 0; int argNum = trap_Argc(); int i = 1; if (argNum < 1) { return; } while (i < argNum) { indexNum = atoi(CG_Argv(i)); if (cg_entities[indexNum].ghoul2 && trap_G2_HaveWeGhoul2Models(cg_entities[indexNum].ghoul2)) { if (indexNum < MAX_CLIENTS) { //You try to do very bad thing! #ifdef _DEBUG Com_Printf("WARNING: Tried to kill a client ghoul2 instance with a kg2 command!\n"); #endif return; } CG_KillCEntityG2(indexNum); } i++; } return; } if (!strcmp(cmd, "kls")) { //kill looping sounds int indexNum = 0; int argNum = trap_Argc(); centity_t *clent = NULL; centity_t *trackerent = NULL; if (argNum < 1) { assert(0); return; } indexNum = atoi(CG_Argv(1)); if (indexNum != -1) { clent = &cg_entities[indexNum]; } if (argNum >= 2) { indexNum = atoi(CG_Argv(2)); if (indexNum != -1) { trackerent = &cg_entities[indexNum]; } } if (clent) { CG_S_StopLoopingSound(clent->currentState.number, -1); } if (trackerent) { CG_S_StopLoopingSound(trackerent->currentState.number, -1); } return; } if (!strcmp(cmd, "ircg")) { //this means param 2 is the body index and we want to copy to bodyqueue on it IRCG = qtrue; } if (!strcmp(cmd, "rcg") || IRCG) { //rcg - Restore Client Ghoul (make sure limbs are reattached and ragdoll state is reset - this must be done reliably) int indexNum = 0; int argNum = trap_Argc(); centity_t *clent; if (argNum < 1) { assert(0); return; } indexNum = atoi(CG_Argv(1)); if (indexNum < 0 || indexNum >= MAX_CLIENTS) { assert(0); return; } clent = &cg_entities[indexNum]; //assert(clent->ghoul2); if (!clent->ghoul2) { //this can happen while connecting as a client return; } #ifdef _DEBUG if (!trap_G2_HaveWeGhoul2Models(clent->ghoul2)) { assert(!"Tried to reset state on a bad instance. Crash is inevitable."); } #endif if (IRCG) { int bodyIndex = 0; int weaponIndex = 0; int side = 0; centity_t *body; assert(argNum >= 3); bodyIndex = atoi(CG_Argv(2)); weaponIndex = atoi(CG_Argv(3)); side = atoi(CG_Argv(4)); body = &cg_entities[bodyIndex]; if (side) { body->teamPowerType = qtrue; //light side } else { body->teamPowerType = qfalse; //dark side } CG_BodyQueueCopy(body, clent->currentState.number, weaponIndex); } //reattach any missing limbs if (clent->torsoBolt) { CG_ReattachLimb(clent); } //make sure ragdoll state is reset if (clent->isRagging) { clent->isRagging = qfalse; trap_G2API_SetRagDoll(clent->ghoul2, NULL); //calling with null parms resets to no ragdoll. } //clear all the decals as well trap_G2API_ClearSkinGore(clent->ghoul2); clent->weapon = 0; clent->ghoul2weapon = NULL; //force a weapon reinit return; } if ( !strcmp( cmd, "cp" ) ) { char strEd[MAX_STRINGED_SV_STRING]; CG_CheckSVStringEdRef(strEd, CG_Argv(1)); CG_CenterPrint( strEd, SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH ); return; } if ( !strcmp( cmd, "cps" ) ) { char strEd[MAX_STRINGED_SV_STRING]; char *x = (char *)CG_Argv(1); if (x[0] == '@') { x++; } trap_SP_GetStringTextString(x, strEd, MAX_STRINGED_SV_STRING); CG_CenterPrint( strEd, SCREEN_HEIGHT * 0.20, BIGCHAR_WIDTH ); return; } if ( !strcmp( cmd, "cs" ) ) { CG_ConfigStringModified(); return; } if ( !strcmp( cmd, "print" ) ) { char strEd[MAX_STRINGED_SV_STRING]; CG_CheckSVStringEdRef(strEd, CG_Argv(1)); CG_Printf( "%s", strEd ); return; } if ( !strcmp( cmd, "chat" ) ) { if ( !cg_teamChatsOnly.integer ) { trap_S_StartLocalSound( cgs.media.talkSound, CHAN_LOCAL_SOUND ); Q_strncpyz( text, CG_Argv(1), MAX_SAY_TEXT ); CG_RemoveChatEscapeChar( text ); CG_ChatBox_AddString(text); CG_Printf( "*%s\n", text ); } return; } if ( !strcmp( cmd, "tchat" ) ) { trap_S_StartLocalSound( cgs.media.talkSound, CHAN_LOCAL_SOUND ); Q_strncpyz( text, CG_Argv(1), MAX_SAY_TEXT ); CG_RemoveChatEscapeChar( text ); CG_ChatBox_AddString(text); CG_Printf( "*%s\n", text ); return; } //chat with location, possibly localized. if ( !strcmp( cmd, "lchat" ) ) { if ( !cg_teamChatsOnly.integer ) { char name[MAX_STRING_CHARS]; char loc[MAX_STRING_CHARS]; char color[8]; char message[MAX_STRING_CHARS]; if (trap_Argc() < 4) { return; } strcpy(name, CG_Argv(1)); strcpy(loc, CG_Argv(2)); strcpy(color, CG_Argv(3)); strcpy(message, CG_Argv(4)); if (loc[0] == '@') { //get localized text trap_SP_GetStringTextString(loc+1, loc, MAX_STRING_CHARS); } trap_S_StartLocalSound( cgs.media.talkSound, CHAN_LOCAL_SOUND ); //Q_strncpyz( text, CG_Argv(1), MAX_SAY_TEXT ); Com_sprintf(text, MAX_SAY_TEXT, "%s<%s>^%s%s", name, loc, color, message); CG_RemoveChatEscapeChar( text ); CG_ChatBox_AddString(text); CG_Printf( "*%s\n", text ); } return; } if ( !strcmp( cmd, "ltchat" ) ) { char name[MAX_STRING_CHARS]; char loc[MAX_STRING_CHARS]; char color[8]; char message[MAX_STRING_CHARS]; if (trap_Argc() < 4) { return; } strcpy(name, CG_Argv(1)); strcpy(loc, CG_Argv(2)); strcpy(color, CG_Argv(3)); strcpy(message, CG_Argv(4)); if (loc[0] == '@') { //get localized text trap_SP_GetStringTextString(loc+1, loc, MAX_STRING_CHARS); } trap_S_StartLocalSound( cgs.media.talkSound, CHAN_LOCAL_SOUND ); //Q_strncpyz( text, CG_Argv(1), MAX_SAY_TEXT ); Com_sprintf(text, MAX_SAY_TEXT, "%s<%s> ^%s%s", name, loc, color, message); CG_RemoveChatEscapeChar( text ); CG_ChatBox_AddString(text); CG_Printf( "*%s\n", text ); return; } if ( !strcmp( cmd, "scores" ) ) { CG_ParseScores(); return; } if ( !strcmp( cmd, "tinfo" ) ) { CG_ParseTeamInfo(); return; } if ( !strcmp( cmd, "map_restart" ) ) { CG_MapRestart(); return; } if ( Q_stricmp (cmd, "remapShader") == 0 ) { if (trap_Argc() == 4) { trap_R_RemapShader(CG_Argv(1), CG_Argv(2), CG_Argv(3)); } } // loaddeferred can be both a servercmd and a consolecmd if ( !strcmp( cmd, "loaddefered" ) ) { // FIXME: spelled wrong, but not changing for demo CG_LoadDeferredPlayers(); return; } // clientLevelShot is sent before taking a special screenshot for // the menu system during development if ( !strcmp( cmd, "clientLevelShot" ) ) { cg.levelShot = qtrue; return; } CG_Printf( "Unknown client game command: %s\n", cmd ); }
/** * @brief CG_MouseEvent * @param[in] x * @param[in] y */ void CG_MouseEvent(int x, int y) { switch (cgs.eventHandling) { case CGAME_EVENT_DEMO: case CGAME_EVENT_MULTIVIEW: if (x != 0 || y != 0) { cgs.cursorUpdate = cg.time + 5000; } // fall through case CGAME_EVENT_SPEAKEREDITOR: case CGAME_EVENT_GAMEVIEW: case CGAME_EVENT_CAMPAIGNBREIFING: case CGAME_EVENT_FIRETEAMMSG: #ifdef FEATURE_EDV if (!cgs.demoCamera.renderingFreeCam) { #endif cgs.cursorX += x; if (cgs.cursorX < 0) { cgs.cursorX = 0; } else if (cgs.cursorX > SCREEN_WIDTH_SAFE) { cgs.cursorX = SCREEN_WIDTH_SAFE; } cgs.cursorY += y; if (cgs.cursorY < 0) { cgs.cursorY = 0; } else if (cgs.cursorY > SCREEN_HEIGHT_SAFE) { cgs.cursorY = SCREEN_HEIGHT_SAFE; } if (cgs.eventHandling == CGAME_EVENT_SPEAKEREDITOR) { CG_SpeakerEditorMouseMove_Handling(x, y); } #ifdef FEATURE_EDV } else { // mousemovement *should* feel the same as ingame char buffer[64]; int mx = 0, my = 0; int mouse_x_pos = 0, mouse_y_pos = 0; float sensitivity, m_pitch, m_yaw; int m_filter = 0; if (demo_lookat.integer != -1) { return; } mx += x; my += y; trap_Cvar_VariableStringBuffer("m_filter", buffer, sizeof(buffer)); m_filter = atoi(buffer); trap_Cvar_VariableStringBuffer("sensitivity", buffer, sizeof(buffer)); sensitivity = atof(buffer); trap_Cvar_VariableStringBuffer("m_pitch", buffer, sizeof(buffer)); m_pitch = atof(buffer); trap_Cvar_VariableStringBuffer("m_yaw", buffer, sizeof(buffer)); m_yaw = atof(buffer); if (m_filter) { mouse_x_pos = (mx + old_mouse_x_pos) / 2; mouse_y_pos = (my + old_mouse_y_pos) / 2; } else { mouse_x_pos = mx; mouse_y_pos = my; } old_mouse_x_pos = mx; old_mouse_y_pos = my; mouse_x_pos *= sensitivity; mouse_y_pos *= sensitivity; cg.refdefViewAngles[YAW] -= m_yaw * mouse_x_pos; cg.refdefViewAngles[PITCH] += m_pitch * mouse_y_pos; if (cg.refdefViewAngles[PITCH] < -90) { cg.refdefViewAngles[PITCH] = -90; } if (cg.refdefViewAngles[PITCH] > 90) { cg.refdefViewAngles[PITCH] = 90; } } #endif break; default: if (cg.snap->ps.pm_type == PM_INTERMISSION) { CG_Debriefing_MouseEvent(x, y); return; } // default handling if ((cg.predictedPlayerState.pm_type == PM_NORMAL || cg.predictedPlayerState.pm_type == PM_SPECTATOR) && cg.showScores == qfalse) { trap_Key_SetCatcher(trap_Key_GetCatcher() & ~KEYCATCH_CGAME); return; } break; } }
/* ================= UI_ConsoleCommand ================= */ qboolean UI_ConsoleCommand(int realTime) { char *cmd; char *arg1; uiInfo.uiDC.frameTime = realTime - uiInfo.uiDC.realTime; uiInfo.uiDC.realTime = realTime; cmd = UI_Argv(0); // ensure minimum menu data is available //Menu_Cache(); if(Q_stricmp(cmd, "ui_test") == 0) { UI_ShowPostGame(qtrue); } if(Q_stricmp(cmd, "ui_report") == 0) { UI_Report(); return qtrue; } if(Q_stricmp(cmd, "ui_load") == 0) { UI_Load(); return qtrue; } if(Q_stricmp(cmd, "remapShader") == 0) { if(trap_Argc() == 4) { char shader1[MAX_QPATH]; char shader2[MAX_QPATH]; Q_strncpyz(shader1, UI_Argv(1), sizeof(shader1)); Q_strncpyz(shader2, UI_Argv(2), sizeof(shader2)); trap_R_RemapShader(shader1, shader2, UI_Argv(3)); return qtrue; } } if(Q_stricmp(cmd, "postgame") == 0) { UI_CalcPostGameStats(); return qtrue; } if(Q_stricmp(cmd, "ui_cache") == 0) { UI_Cache_f(); return qtrue; } if(Q_stricmp(cmd, "ui_teamOrders") == 0) { //UI_TeamOrdersMenu_f(); return qtrue; } if(Q_stricmp(cmd, "menu") == 0) { arg1 = UI_Argv(1); if(Menu_Count() > 0) { trap_Key_SetCatcher(KEYCATCH_UI); Menus_ActivateByName(arg1); return qtrue; } } if(Q_stricmp(cmd, "closemenus") == 0) { if(Menu_Count() > 0) { trap_Key_SetCatcher(trap_Key_GetCatcher() & ~KEYCATCH_UI); trap_Key_ClearStates(); trap_Cvar_Set("cl_paused", "0"); Menus_CloseAll(); return qtrue; } } return qfalse; }