core/convar_sm.h
author Nicholas Hastings <skamonkey@gmail.com>
Sat Aug 03 19:03:12 2013 -0400 (2013-08-03)
changeset 3969 fe179ff9a57a
parent 1952 b7aa2b626807
permissions -rw-r--r--
Triggering build.
ds@1952
     1
//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
ds@1952
     2
//
ds@1952
     3
// Purpose: 
ds@1952
     4
//
ds@1952
     5
// $Workfile:     $
ds@1952
     6
// $Date: 2006-08-13 06:34:30 -0500 (Sun, 13 Aug 2006) $
ds@1952
     7
//
ds@1952
     8
//-----------------------------------------------------------------------------
ds@1952
     9
// $NoKeywords: $
ds@1952
    10
//=============================================================================//
ds@1952
    11
ds@1952
    12
#ifndef CONVAR_H
ds@1952
    13
#define CONVAR_H
ds@1952
    14
#if _WIN32
ds@1952
    15
#pragma once
ds@1952
    16
#endif
ds@1952
    17
ds@1952
    18
#include "tier0/dbg.h"
ds@1952
    19
ds@1952
    20
#ifdef _WIN32
ds@1952
    21
#define FORCEINLINE_CVAR FORCEINLINE
ds@1952
    22
#elif _LINUX
ds@1952
    23
#define FORCEINLINE_CVAR __inline__ FORCEINLINE
ds@1952
    24
#else
ds@1952
    25
#error "implement me"
ds@1952
    26
#endif
ds@1952
    27
ds@1952
    28
// The default, no flags at all
ds@1952
    29
#define FCVAR_NONE				0 
ds@1952
    30
ds@1952
    31
// Command to ConVars and ConCommands
ds@1952
    32
// ConVar Systems
ds@1952
    33
#define FCVAR_UNREGISTERED		(1<<0)	// If this is set, don't add to linked list, etc.
ds@1952
    34
#define FCVAR_LAUNCHER			(1<<1)	// defined by launcher
ds@1952
    35
#define FCVAR_GAMEDLL			(1<<2)	// defined by the game DLL
ds@1952
    36
#define FCVAR_CLIENTDLL			(1<<3)  // defined by the client DLL
ds@1952
    37
#define FCVAR_MATERIAL_SYSTEM	(1<<4)	// Defined by the material system.
ds@1952
    38
#define FCVAR_DATACACHE			(1<<19)	// Defined by the datacache system.
ds@1952
    39
#define FCVAR_STUDIORENDER		(1<<15)	// Defined by the studiorender system.
ds@1952
    40
#define FCVAR_FILESYSTEM		(1<<21)	// Defined by the file system.
ds@1952
    41
#define FCVAR_PLUGIN			(1<<18)	// Defined by a 3rd party plugin.
ds@1952
    42
#define FCVAR_TOOLSYSTEM		(1<<20)	// Defined by an IToolSystem library
ds@1952
    43
#define FCVAR_SOUNDSYSTEM		(1<<23)	// Defined by the soundsystem library
ds@1952
    44
#define FCVAR_INPUTSYSTEM		(1<<25)	// Defined by the inputsystem dll
ds@1952
    45
#define FCVAR_NETWORKSYSTEM		(1<<26) // Defined by the network system
ds@1952
    46
// NOTE!! if you add a cvar system, add it here too!!!!
ds@1952
    47
// the engine lacks a cvar flag, but needs it for xbox
ds@1952
    48
// an engine cvar is thus a cvar not marked with any other system
ds@1952
    49
#define FCVAR_NON_ENGINE		((FCVAR_LAUNCHER|FCVAR_GAMEDLL|FCVAR_CLIENTDLL|FCVAR_MATERIAL_SYSTEM|FCVAR_DATACACHE|FCVAR_STUDIORENDER|FCVAR_FILESYSTEM|FCVAR_PLUGIN|FCVAR_TOOLSYSTEM|FCVAR_SOUNDSYSTEM|FCVAR_INPUTSYSTEM|FCVAR_NETWORKSYSTEM))
ds@1952
    50
ds@1952
    51
// ConVar only
ds@1952
    52
#define FCVAR_PROTECTED			(1<<5)  // It's a server cvar, but we don't send the data since it's a password, etc.  Sends 1 if it's not bland/zero, 0 otherwise as value
ds@1952
    53
#define FCVAR_SPONLY			(1<<6)  // This cvar cannot be changed by clients connected to a multiplayer server.
ds@1952
    54
#define	FCVAR_ARCHIVE			(1<<7)	// set to cause it to be saved to vars.rc
ds@1952
    55
#define	FCVAR_NOTIFY			(1<<8)	// notifies players when changed
ds@1952
    56
