User:Psycommando/Macros reference: Difference between revisions
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
 
		
	
Psycommando (talk | contribs)  (→Intro)  | 
				Psycommando (talk | contribs)  No edit summary  | 
				||
| (4 intermediate revisions by the same user not shown) | |||
| Line 4: | Line 4: | ||
== Warning on macros ==  | == Warning on macros ==  | ||
For those unfamiliar with macros, I must warn you that macros are <strong>EVIL</strong>. They are basically the equivalent of doing a search and replace at compile time, therefore never   | For those unfamiliar with macros, I must warn you that macros are <strong>EVIL</strong>. They are basically the equivalent of doing a search and replace at compile time, therefore never put an operation as a macro parameter, it will do the operations as many time as the parameter is used in the macro definition!!! This page [http://www.parashift.com/c++-faq-lite/inline-functions.html#faq-9.5 C++ Faq Lite] describe most of the problem. Be sure to check evil# 1-2-3-4.  | ||
== Data map ==  | == Data map ==  | ||
| Line 31: | Line 30: | ||
== Misc ==  | == Misc ==  | ||
===   | === STUB_WEAPON_CLASS ===  | ||
*Call : STUB_WEAPON_CLASS( entityName, className, baseClassName )  | |||
*Required Include : c_weapon__stubs.h  | |||
*Description : This macro is very simple, it writes a very basic client class for the specified weapon. Most of the weapon stub classes generated by this macro can be found in ''..\src\game\client\hl2\c_weapon__stubs_hl2.cpp'', but you should note that you can use this macro in any client-side .cpp file, of course you need to include "c_weapon__stubs.h".  | |||
*Macro Definition :  | |||
<source lang=cpp> #define STUB_WEAPON_CLASS( entityName, className, baseClassName )	\  | |||
	class C_##className## : public baseClassName					\  | |||
	{										\  | |||
		DECLARE_CLASS( C_##className##, baseClassName );                        \   | |||
        public:					                                        \  | |||
		DECLARE_PREDICTABLE();							\  | |||
		DECLARE_CLIENTCLASS();							\  | |||
	        C_##className() {};                                                     \   | |||
        private:                                                                        \  | |||
		C_##className( const C_##className & );					\  | |||
	};										\  | |||
	STUB_WEAPON_CLASS_IMPLEMENT( entityName, C_##className );		\  | |||
	IMPLEMENT_CLIENTCLASS_DT( C_##className, DT_##className, C##className )	\  | |||
	END_RECV_TABLE() </source>  | |||
*Example : <source lang=cpp> STUB_WEAPON_CLASS( weapon_crowbar, WeaponCrowbar, C_BaseHLBludgeonWeapon ); </source>  | |||
*Call :   | === REGISTER_GAMERULES_CLASS ===  | ||
*  | *Call : REGISTER_GAMERULES_CLASS( className )  | ||
*Required Include : ..\src\game\shared\gamerules_register.h  | |||
*Description : Add a new gamerule class to the register?(...Need research...)  | |||
*Definition :   | |||
<source lang=cpp> #define REGISTER_GAMERULES_CLASS( className ) \  | |||
	void __CreateGameRules_##className() { new className; } \  | |||
	static CGameRulesRegister __g_GameRulesRegister_##className( #className, __CreateGameRules_##className );    | |||
</source>    | |||
*Example :  | |||
Latest revision as of 17:31, 30 March 2010
Intro
Prototype for a complete list of macros links(in the wiki) and infos. All Macros are listed in different categories, and divided in groups.
Warning on macros
For those unfamiliar with macros, I must warn you that macros are EVIL. They are basically the equivalent of doing a search and replace at compile time, therefore never put an operation as a macro parameter, it will do the operations as many time as the parameter is used in the macro definition!!! This page C++ Faq Lite describe most of the problem. Be sure to check evil# 1-2-3-4.
Data map
Declaration :
Definition :
Network
IMPLEMENT_NETWORKCLASS_ALIASED
- Call : IMPLEMENT_NETWORKCLASS_ALIASED( className, dataTable )
 - Declaration : From ..\game\shared\predictable_entity.h
 
#define IMPLEMENT_NETWORKCLASS_ALIASED(className, dataTable) \ IMPLEMENT_CLIENTCLASS( C_##className, dataTable, C##className )
- Description :
 
- Example :
 
Misc
STUB_WEAPON_CLASS
- Call : STUB_WEAPON_CLASS( entityName, className, baseClassName )
 - Required Include : c_weapon__stubs.h
 - Description : This macro is very simple, it writes a very basic client class for the specified weapon. Most of the weapon stub classes generated by this macro can be found in ..\src\game\client\hl2\c_weapon__stubs_hl2.cpp, but you should note that you can use this macro in any client-side .cpp file, of course you need to include "c_weapon__stubs.h".
 - Macro Definition :
 
 #define STUB_WEAPON_CLASS( entityName, className, baseClassName )	\
	class C_##className## : public baseClassName					\
	{										\
		DECLARE_CLASS( C_##className##, baseClassName );                        \ 
        public:					                                        \
		DECLARE_PREDICTABLE();							\
		DECLARE_CLIENTCLASS();							\
	        C_##className() {};                                                     \ 
        private:                                                                        \
		C_##className( const C_##className & );					\
	};										\
	STUB_WEAPON_CLASS_IMPLEMENT( entityName, C_##className );		\
	IMPLEMENT_CLIENTCLASS_DT( C_##className, DT_##className, C##className )	\
	END_RECV_TABLE()
- Example : 
STUB_WEAPON_CLASS( weapon_crowbar, WeaponCrowbar, C_BaseHLBludgeonWeapon );
 
REGISTER_GAMERULES_CLASS
- Call : REGISTER_GAMERULES_CLASS( className )
 - Required Include : ..\src\game\shared\gamerules_register.h
 - Description : Add a new gamerule class to the register?(...Need research...)
 - Definition :
 
 #define REGISTER_GAMERULES_CLASS( className ) \
	void __CreateGameRules_##className() { new className; } \
	static CGameRulesRegister __g_GameRulesRegister_##className( #className, __CreateGameRules_##className );
- Example :