User:Psycommando/Macros reference: Difference between revisions
Jump to navigation
Jump to search
Psycommando (talk | contribs) (→Intro) |
Psycommando (talk | contribs) (→Misc) |
||
Line 34: | Line 34: | ||
*Call : MDLCACHE_CRITICAL_SECTION() | *Call : MDLCACHE_CRITICAL_SECTION() | ||
*Description : This one is still an enigma. It create a [http://en.wikipedia.org/wiki/Critical_section critical section] to avoid concurrent accesses to what seems to be a bunch of loaded source .mdl files, but why is it used when simply modifying or calling an entity's methods?(Answers on talk page are welcome) | *Description : This one is still an enigma. It create a [http://en.wikipedia.org/wiki/Critical_section critical section] to avoid concurrent accesses to what seems to be a bunch of loaded source .mdl files, but why is it used when simply modifying or calling an entity's methods?(Answers on talk page are welcome) Also note that the created object's lifetime is restricted to between the if statement's brackets. | ||
*Example : (From ..\src\game\server\gameinterface.cpp) | *Example : (From ..\src\game\server\gameinterface.cpp) | ||
<pre> // Call all entities' OnRestore handlers | <pre> // Call all entities' OnRestore handlers | ||
Line 46: | Line 46: | ||
} | } | ||
}</pre> | }</pre> | ||
=== 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> |
Revision as of 16:06, 18 April 2009
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 ever put an operation as a macro parameter!!! 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
MDLCACHE_CRITICAL_SECTION
- Call : MDLCACHE_CRITICAL_SECTION()
- Description : This one is still an enigma. It create a critical section to avoid concurrent accesses to what seems to be a bunch of loaded source .mdl files, but why is it used when simply modifying or calling an entity's methods?(Answers on talk page are welcome) Also note that the created object's lifetime is restricted to between the if statement's brackets.
- Example : (From ..\src\game\server\gameinterface.cpp)
// Call all entities' OnRestore handlers for ( int i = g_RestoredEntities.Count()-1; i >=0; --i ) { CBaseEntity *pEntity = g_RestoredEntities[i].Get(); if ( pEntity && !pEntity->IsDormant() ) { MDLCACHE_CRITICAL_SECTION(); pEntity->OnRestore(); } }
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 );