#define	FCVAR_USERINFO			(1<<9)	// changes the client's info string
ds@1952
    57
#define FCVAR_CHEAT				(1<<14) // Only useable in singleplayer / debug / multiplayer & sv_cheats
ds@1952
    58
ds@1952
    59
#define FCVAR_PRINTABLEONLY		(1<<10)  // This cvar's string cannot contain unprintable characters ( e.g., used for player name etc ).
ds@1952
    60
#define FCVAR_UNLOGGED			(1<<11)  // If this is a FCVAR_SERVER, don't log changes to the log file / console if we are creating a log
ds@1952
    61
#define FCVAR_NEVER_AS_STRING	(1<<12)  // never try to print that cvar
ds@1952
    62
ds@1952
    63
// It's a ConVar that's shared between the client and the server.
ds@1952
    64
// At signon, the values of all such ConVars are sent from the server to the client (skipped for local
ds@1952
    65
//  client, of course )
ds@1952
    66
// If a change is requested it must come from the console (i.e., no remote client changes)
ds@1952
    67
// If a value is changed while a server is active, it's replicated to all connected clients
ds@1952
    68
#define FCVAR_REPLICATED		(1<<13)	// server setting enforced on clients, TODO rename to FCAR_SERVER at some time
ds@1952
    69
#define FCVAR_DEMO				(1<<16)  // record this cvar when starting a demo file
ds@1952
    70
#define FCVAR_DONTRECORD		(1<<17)  // don't record these command in demofiles
ds@1952
    71
ds@1952
    72
#define FCVAR_NOT_CONNECTED		(1<<22)	// cvar cannot be changed by a client that is connected to a server
ds@1952
    73
ds@1952
    74
#define FCVAR_ARCHIVE_XBOX		(1<<24) // cvar written to config.cfg on the Xbox
ds@1952
    75
ds@1952
    76
ds@1952
    77
// #define FCVAR_AVAILABLE			(1<<27)
ds@1952
    78
// #define FCVAR_AVAILABLE			(1<<28)
ds@1952
    79
// #define FCVAR_AVAILABLE			(1<<29)
ds@1952
    80
// #define FCVAR_AVAILABLE			(1<<30)
ds@1952
    81
// #define FCVAR_AVAILABLE			(1<<31)
ds@1952
    82
ds@1952
    83
ds@1952
    84
class ConVar;
ds@1952
    85
class ConCommand;
ds@1952
    86
class ConCommandBase;
ds@1952
    87
ds@1952
    88
// Any executable that wants to use ConVars need to implement one of
ds@1952
    89
// these to hook up access to console variables.
ds@1952
    90
class IConCommandBaseAccessor
ds@1952
    91
{
ds@1952
    92
public:
ds@1952
    93
	// Flags is a combination of FCVAR flags in cvar.h.
ds@1952
    94
	// hOut is filled in with a handle to the variable.
ds@1952
    95
	virtual bool RegisterConCommandBase( ConCommandBase *pVar )=0;
ds@1952
    96
};
ds@1952
    97
ds@1952
    98
ds@1952
    99
// You don't have to instantiate one of these, just call its 
ds@1952
   100
// OneTimeInit function when your executable is initializing.
ds@1952
   101
class ConCommandBaseMgr
ds@1952
   102
{
ds@1952
   103
public:
ds@1952
   104
	// Call this ONCE when the executable starts up.
ds@1952
   105
	static void	OneTimeInit( IConCommandBaseAccessor *pAccessor );
ds@1952
   106
#ifdef _XBOX
ds@1952
   107
	static bool Fixup( ConCommandBase* pConCommandBase );
ds@1952
   108
#ifndef _RETAIL
ds@1952
   109
	static void PublishCommands( bool bForce );
ds@1952
   110
#endif
ds@1952
   111
#endif
ds@1952
   112
};
ds@1952
   113
ds@1952
   114
// Called when a ConVar changes value
ds@1952
   115
typedef void ( *FnChangeCallback )( ConVar *var, char const *pOldString );
ds@1952
   116
ds@1952
   117
// Called when a ConCommand needs to execute
ds@1952
   118
typedef void ( *FnCommandCallback )( void );
ds@1952
   119
ds@1952
   120
#define COMMAND_COMPLETION_MAXITEMS		64
ds@1952
   121
#define COMMAND_COMPLETION_ITEM_LENGTH	64
ds@1952
   122
ds@1952
   123
// Returns 0 to COMMAND_COMPLETION_MAXITEMS worth of completion strings
ds@1952
   124
typedef int  ( *FnCommandCompletionCallback )( char const *partial, char commands[ COMMAND_COMPLETION_MAXITEMS ][ COMMAND_COMPLETION_ITEM_LENGTH ] );
ds@1952
   125
