User:Psycommando/Macros reference: Difference between revisions
Jump to navigation
Jump to search
Psycommando (talk | contribs) (→Misc) |
Psycommando (talk | contribs) (→Misc) |
||
Line 68: | Line 68: | ||
END_RECV_TABLE() </source> | END_RECV_TABLE() </source> | ||
*Example : <source lang=cpp> STUB_WEAPON_CLASS( weapon_crowbar, WeaponCrowbar, C_BaseHLBludgeonWeapon ); </source> | *Example : <source lang=cpp> STUB_WEAPON_CLASS( weapon_crowbar, WeaponCrowbar, C_BaseHLBludgeonWeapon ); </source> | ||
== 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 : |
Revision as of 20:14, 23 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 );
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 :