Difference between revisions of "UTIL VarArgs"

From Valve Developer Community
Jump to: navigation, search
(Formatting, more examples)
Line 1: Line 1:
This function will build a C-String similar to printf. It is server-side only!
+
{{wrongtitle|UTIL_VarArgs}}
 +
'''UTIL_VarArgs''' is a [[UTIL]] provided to build a C-String similar to printf. This is only available on the '''server'''. It is useful for quickly building a composite string.
  
Example:
+
== Usage ==
<code>
+
<source lang=cpp>
 +
//-----------------------------------------------------------------------------
 +
// Purpose: Prints a message to console
 +
// Input  : format - See examples
 +
// Output : a char-array that is easily used in Msg, etc.
 +
//-----------------------------------------------------------------------------
 +
char *UTIL_VarArgs( char *format, ... )
 +
{
 +
va_list argptr;
 +
static char string[1024];
 +
 +
va_start (argptr, format);
 +
Q_vsnprintf(string, sizeof(string), format,argptr);
 +
va_end (argptr);
  
 +
return string;
 +
}
 +
</source>
 +
 +
== Examples ==
 +
 +
<source lang=cpp>
 
int iCreepers = 3;
 
int iCreepers = 3;
  
 
char * pFortress = "My Awesome Fort.";
 
char * pFortress = "My Awesome Fort.";
 +
char * pOutput = UTIL_VarArgs( "There are %i creepers outside of your %s.", iCreepers, pFortress );
  
char * pOutput = UTIL_VarArgs( "There are %i creepers outside of your %s.", iCreepers, pFortress );
+
Msg("%s", pOutput );
  
Msg("%s", output);
+
//Prints: There are 3 creepers outside of your My Awesome Fortress.
 +
</source>
  
 +
<source lang=cpp>
 +
//This example uses a UTIL_VarArgs to prefix a string, and then execute a console command.
 +
void CPointDevShotCamera::DevShotThink_TakeShot( void )
 +
{
 +
// Take the screenshot
 +
CBasePlayer *pPlayer = UTIL_GetLocalPlayerOrListenServerHost();
 +
if ( !pPlayer )
 +
return;
  
//  prints: There are 3 creepers outside of your My Awesome Fortress.
+
engine->ClientCommand( pPlayer->edict(), UTIL_VarArgs( "devshots_screenshot \"%s\"", STRING(m_iszCameraName) ) );
</code>
 
  
This is useful for quickly building a composite string.
+
// Now take the shot next frame
 +
SetThink( &CPointDevShotCamera::DevShotThink_PostShot );
 +
SetNextThink( gpGlobals->curtime + (DEVSHOT_INTERVAL - 1) );
 +
}
 +
</source>
  
<code>
+
<source lang=cpp>
char * pOutput = UTIL_VarArgs( "X:%f Y:%f Z:%f\n", vec.x, vec.y, vec.z );
+
//This example gets the current map name, and appends it onto the end of a prefix string
</code>
+
//It's used to find per-map files, such as custom soundscapes.
 +
const char *mapname = STRING( gpGlobals->mapname );
 +
const char *mapSoundscapeFilename = NULL;
 +
if ( mapname && *mapname )
 +
{
 +
mapSoundscapeFilename = UTIL_VarArgs( "scripts/soundscapes_%s.txt", mapname );
 +
}
 +
</source>
 +
[[Category:Programming]]
 +
[[Category:UTIL]]

Revision as of 18:43, 11 April 2011

Template:Wrongtitle UTIL_VarArgs is a UTIL provided to build a C-String similar to printf. This is only available on the server. It is useful for quickly building a composite string.

Usage

//-----------------------------------------------------------------------------
// Purpose: Prints a message to console
// Input  : format - See examples
// Output : a char-array that is easily used in Msg, etc.
//-----------------------------------------------------------------------------
char *UTIL_VarArgs( char *format, ... )
{
	va_list		argptr;
	static char		string[1024];
	
	va_start (argptr, format);
	Q_vsnprintf(string, sizeof(string), format,argptr);
	va_end (argptr);

	return string;	
}

Examples

int iCreepers = 3;

char * pFortress = "My Awesome Fort.";
char * pOutput = UTIL_VarArgs( "There are %i creepers outside of your %s.", iCreepers, pFortress );

Msg("%s", pOutput );

//Prints: There are 3 creepers outside of your My Awesome Fortress.
//This example uses a UTIL_VarArgs to prefix a string, and then execute a console command.
void CPointDevShotCamera::DevShotThink_TakeShot( void )
{
	// Take the screenshot
	CBasePlayer *pPlayer = UTIL_GetLocalPlayerOrListenServerHost();
	if ( !pPlayer )
		return;

	engine->ClientCommand( pPlayer->edict(), UTIL_VarArgs( "devshots_screenshot \"%s\"", STRING(m_iszCameraName) ) );

	// Now take the shot next frame
	SetThink( &CPointDevShotCamera::DevShotThink_PostShot );
	SetNextThink( gpGlobals->curtime + (DEVSHOT_INTERVAL - 1) );
}
//This example gets the current map name, and appends it onto the end of a prefix string
//It's used to find per-map files, such as custom soundscapes.
const char *mapname = STRING( gpGlobals->mapname );
const char *mapSoundscapeFilename = NULL;
if ( mapname && *mapname )
{
	mapSoundscapeFilename = UTIL_VarArgs( "scripts/soundscapes_%s.txt", mapname );
}