ds@1952
   126
//-----------------------------------------------------------------------------
ds@1952
   127
// Purpose: The base console invoked command/cvar interface
ds@1952
   128
//-----------------------------------------------------------------------------
ds@1952
   129
class ConCommandBase
ds@1952
   130
{
ds@1952
   131
	friend class ConCommandBaseMgr;
ds@1952
   132
	friend class CCvar;
ds@1952
   133
	friend class ConVar;
ds@1952
   134
	friend class ConCommand;
ds@1952
   135
ds@1952
   136
public:
ds@1952
   137
								ConCommandBase( void );
ds@1952
   138
								ConCommandBase( char const *pName, char const *pHelpString = 0, 
ds@1952
   139
									int flags = 0 );
ds@1952
   140
ds@1952
   141
	virtual						~ConCommandBase( void );
ds@1952
   142
ds@1952
   143
	virtual	bool				IsCommand( void ) const;
ds@1952
   144
ds@1952
   145
	// Check flag
ds@1952
   146
	virtual bool				IsBitSet( int flag ) const;
ds@1952
   147
	// Set flag
ds@1952
   148
	virtual void				AddFlags( int flags );
ds@1952
   149
ds@1952
   150
	// Return name of cvar
ds@1952
   151
	virtual char const			*GetName( void ) const;
ds@1952
   152
ds@1952
   153
	// Return help text for cvar
ds@1952
   154
	virtual char const			*GetHelpText( void ) const;
ds@1952
   155
ds@1952
   156
	// Deal with next pointer
ds@1952
   157
	const ConCommandBase		*GetNext( void ) const;
ds@1952
   158
	void						SetNext( ConCommandBase *next );
ds@1952
   159
	
ds@1952
   160
	virtual bool				IsRegistered( void ) const;
ds@1952
   161
ds@1952
   162
	// Global methods
ds@1952
   163
	static ConCommandBase const	*GetCommands( void );
ds@1952
   164
	static void					AddToList( ConCommandBase *var );
ds@1952
   165
	static void					RemoveFlaggedCommands( int flag );
ds@1952
   166
	static void					RevertFlaggedCvars( int flag );
ds@1952
   167
	static ConCommandBase const	*FindCommand( char const *name );
ds@1952
   168
ds@1952
   169
protected:
ds@1952
   170
	virtual void				Create( char const *pName, char const *pHelpString = 0, 
ds@1952
   171
									int flags = 0 );
ds@1952
   172
ds@1952
   173
	// Used internally by OneTimeInit to initialize.
ds@1952
   174
	virtual void				Init();
ds@1952
   175
ds@1952
   176
	// Internal copy routine ( uses new operator from correct module )
ds@1952
   177
	char						*CopyString( char const *from );
ds@1952
   178
ds@1952
   179
	// Next ConVar in chain
ds@1952
   180
	ConCommandBase				*m_pNext;
ds@1952
   181
ds@1952
   182
private:
ds@1952
   183
	// Has the cvar been added to the global list?
ds@1952
   184
	bool						m_bRegistered;
ds@1952
   185
ds@1952
   186
	// Static data
ds@1952
   187
	char const 					*m_pszName;
ds@1952
   188
	char const 					*m_pszHelpString;
ds@1952
   189
	
ds@1952
   190
	// ConVar flags
ds@1952
   191
	int							m_nFlags;
ds@1952
   192
ds@1952
   193
protected:
ds@1952
   194
ds@1952
   195
	// ConVars add themselves to this list for the executable. Then ConVarMgr::Init() runs through 
ds@1952
   196
	// all the console variables and registers them.
ds@1952
   197
	static ConCommandBase		*s_pConCommandBases;
ds@1952
   198
ds@1952
   199
	// ConVars in this executable use this 'global' to access values.
ds@1952
   200
	static IConCommandBaseAccessor	*s_pAccessor;
ds@1952
   201
	
ds@1952
   202
public: // Hackalicous
ds@1952
   203
	inline int GetFlags() const
ds@1952
   204
	{
ds@1952
   205
		return m_nFlags;
ds@1952
   206
	}
ds@1952
   207
	inline void SetFlags(int flags)	
ds@1952
   208
	{ 
ds@1952
   209
		m_nFlags = flags; 
ds@1952
   210
	}
ds@1952
   211
};
ds@1952
   212
ds@1952
   213
//-----------------------------------------------------------------------------
ds@1952
   214
// Purpose: The console invoked command
ds@1952
   215
//-----------------------------------------------------------------------------
ds@1952
   216
