Example #1
0
bool CHudMessage::MessageRemove(const char *pName)
{
	const char* theMessage = pName;
	bool theSuccess = false;
	bool theNeedsTranslation = (pName[0] == '#');
	
	// Trim off a leading # if it's there
	if(theNeedsTranslation) 
	{
		client_textmessage_t* tempMessage = TextMessageGet(pName + 1);
		if(tempMessage)
		{
			theMessage = tempMessage->pMessage;
		}
	}
	
	if(theMessage)
	{
		for (int j = 0; j < maxHUDMessages; j++ )
		{
			if ( m_pMessages[j] )
			{
				// is this message already in the list
				if (!strcmp(theMessage, m_pMessages[j]->pMessage))
				{
					m_startTime[j] = -1;
					theSuccess = true;
				}
			}
		}
	}
	return theSuccess;
}
// Simplified version of LocaliseTextString;  assumes string is only one word
char *CHudTextMessage::LookupString( const char *msg, int *msg_dest )
{
	if ( !msg )
		return "";

	// '#' character indicates this is a reference to a string in titles.txt, and not the string itself
	if ( msg[0] == '#' ) 
	{
		// this is a message name, so look up the real message
		client_textmessage_t *clmsg = TextMessageGet( msg+1 );

		if ( !clmsg || !(clmsg->pMessage) )
			return (char*)msg; // lookup failed, so return the original string
		
		if ( msg_dest )
		{
			// check to see if titles.txt info overrides msg destination
			// if clmsg->effect is less than 0, then clmsg->effect holds -1 * message_destination
			if ( clmsg->effect < 0 )  // 
				*msg_dest = -clmsg->effect;
		}

		return (char*)clmsg->pMessage;
	}
	else
	{  // nothing special about this message, so just return the same string
		return (char*)msg;
	}
}
Example #3
0
inline void InsertTextMsg( char *szDst, size_t sLen, const char *szMsgName)
{
	client_textmessage_t *msg = TextMessageGet(szMsgName);
	if( msg )
	{
		strncpy( szDst, msg->pMessage, sLen );
	}
	else strncpy( szDst, szMsgName, sLen );
}
Example #4
0
//-----------------------------------------------------------------------------
// Purpose:  Searches through the string for any msg names (indicated by a '#')
// any found are looked up in titles.txt and the new message substituted
// the new value is pushed into dst_buffer
// Input  : *msg - 
//			*dst_buffer - 
//			buffer_size - 
// Output : char
//-----------------------------------------------------------------------------
char *CHudTextMessage::LocaliseTextString( const char *msg, char *dst_buffer, int buffer_size )
{
	char *dst = dst_buffer;
	for ( char *src = (char*)msg; *src != 0 && buffer_size > 0; buffer_size-- )
	{
		if ( *src == '#' )
		{
			// cut msg name out of string
			static char word_buf[255];
			char *wdst = word_buf, *word_start = src;
			for ( ++src ; *src >= 'A' && *src <= 'z'; wdst++, src++ )
			{
				*wdst = *src;
			}
			*wdst = 0;

			// lookup msg name in titles.txt
			client_textmessage_t *clmsg = TextMessageGet( word_buf );
			if ( !clmsg || !(clmsg->pMessage) )
			{
				src = word_start;
				*dst = *src;
				dst++, src++;
				continue;
			}

			// Does titles.txt want to lookup into cstrike_<language>.txt?
			wchar_t *pLocalizedStr;
			if ( clmsg->pMessage[0] == '#' && ((pLocalizedStr = g_pVGuiLocalize->Find( clmsg->pMessage )) != NULL ) )
			{
				g_pVGuiLocalize->ConvertUnicodeToANSI( pLocalizedStr, dst, buffer_size );
			}
			else
			{
				// copy string into message over the msg name
				for ( char *wsrc = (char*)clmsg->pMessage; *wsrc != 0; wsrc++, dst++ )
				{
					*dst = *wsrc;
				}
				*dst = 0;
			}
		}
		else
		{
			*dst = *src;
			dst++, src++;
			*dst = 0;
		}
	}

	//
// ensure null termination
	dst_buffer[buffer_size-1] = 0; 
	return dst_buffer;
}
//-----------------------------------------------------------------------------
// Purpose: 
// Input  : bool - 
//-----------------------------------------------------------------------------
void C_TETextMessage::PostDataUpdate( DataUpdateType_t updateType )
{
	int channel;
	client_textmessage_t *pNetMessage;

// Position command $position x y 
// x & y are from 0 to 1 to be screen resolution independent
// -1 means center in each dimension
// Effect command $effect <effect number>
// effect 0 is fade in/fade out
// effect 1 is flickery credits
// effect 2 is write out (training room)
// Text color r g b command $color
// Text color r g b command $color2
// fadein time fadeout time / hold time
// $fadein (message fade in time - per character in effect 2)
// $fadeout (message fade out time)
// $holdtime (stay on the screen for this long)
	channel = m_nChannel % MAX_NETMESSAGE;	// Pick the buffer
	
	pNetMessage = TextMessageGet( gNetworkMessageNames[ channel ] );
	if ( !pNetMessage || !pNetMessage->pMessage )
		return;

	pNetMessage->x = x;
	pNetMessage->y = y;

	pNetMessage->effect = m_nEffects;

	pNetMessage->r1 = r1;
	pNetMessage->g1 = g1;
	pNetMessage->b1 = b1;
	pNetMessage->a1 = a1;

	pNetMessage->r2 = r2;
	pNetMessage->g2 = g2;
	pNetMessage->b2 = b2;
	pNetMessage->a2 = a2;

	pNetMessage->fadein = m_fFadeInTime;
	pNetMessage->fadeout = m_fFadeOutTime;
	pNetMessage->holdtime = m_fHoldTime;

	if ( pNetMessage->effect == 2 )
		pNetMessage->fxtime = m_fFxTime;

	pNetMessage->pName = gNetworkMessageNames[ channel ];

	Q_strncpy( (char *)pNetMessage->pMessage, m_szMessage, sizeof( m_szMessage ) );

	DispatchHudText( "HudText", Q_strlen( pNetMessage->pName ) + 1, (void *)pNetMessage->pName );
}
Example #6
0
int CHudMessage::MsgFunc_GameTitle( const char *pszName,  int iSize, void *pbuf )
{
	m_pGameTitle = TextMessageGet( "GAMETITLE" );
	if ( m_pGameTitle != NULL )
	{
		m_gameTitleTime = gHUD.m_flTime;

		// Turn on drawing
		if ( !(m_iFlags & HUD_ACTIVE) )
			m_iFlags |= HUD_ACTIVE;
	}

	return 1;
}
Example #7
0
void CHudMessage::MessageAdd( const char *pName, float time )
{
	int i;

	for ( i = 0; i < maxHUDMessages; i++ )
	{
		if ( !m_pMessages[i] )
		{
			m_pMessages[i] = TextMessageGet( pName );
			m_startTime[i] = time;
			return;
		}
	}
}
//-----------------------------------------------------------------------------
// Purpose:  Searches through the string for any msg names (indicated by a '#')
// any found are looked up in titles.txt and the new message substituted
// the new value is pushed into dst_buffer
// Input  : *msg - 
//			*dst_buffer - 
//			buffer_size - 
// Output : char
//-----------------------------------------------------------------------------
char *CHudTextMessage::LocaliseTextString( const char *msg, char *dst_buffer, int buffer_size )
{
	char *dst = dst_buffer;
	for ( char *src = (char*)msg; *src != 0 && buffer_size > 0; buffer_size-- )
	{
		if ( *src == '#' )
		{
			// cut msg name out of string
			static char word_buf[255];
			char *wdst = word_buf, *word_start = src;
			for ( ++src ; *src >= 'A' && *src <= 'z'; wdst++, src++ )
			{
				*wdst = *src;
			}
			*wdst = 0;

			// lookup msg name in titles.txt
			client_textmessage_t *clmsg = TextMessageGet( word_buf );
			if ( !clmsg || !(clmsg->pMessage) )
			{
				src = word_start;
				*dst = *src;
				dst++, src++;
				continue;
			}

			// copy string into message over the msg name
			for ( char *wsrc = (char*)clmsg->pMessage; *wsrc != 0; wsrc++, dst++ )
			{
				*dst = *wsrc;
			}
			*dst = 0;
		}
		else
		{
			*dst = *src;
			dst++, src++;
			*dst = 0;
		}
	}

	//
// ensure null termination
	dst_buffer[buffer_size-1] = 0; 
	return dst_buffer;
}
Example #9
0
void CHudMessage::MessageAdd( const char *pName, float time )
{
	int i,j;
	client_textmessage_t *tempMessage;
	
	for ( i = 0; i < maxHUDMessages; i++ )
	{
		if ( !m_pMessages[i] )
		{
			// Trim off a leading # if it's there
			if ( pName[0] == '#' ) 
				tempMessage = TextMessageGet( pName+1 );
			else
				tempMessage = TextMessageGet( pName );
			// If we couldnt find it in the titles.txt, just create it
			if ( !tempMessage )
			{
				g_pCustomMessage.effect = 2;
				g_pCustomMessage.r1 = g_pCustomMessage.g1 = g_pCustomMessage.b1 = g_pCustomMessage.a1 = 100;
				g_pCustomMessage.r2 = 240;
				g_pCustomMessage.g2 = 110;
				g_pCustomMessage.b2 = 0;
				g_pCustomMessage.a2 = 0;
				g_pCustomMessage.x = -1;		// Centered
				g_pCustomMessage.y = 0.7;
				g_pCustomMessage.fadein = 0.01;
				g_pCustomMessage.fadeout = 1.5;
				g_pCustomMessage.fxtime = 0.25;
				g_pCustomMessage.holdtime = 5;
				g_pCustomMessage.pName = g_pCustomName;
				strcpy( g_pCustomText, pName );
				g_pCustomMessage.pMessage = g_pCustomText;
				
				tempMessage = &g_pCustomMessage;
			}
			
			for ( j = 0; j < maxHUDMessages; j++ )
			{
				if ( m_pMessages[j] )
				{
					// is this message already in the list
					if ( !strcmp( tempMessage->pMessage, m_pMessages[j]->pMessage ) )
					{
						return;
					}
					
					// get rid of any other messages in same location (only one displays at a time)
					if ( fabs( tempMessage->y - m_pMessages[j]->y ) < 0.0001 )
					{
						if ( fabs( tempMessage->x - m_pMessages[j]->x ) < 0.0001 )
						{
							m_pMessages[j] = NULL;
						}
					}
				}
			}
			
			m_pMessages[i] = tempMessage;
			m_startTime[i] = time;
			return;
		}
	}
}
Example #10
0
void CHudMessage::MessageAdd( const char *pName, float time )
{
	int i,j;
	client_textmessage_t *tempMessage;

	for ( i = 0; i < maxHUDMessages; i++ )
	{
		if ( !m_pMessages[i] )
		{
			// Trim off a leading # if it's there
			if ( pName[0] == '#' ) 
				tempMessage = TextMessageGet( pName+1 );
			else
				tempMessage = TextMessageGet( pName );

			client_textmessage_t *message = new client_textmessage_t;
			if( tempMessage )
			{
				*message = *tempMessage;

				// localize again, if it need
				if( message->pMessage[0] == '#' )
				{
					char *szCustomName = new char[10];
					char *szCustomText = new char[1024];
					strcpy( szCustomName, "Custom" );
					strcpy( szCustomText, pName );
					message->pMessage = szCustomText;
					message->pName = szCustomName;
				}
			}
			else
			{
				char *szCustomName = new char[10];
				char *szCustomText = new char[1024];
				strcpy( szCustomName, "Custom" );
				strcpy( szCustomText, pName );

				// If we couldnt find it in the titles.txt, just create it
				message->effect = 2;
				message->r1 = message->g1 = message->b1 = message->a1 = 100;
				message->r2 = 240;
				message->g2 = 110;
				message->b2 = 0;
				message->a2 = 0;
				message->x = -1;		// Centered
				message->y = 0.7;
				message->fadein = 0.01;
				message->fadeout = 1.5;
				message->fxtime = 0.25;
				message->holdtime = 5;
				message->pName = szCustomName;
				message->pMessage = szCustomText;
			}

			for ( j = 0; j < maxHUDMessages; j++ )
			{
				if ( m_pMessages[j] )
				{
					// is this message already in the list
					if ( !strcmp( message->pMessage, m_pMessages[j]->pMessage ) )
					{
						return;
					}

					// get rid of any other messages in same location (only one displays at a time)
					if ( fabs( message->y - m_pMessages[j]->y ) < 0.0001 && fabs( message->x - m_pMessages[j]->x ) < 0.0001 )
					{
						if( !strcmp( m_pMessages[j]->pName, "Custom" ) )
						{
							delete[] m_pMessages[j]->pName;
							delete[] m_pMessages[j]->pMessage;
						}
						delete m_pMessages[j];
						m_pMessages[j] = NULL;
					}
				}
			}

			m_pMessages[i] = message;
			m_startTime[i] = time;
			return;
		}
	}
}
Example #11
0
void CHudMessage::MessageAdd( const char *pName, float time )
{
	int i,j;
	client_textmessage_t *tempMessage;

	for ( i = 0; i < maxHUDMessages; i++ )
	{
		if ( !m_pMessages[i] )
		{
			// Trim off a leading # if it's there
			if ( pName[0] == '#' ) 
				tempMessage = TextMessageGet( pName+1 );
			else
				tempMessage = TextMessageGet( pName );
			// If we couldnt find it in the titles.txt, just create it
			if ( !tempMessage )
			{
				// g-cont. a circular message buffer
				m_index = (m_index + 1) & (MAX_CUSTOM_MESSAGES - 1);
				tempMessage = &g_pCustomMessage[m_index];

				tempMessage->effect = 2;
				tempMessage->r1 = tempMessage->g1 = tempMessage->b1 = tempMessage->a1 = 192;
				tempMessage->r2 = 240;
				tempMessage->g2 = 110;
				tempMessage->b2 = 0;
				tempMessage->a2 = 0;
				tempMessage->x = -1;		// Centered
				tempMessage->y = 0.7;
				tempMessage->fadein = 0.01;
				tempMessage->fadeout = 1.5;
				tempMessage->fxtime = 0.25;
				tempMessage->holdtime = 5;
				strcpy( (char *)tempMessage->pMessage, pName );
			}

			for ( j = 0; j < maxHUDMessages; j++ )
			{
				if ( m_pMessages[j] )
				{
					// is this message already in the list
					if ( !strcmp( tempMessage->pMessage, m_pMessages[j]->pMessage ) )
					{
						return;
					}

					// get rid of any other messages in same location (only one displays at a time)
					if ( fabs( tempMessage->y - m_pMessages[j]->y ) < 0.0001 )
					{
						if ( fabs( tempMessage->x - m_pMessages[j]->x ) < 0.0001 )
						{
							m_pMessages[j] = NULL;
						}
					}
				}
			}

			m_pMessages[i] = tempMessage;
			m_startTime[i] = time;
			return;
		}
	}
}