// Message handler for ShowMenu message // takes four values: // short: a bitfield of keys that are valid input // char : the duration, in seconds, the menu should stay up. -1 means is stays until something is chosen. // byte : a boolean, TRUE if there is more string yet to be received before displaying the menu, FALSE if it's the last string // string: menu string to display // if this message is never received, then scores will simply be the combined totals of the players. int CHudMenu :: MsgFunc_ShowMenu( const char *pszName, int iSize, void *pbuf ) { char *temp = NULL; BEGIN_READ( pszName, pbuf, iSize ); m_bitsValidSlots = READ_SHORT(); int DisplayTime = READ_CHAR(); int NeedMore = READ_BYTE(); if( DisplayTime > 0 ) m_flShutoffTime = DisplayTime + gHUD.m_flTime; else m_flShutoffTime = -1; if( m_bitsValidSlots ) { if( !m_fWaitingForMore ) { // this is the start of a new menu Q_strncpy( g_szPrelocalisedMenuString, READ_STRING(), MAX_MENU_STRING ); } else { // append to the current menu string Q_strncat( g_szPrelocalisedMenuString, READ_STRING(), MAX_MENU_STRING - Q_strlen( g_szPrelocalisedMenuString )); } g_szPrelocalisedMenuString[MAX_MENU_STRING-1] = 0; // ensure null termination (strncat/strncpy does not) if( !NeedMore ) { // we have the whole string, so we can localise it now Q_strcpy( g_szMenuString, gHUD.m_TextMessage.BufferedLocaliseTextString( g_szPrelocalisedMenuString )); // Swap in characters if( KB_ConvertString( g_szMenuString, &temp )) { Q_strcpy( g_szMenuString, temp ); free( temp ); } } m_fMenuDisplayed = 1; m_iFlags |= HUD_ACTIVE; } else { m_fMenuDisplayed = 0; // no valid slots means that the menu should be turned off m_iFlags &= ~HUD_ACTIVE; } m_fWaitingForMore = NeedMore; END_READ(); return 1; }
// Message handler for ShowMenu message // takes four values: // short: a bitfield of keys that are valid input // char : the duration, in seconds, the menu should stay up. -1 means is stays until something is chosen. // byte : a boolean, true if there is more string yet to be received before displaying the menu, false if it's the last string // string: menu string to display // if this message is never received, then scores will simply be the combined totals of the players. int CHudMenu :: MsgFunc_ShowMenu( const char *pszName, int iSize, void *pbuf ) { char *temp = NULL; CBufferReader reader( pbuf, iSize ); m_bitsValidSlots = reader.ReadShort(); int DisplayTime = reader.ReadChar(); const bool NeedMore = reader.ReadByte() != 0; if ( DisplayTime > 0 ) m_flShutoffTime = DisplayTime + gHUD.m_flTime; else m_flShutoffTime = -1; if ( m_bitsValidSlots ) { if ( !m_fWaitingForMore ) // this is the start of a new menu { strncpy( m_szPrelocalisedMenuString, reader.ReadString(), MAX_MENU_STRING ); } else { // append to the current menu string strncat( m_szPrelocalisedMenuString, reader.ReadString(), MAX_MENU_STRING - strlen(m_szPrelocalisedMenuString) - 1 ); } m_szPrelocalisedMenuString[MAX_MENU_STRING-1] = 0; // ensure null termination (strncat/strncpy does not) if ( !NeedMore ) { // we have the whole string, so we can localise it now strcpy( m_szMenuString, gHUD.m_TextMessage.BufferedLocaliseTextString( m_szPrelocalisedMenuString ) ); // Swap in characters if ( KB_ConvertString( m_szMenuString, &temp ) ) { strcpy( m_szMenuString, temp ); free( temp ); } } m_fMenuDisplayed = true; m_iFlags |= HUD_ACTIVE; } else { m_fMenuDisplayed = false; // no valid slots means that the menu should be turned off m_iFlags &= ~HUD_ACTIVE; } m_fWaitingForMore = NeedMore; return 1; }
// Message handler for ShowMenu message // takes four values: // short: a bitfield of keys that are valid input // char : the duration, in seconds, the menu should stay up. -1 means is stays until something is chosen. // byte : a boolean, TRUE if there is more string yet to be received before displaying the menu, FALSE if it's the last string // string: menu string to display // if this message is never received, then scores will simply be the combined totals of the players. int CHudMenu :: MsgFunc_ShowMenu( const char *pszName, int iSize, void *pbuf ) { char *temp = NULL, *menustring; BEGIN_READ( pbuf, iSize ); m_bitsValidSlots = READ_SHORT(); int DisplayTime = READ_CHAR(); int NeedMore = READ_BYTE(); if ( DisplayTime > 0 ) m_flShutoffTime = DisplayTime + gHUD.m_flTime; else m_flShutoffTime = -1; if ( !m_bitsValidSlots ) { m_fMenuDisplayed = 0; // no valid slots means that the menu should be turned off m_iFlags &= ~HUD_ACTIVE; ClientCmd("touch_removebutton _menu_*"); return 1; } menustring = READ_STRING(); // menu will be replaced by scripted touch config // so execute it and exit if( _extended_menus->value != 0.0f ) { if( !strcmp(menustring, "#RadioA") ) { ShowVGUIMenu(MENU_RADIOA); return 1; } else if( !strcmp(menustring, "#RadioB")) { ShowVGUIMenu(MENU_RADIOB); return 1; } else if( !strcmp(menustring, "#RadioC")) { ShowVGUIMenu(MENU_RADIOC); return 1; } else { // we just show touch screen numbers ShowVGUIMenu(MENU_NUMERICAL_MENU); } } else { // we just show touch screen numbers ShowVGUIMenu(MENU_NUMERICAL_MENU); } if ( !m_fWaitingForMore ) // this is the start of a new menu { strncpy( g_szPrelocalisedMenuString, menustring, MAX_MENU_STRING ); } else { // append to the current menu string strncat( g_szPrelocalisedMenuString, menustring, MAX_MENU_STRING - strlen(g_szPrelocalisedMenuString) ); } g_szPrelocalisedMenuString[MAX_MENU_STRING-1] = 0; // ensure null termination (strncat/strncpy does not) if ( !NeedMore ) { // we have the whole string, so we can localise it now strncpy( g_szMenuString, gHUD.m_TextMessage.BufferedLocaliseTextString( g_szPrelocalisedMenuString ), MAX_MENU_STRING ); // Swap in characters if ( KB_ConvertString( g_szMenuString, &temp ) ) { strncpy( g_szMenuString, temp, MAX_MENU_STRING ); free( temp ); } } m_fMenuDisplayed = 1; m_iFlags |= HUD_ACTIVE; m_fWaitingForMore = NeedMore; return 1; }