class ConCommand : public ConCommandBase
ds@1952
   217
{
ds@1952
   218
friend class ConCommandBaseMgr;
ds@1952
   219
friend class CCvar;
ds@1952
   220
#ifdef _STATIC_LINKED
ds@1952
   221
friend class G_ConCommand;
ds@1952
   222
friend class C_ConCommand;
ds@1952
   223
friend class M_ConCommand;
ds@1952
   224
friend class S_ConCommand;
ds@1952
   225
friend class D_ConCommand;
ds@1952
   226
#endif
ds@1952
   227
ds@1952
   228
public:
ds@1952
   229
	typedef ConCommandBase BaseClass;
ds@1952
   230
ds@1952
   231
								ConCommand( void );
ds@1952
   232
								ConCommand( char const *pName, FnCommandCallback callback, 
ds@1952
   233
									char const *pHelpString = 0, int flags = 0, FnCommandCompletionCallback completionFunc = 0 );
ds@1952
   234
ds@1952
   235
	virtual						~ConCommand( void );
ds@1952
   236
ds@1952
   237
	virtual	bool				IsCommand( void ) const;
ds@1952
   238
ds@1952
   239
	virtual int					AutoCompleteSuggest( char const *partial, char commands[ COMMAND_COMPLETION_MAXITEMS ][ COMMAND_COMPLETION_ITEM_LENGTH ] );
ds@1952
   240
ds@1952
   241
	virtual bool				CanAutoComplete( void );
ds@1952
   242
ds@1952
   243
	// Invoke the function
ds@1952
   244
	virtual void				Dispatch( void );
ds@1952
   245
private:
ds@1952
   246
	virtual void				Create( char const *pName, FnCommandCallback callback, 
ds@1952
   247
									char const *pHelpString = 0, int flags = 0, FnCommandCompletionCallback completionFunc = 0 );
ds@1952
   248
ds@1952
   249
	// Call this function when executing the command
ds@1952
   250
	FnCommandCallback			m_fnCommandCallback;
ds@1952
   251
ds@1952
   252
	FnCommandCompletionCallback	m_fnCompletionCallback;
ds@1952
   253
	bool						m_bHasCompletionCallback;
ds@1952
   254
public: // Hackalicous
ds@1952
   255
	inline FnCommandCallback GetCallback() const
ds@1952
   256
	{ 
ds@1952
   257
		return m_fnCommandCallback; 
ds@1952
   258
	}
ds@1952
   259
};
ds@1952
   260
ds@1952
   261
//-----------------------------------------------------------------------------
ds@1952
   262
// Purpose: A console variable
ds@1952
   263
//-----------------------------------------------------------------------------
ds@1952
   264
