X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmutators%2Fbase.qh;h=2b4d3e34cbe23f61c1bd84ed587dbe705b07edfe;hb=f8da4c3a82ee2899e90c84af196ca0f530ac5447;hp=770c9f05d69c4d7b15d1d2b0a7bb4879bfae3a13;hpb=6170690fd976ff67094ac10b1123bef7f8568e26;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/mutators/base.qh b/qcsrc/common/mutators/base.qh index 770c9f05d..2b4d3e34c 100644 --- a/qcsrc/common/mutators/base.qh +++ b/qcsrc/common/mutators/base.qh @@ -165,13 +165,15 @@ CLASS(Mutator, Object) ENDCLASS(Mutator) REGISTRY(Mutators, BITS(7)) -#define Mutators_from(i) _Mutators_from(i, NULL) + +REGISTRY_DEFINE_GET(Mutators, NULL) bool Mutator_Add(Mutator mut); void Mutator_Remove(Mutator mut); bool mutator_log = false; .bool m_added; -#define MUTATOR_IS_ENABLED(this) MUTATOR_##this.mutatorcheck() +#define _MUTATOR_IS_ENABLED(this) this.mutatorcheck() +#define MUTATOR_IS_ENABLED(this) _MUTATOR_IS_ENABLED(MUTATOR_##this) #ifdef GAMEQC /** server mutators activate corresponding client mutators for all clients */ @@ -276,14 +278,14 @@ STATIC_INIT(Mutators) { } STATIC_INIT_LATE(Mutators) { - FOREACH(Mutators, it.mutatorcheck(), Mutator_Add(it)); + FOREACH(Mutators, _MUTATOR_IS_ENABLED(it), Mutator_Add(it)); } #define MUTATOR_ONADD if (mode == MUTATOR_ADDING) #define MUTATOR_ONREMOVE if (mode == MUTATOR_REMOVING) #define MUTATOR_ONROLLBACK_OR_REMOVE if (mode == MUTATOR_REMOVING || mode == MUTATOR_ROLLING_BACK) -#define MUTATOR_STATIC() MACRO_BEGIN { \ +#define MUTATOR_STATIC() MACRO_BEGIN \ MUTATOR_ONADD { \ /* game loads at time 1 */ \ if (time > 1) { \ @@ -294,7 +296,7 @@ STATIC_INIT_LATE(Mutators) { LOG_INFO("This is a game type and it cannot be removed at runtime."); \ return -1; \ } \ -} MACRO_END +MACRO_END #define MUTATOR_ADD(name) Mutator_Add(MUTATOR_##name) #define MUTATOR_REMOVE(name) Mutator_Remove(MUTATOR_##name) @@ -318,16 +320,22 @@ STATIC_INIT_LATE(Mutators) { bool mut##_##cb() { return = false; } \ ACCUMULATE bool mut##_##cb() -#define MUTATOR_HOOK(cb, func, order) MACRO_BEGIN { \ +void _mutPrintFail(string cb, string func) +{ + // this is inside a function to avoid expanding it on compilation everytime + LOG_INFO("HOOK FAILED: ", cb, ":", func); +} + +#define MUTATOR_HOOK(cb, func, order) MACRO_BEGIN \ MUTATOR_ONADD { \ if (!CallbackChain_Add(HOOK_##cb, CB_##func, order)) { \ - LOG_INFO("HOOK FAILED: ", #cb, ":", #func); \ + _mutPrintFail(#cb, #func); \ return true; \ } \ } \ MUTATOR_ONROLLBACK_OR_REMOVE { \ CallbackChain_Remove(HOOK_##cb, CB_##func); \ } \ -} MACRO_END +MACRO_END #include "events.qh"