class ConVar : public ConCommandBase
ds@1952
   265
{
ds@1952
   266
friend class ConCommandBaseMgr;
ds@1952
   267
friend class CCvar;
ds@1952
   268
friend class CDefaultCvar;
ds@1952
   269
#ifdef _STATIC_LINKED
ds@1952
   270
friend class G_ConVar;
ds@1952
   271
friend class C_ConVar;
ds@1952
   272
friend class M_ConVar;
ds@1952
   273
friend class S_ConVar;
ds@1952
   274
friend class D_ConVar;
ds@1952
   275
#endif
ds@1952
   276
ds@1952
   277
public:
ds@1952
   278
	typedef ConCommandBase BaseClass;
ds@1952
   279
ds@1952
   280
								ConVar( char const *pName, char const *pDefaultValue, int flags = 0);
ds@1952
   281
ds@1952
   282
								ConVar( char const *pName, char const *pDefaultValue, int flags, 
ds@1952
   283
									char const *pHelpString );
ds@1952
   284
								ConVar( char const *pName, char const *pDefaultValue, int flags, 
ds@1952
   285
									char const *pHelpString, bool bMin, float fMin, bool bMax, float fMax );
ds@1952
   286
								ConVar( char const *pName, char const *pDefaultValue, int flags, 
ds@1952
   287
									char const *pHelpString, FnChangeCallback callback );
ds@1952
   288
								ConVar( char const *pName, char const *pDefaultValue, int flags, 
ds@1952
   289
									char const *pHelpString, bool bMin, float fMin, bool bMax, float fMax,
ds@1952
   290
									FnChangeCallback callback );
ds@1952
   291
ds@1952
   292
	virtual						~ConVar( void );
ds@1952
   293
ds@1952
   294
	virtual bool				IsBitSet( int flag ) const;
ds@1952
   295
	virtual char const*			GetHelpText( void ) const;
ds@1952
   296
	virtual bool				IsRegistered( void ) const;
ds@1952
   297
	virtual char const			*GetName( void ) const;
ds@1952
   298
	virtual void				AddFlags( int flags );
ds@1952
   299
	virtual	bool				IsCommand( void ) const;
ds@1952
   300
ds@1952
   301
	// Install a change callback (there shouldn't already be one....)
ds@1952
   302
	void InstallChangeCallback( FnChangeCallback callback );
ds@1952
   303
ds@1952
   304
	// Retrieve value
ds@1952
   305
	FORCEINLINE_CVAR float			GetFloat( void ) const;
ds@1952
   306
	FORCEINLINE_CVAR int				GetInt( void ) const;
ds@1952
   307
	FORCEINLINE_CVAR bool			GetBool() const {  return !!GetInt(); }
ds@1952
   308
	FORCEINLINE_CVAR char const	   *GetString( void ) const;
ds@1952
   309
ds@1952
   310
	// Any function that allocates/frees memory needs to be virtual or else you'll have crashes
ds@1952
   311
	//  from alloc/free across dll/exe boundaries.
ds@1952
   312
	
ds@1952
   313
	// These just call into the IConCommandBaseAccessor to check flags and set the var (which ends up calling InternalSetValue).
ds@1952
   314
	virtual void				SetValue( char const *value );
ds@1952
   315
	virtual void				SetValue( float value );
ds@1952
   316
	virtual void				SetValue( int value );
ds@1952
   317
	
ds@1952
   318
	// Reset to default value
ds@1952
   319
	void						Revert( void );
ds@1952
   320
ds@1952
   321
	// True if it has a min/max setting
ds@1952
   322
	bool						GetMin( float& minVal ) const;
ds@1952
   323
	bool						GetMax( float& maxVal ) const;
ds@1952
   324
	char const					*GetDefault( void ) const;
ds@1952
   325
ds@1952
   326
	static void					RevertAll( void );
ds@1952
   327
private:
ds@1952
   328
	// Called by CCvar when the value of a var is changing.
ds@1952
   329
	virtual void				InternalSetValue(char const *value);
ds@1952
   330
	// For CVARs marked FCVAR_NEVER_AS_STRING
ds@1952
   331
	virtual void				InternalSetFloatValue( float fNewValue );
ds@1952
   332
	virtual void				InternalSetIntValue( int nValue );
ds@1952
   333
ds@1952
   334
	virtual bool				ClampValue( float& value );
ds@1952
   335
	virtual void				ChangeStringValue( char const *tempVal );
ds@1952
   336
ds@1952
   337
	virtual void				Create( char const *pName, char const *pDefaultValue, int flags = 0,
ds@1952
   338
									char const *pHelpString = 0, bool bMin = false, float fMin = 0.0,
ds@1952
   339
									bool bMax = false, float fMax = false, FnChangeCallback callback = 0 );
ds@1952
   340
ds@1952
   341
	// Used internally by OneTimeInit to initialize.
ds@1952
   342
	virtual void				Init();
ds@1952
   343
ds@1952
   344
private:
ds@1952
   345
ds@1952
   346
	// This either points to "this" or it points to the original declaration of a ConVar.
ds@1952
   347
	// This allows ConVars to exist in separate modules, and they all use the first one to be declared.
ds@1952
   348
	// m_pParent->m_pParent must equal m_pParent (ie: m_pParent must be the root, or original, ConVar).
ds@1952
   349
	ConVar						*m_pParent;
ds@1952
   350
ds@1952
   351
	// Static data
ds@1952
   352
	char const					*m_pszDefaultValue;
ds@1952
   353
	
ds@1952
   354
	// Value
ds@1952
   355
	// Dynamically allocated
ds@1952
   356
	char						*m_pszString;
ds@1952
   357
	int							m_StringLength;
ds@1952
   358
ds@1952
   359
	// Values
ds@1952
   360
	float						m_fValue;
ds@1952
   361
	int							m_nValue;
ds@1952
   362
ds@1952
   363
	// Min/Max values
ds@1952
   364
	bool						m_bHasMin;
ds@1952
   365
	float						m_fMinVal;
ds@1952
   366
	bool						m_bHasMax;
ds@1952
   367
	float						m_fMaxVal;
ds@1952
   368
	
ds@1952
   369
	// Call this function when ConVar changes
ds@1952
   370
	FnChangeCallback			m_fnChangeCallback;
ds@1952
   371
public: // Hackalicous
ds@1952
   372
	inline FnChangeCallback	GetCallback() const
ds@1952
   373
	{
ds@1952
   374
		return m_fnChangeCallback;
ds@1952
   375
	}
ds@1952
   376
	inline void SetMin(bool set, float min=0.0)
ds@1952
   377
	{ 
ds@1952
   378
		m_bHasMin = set; 
ds@1952
   379
		m_fMinVal = min; 
ds@1952
   380
	}
ds@1952
   381
	inline void SetMax(bool set, float max=0.0)
ds@1952
   382
	{
ds@1952
   383
		m_bHasMax = set;
ds@1952
   384
		m_fMaxVal = max; 
ds@1952
   385
	}
ds@1952
   386
};
ds@1952
   387
ds@1952
   388
ds@1952
   389
//-----------------------------------------------------------------------------
ds@1952
   390
// Purpose: Return ConVar value as a float
ds@1952
   391
// Output : float
ds@1952
   392
//-----------------------------------------------------------------------------
ds@1952
   393
FORCEINLINE_CVAR float ConVar::GetFloat( void ) const
ds@1952
   394
{
ds@1952
   395
	return m_pParent->m_fValue;
ds@1952
   396
}
ds@1952
   397
ds@1952
   398
//-----------------------------------------------------------------------------
ds@1952
   399
// Purpose: Return ConVar value as an int
ds@1952
   400
// Output : int
ds@1952
   401
//-----------------------------------------------------------------------------
ds@1952
   402
FORCEINLINE_CVAR int ConVar::GetInt( void ) const 
ds@1952
   403
{
ds@1952
   404
	return m_pParent->m_nValue;
ds@1952
   405
}
ds@1952
   406
ds@1952
   407
ds@1952
   408
//-----------------------------------------------------------------------------
ds@1952
   409
// Purpose: Return ConVar value as a string, return "" for bogus string pointer, etc.
ds@1952
   410
// Output : char const *
ds@1952
   411
//-----------------------------------------------------------------------------
ds@1952
   412
FORCEINLINE_CVAR char const *ConVar::GetString( void ) const 
ds@1952
   413
{
ds@1952
   414
	if ( m_nFlags & FCVAR_NEVER_AS_STRING )
ds@1952
   415
	{
ds@1952
   416
		return "FCVAR_NEVER_AS_STRING";
ds@1952
   417
	}
ds@1952
   418
ds@1952
   419
	return ( m_pParent->m_pszString ) ? m_pParent->m_pszString : "";
ds@1952
   420
}
ds@1952
   421
ds@1952
   422
ds@1952
   423
#ifdef _STATIC_LINKED
ds@1952
   424
// identifies subsystem via piggybacking constructors with flags
ds@1952
   425
class G_ConCommand : public ConCommand
ds@1952
   426
{
ds@1952
   427
public:
ds@1952
   428
	G_ConCommand(char const *pName, FnCommandCallback callback, char const *pHelpString = 0, int flags = 0, FnCommandCompletionCallback completionFunc = 0 ) :	ConCommand(pName, callback, pHelpString, flags|FCVAR_GAMEDLL, completionFunc) {}
ds@1952
   429
};
ds@1952
   430
ds@1952
   431
class C_ConCommand : public ConCommand
ds@1952
   432
{
ds@1952
   433
public:
ds@1952
   434
	C_ConCommand(char const *pName, FnCommandCallback callback, char const *pHelpString = 0, int flags = 0, FnCommandCompletionCallback completionFunc = 0 ) :	ConCommand(pName, callback, pHelpString, flags|FCVAR_CLIENTDLL, completionFunc) {}
ds@1952
   435
};
ds@1952
   436
ds@1952
   437
class M_ConCommand : public ConCommand
ds@1952
   438
{
ds@1952
   439
public:
ds@1952
   440
	M_ConCommand(char const *pName, FnCommandCallback callback, char const *pHelpString = 0, int flags = 0, FnCommandCompletionCallback completionFunc = 0 ) :	ConCommand(pName, callback, pHelpString, flags|FCVAR_MATERIAL_SYSTEM, completionFunc) {}
ds@1952
   441
};
ds@1952
   442
ds@1952
   443
class S_ConCommand : public ConCommand
ds@1952
   444
{
ds@1952
   445
public:
ds@1952
   446
	S_ConCommand(char const *pName, FnCommandCallback callback, char const *pHelpString = 0, int flags = 0, FnCommandCompletionCallback completionFunc = 0 ) :	ConCommand(pName, callback, pHelpString, flags|FCVAR_STUDIORENDER, completionFunc) {}
ds@1952
   447
};
ds@1952
   448
ds@1952
   449
class D_ConCommand : public ConCommand
ds@1952
   450
{
ds@1952
   451
public:
ds@1952
   452
	D_ConCommand(char const *pName, FnCommandCallback callback, char const *pHelpString = 0, int flags = 0, FnCommandCompletionCallback completionFunc = 0 ) :	ConCommand(pName, callback, pHelpString, flags|FCVAR_DATACACHE, completionFunc) {}
ds@1952
   453
};
ds@1952
   454
ds@1952
   455
typedef void ( *G_FnChangeCallback )( G_ConVar *var, char const *pOldString );
ds@1952
   456
typedef void ( *C_FnChangeCallback )( C_ConVar *var, char const *pOldString );
ds@1952
   457
typedef void ( *M_FnChangeCallback )( M_ConVar *var, char const *pOldString );
ds@1952
   458
typedef void ( *S_FnChangeCallback )( S_ConVar *var, char const *pOldString );
ds@1952
   459
typedef void ( *D_FnChangeCallback )( D_ConVar *var, char const *pOldString );
ds@1952
   460
ds@1952
   461
class G_ConVar : public ConVar
ds@1952
   462
{
ds@1952
   463
public:
ds@1952
   464
	G_ConVar( char const *pName, char const *pDefaultValue, int flags = 0) : ConVar(pName, pDefaultValue, flags|FCVAR_GAMEDLL) {}
ds@1952
   465
	G_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString ) : ConVar(pName, pDefaultValue, flags|FCVAR_GAMEDLL, pHelpString ) {}
ds@1952
   466
	G_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, bool bMin, float fMin, bool bMax, float fMax ) : ConVar(pName, pDefaultValue, flags|FCVAR_GAMEDLL, pHelpString, bMin, fMin, bMax, fMax) {}
ds@1952
   467
	G_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, G_FnChangeCallback callback ) : ConVar(pName, pDefaultValue, flags|FCVAR_GAMEDLL, pHelpString, (FnChangeCallback)callback ) {}
ds@1952
   468
	G_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, bool bMin, float fMin, bool bMax, float fMax, G_FnChangeCallback callback ) : ConVar(pName, pDefaultValue, flags|FCVAR_GAMEDLL, pHelpString, bMin, fMin, bMax, fMax, (FnChangeCallback)callback ) {}
ds@1952
   469
};
ds@1952
   470
ds@1952
   471
class C_ConVar : public ConVar
ds@1952
   472
{
ds@1952
   473
public:
ds@1952
   474
	C_ConVar( char const *pName, char const *pDefaultValue, int flags = 0) : ConVar(pName, pDefaultValue, flags|FCVAR_CLIENTDLL) {}
ds@1952
   475
	C_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString ) : ConVar(pName, pDefaultValue, flags|FCVAR_CLIENTDLL, pHelpString ) {}
ds@1952
   476
	C_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, bool bMin, float fMin, bool bMax, float fMax ) : ConVar(pName, pDefaultValue, flags|FCVAR_CLIENTDLL, pHelpString, bMin, fMin, bMax, fMax) {}
ds@1952
   477
	C_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, C_FnChangeCallback callback ) : ConVar(pName, pDefaultValue, flags|FCVAR_CLIENTDLL, pHelpString, (FnChangeCallback)callback ) {}
ds@1952
   478
	C_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, bool bMin, float fMin, bool bMax, float fMax, C_FnChangeCallback callback ) : ConVar(pName, pDefaultValue, flags|FCVAR_CLIENTDLL, pHelpString, bMin, fMin, bMax, fMax, (FnChangeCallback)callback ) {}
ds@1952
   479
};
ds@1952
   480
ds@1952
   481
class M_ConVar : public ConVar
ds@1952
   482
{
ds@1952
   483
public:
ds@1952
   484
	M_ConVar( char const *pName, char const *pDefaultValue, int flags = 0) : ConVar(pName, pDefaultValue, flags|FCVAR_MATERIAL_SYSTEM) {}
ds@1952
   485
	M_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString ) : ConVar(pName, pDefaultValue, flags|FCVAR_MATERIAL_SYSTEM, pHelpString ) {}
ds@1952
   486
	M_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, bool bMin, float fMin, bool bMax, float fMax ) : ConVar(pName, pDefaultValue, flags|FCVAR_MATERIAL_SYSTEM, pHelpString, bMin, fMin, bMax, fMax) {}
ds@1952
   487
	M_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, M_FnChangeCallback callback ) : ConVar(pName, pDefaultValue, flags|FCVAR_MATERIAL_SYSTEM, pHelpString, (FnChangeCallback)callback ) {}
ds@1952
   488
	M_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, bool bMin, float fMin, bool bMax, float fMax, M_FnChangeCallback callback ) : ConVar(pName, pDefaultValue, flags|FCVAR_MATERIAL_SYSTEM, pHelpString, bMin, fMin, bMax, fMax, (FnChangeCallback)callback ) {}
ds@1952
   489
};
ds@1952
   490
ds@1952
   491
class S_ConVar : public ConVar
ds@1952
   492
{
ds@1952
   493
public:
ds@1952
   494
	S_ConVar( char const *pName, char const *pDefaultValue, int flags = 0) : ConVar(pName, pDefaultValue, flags|FCVAR_STUDIORENDER) {}
ds@1952
   495
	S_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString ) : ConVar(pName, pDefaultValue, flags|FCVAR_STUDIORENDER, pHelpString ) {}
ds@1952
   496
	S_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, bool bMin, float fMin, bool bMax, float fMax ) : ConVar(pName, pDefaultValue, flags|FCVAR_STUDIORENDER, pHelpString, bMin, fMin, bMax, fMax) {}
ds@1952
   497
	S_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, M_FnChangeCallback callback ) : ConVar(pName, pDefaultValue, flags|FCVAR_STUDIORENDER, pHelpString, (FnChangeCallback)callback ) {}
ds@1952
   498
	S_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, bool bMin, float fMin, bool bMax, float fMax, S_FnChangeCallback callback ) : ConVar(pName, pDefaultValue, flags|FCVAR_STUDIORENDER, pHelpString, bMin, fMin, bMax, fMax, (FnChangeCallback)callback ) {}
ds@1952
   499
};
ds@1952
   500
ds@1952
   501
class D_ConVar : public ConVar
ds@1952
   502
{
ds@1952
   503
public:
ds@1952
   504
	D_ConVar( char const *pName, char const *pDefaultValue, int flags = 0) : ConVar(pName, pDefaultValue, flags|FCVAR_DATACACHE) {}
ds@1952
   505
	D_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString ) : ConVar(pName, pDefaultValue, flags|FCVAR_DATACACHE, pHelpString ) {}
ds@1952
   506
	D_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, bool bMin, float fMin, bool bMax, float fMax ) : ConVar(pName, pDefaultValue, flags|FCVAR_DATACACHE, pHelpString, bMin, fMin, bMax, fMax) {}
ds@1952
   507
	D_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, M_FnChangeCallback callback ) : ConVar(pName, pDefaultValue, flags|FCVAR_DATACACHE, pHelpString, (FnChangeCallback)callback ) {}
ds@1952
   508
	D_ConVar( char const *pName, char const *pDefaultValue, int flags, char const *pHelpString, bool bMin, float fMin, bool bMax, float fMax, D_FnChangeCallback callback ) : ConVar(pName, pDefaultValue, flags|FCVAR_DATACACHE, pHelpString, bMin, fMin, bMax, fMax, (FnChangeCallback)callback ) {}
ds@1952
   509
};
ds@1952
   510
ds@1952
   511
// redirect these declarations to their specific subsystem
ds@1952
   512
#ifdef GAME_DLL
ds@1952
   513
#define ConCommand	G_ConCommand
ds@1952
   514
#define ConVar		G_ConVar
ds@1952
   515
#endif
ds@1952
   516
#ifdef CLIENT_DLL
ds@1952
   517
#define ConCommand	C_ConCommand
ds@1952
   518
#define ConVar		C_ConVar
ds@1952
   519
#endif
ds@1952
   520
#ifdef MATERIALSYSTEM_DLL
ds@1952
   521
#define ConCommand	M_ConCommand
ds@1952
   522
#define ConVar		M_ConVar
ds@1952
   523
#endif
ds@1952
   524
#ifdef STUDIORENDER_DLL
ds@1952
   525
#define ConCommand	S_ConCommand
ds@1952
   526
#define ConVar		S_ConVar
ds@1952
   527
#endif
ds@1952
   528
#ifdef DATACACHE_DLL
ds@1952
   529
#define ConCommand	D_ConCommand
ds@1952
   530
#define ConVar		D_ConVar
ds@1952
   531
#endif
ds@1952
   532
#endif // _STATIC_LINKED
ds@1952
   533
ds@1952
   534
//-----------------------------------------------------------------------------
ds@1952
   535
// Purpose: Utility to quicky generate a simple console command
ds@1952
   536
//-----------------------------------------------------------------------------
ds@1952
   537
#define CON_COMMAND( name, description ) \
ds@1952
   538
   static void name(); \
ds@1952
   539
   static ConCommand name##_command( #name, name, description ); \
ds@1952
   540
   static void name()
ds@1952
   541
ds@1952
   542
//-----------------------------------------------------------------------------
ds@1952
   543
// Purpose: Utility to quicky generate a simple console command
ds@1952
   544
//-----------------------------------------------------------------------------
ds@1952
   545
#define CON_COMMAND_F( name, description, flags ) \
ds@1952
   546
   static void name(); \
ds@1952
   547
   static ConCommand name##_command( #name, name, description, flags ); \
ds@1952
   548
   static void name()
ds@1952
   549
ds@1952
   550
ds@1952
   551
#endif // CONVAR_H