From: Rudolf Polzer Date: Wed, 23 Feb 2011 19:57:40 +0000 (+0100) Subject: work around a fteqcc bug; fteqcc currently does not support "var functiontype array[N]" X-Git-Tag: xonotic-v0.5.0~311^2 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=a8f17a654113be7b43f1812c42156bdc9b335856;p=xonotic%2Fxonotic-data.pk3dir.git work around a fteqcc bug; fteqcc currently does not support "var functiontype array[N]" --- diff --git a/qcsrc/server/mutators/base.qc b/qcsrc/server/mutators/base.qc index 6f42ff8e9..697849680 100644 --- a/qcsrc/server/mutators/base.qc +++ b/qcsrc/server/mutators/base.qc @@ -88,16 +88,16 @@ float CallbackChain_Call(entity cb) } #define MAX_MUTATORS 8 -var mutatorfunc_t mutators[MAX_MUTATORS]; -float Mutator_Add(mutatorfunc_t func) +string loaded_mutators[MAX_MUTATORS]; +float Mutator_Add(mutatorfunc_t func, string name) { float i, j; j = -1; for(i = 0; i < MAX_MUTATORS; ++i) { - if(func == mutators[i]) + if(name == loaded_mutators[i]) return 1; // already added - if(func == func_null) + if(!loaded_mutators[i]) j = i; } if(j < 0) @@ -105,7 +105,7 @@ float Mutator_Add(mutatorfunc_t func) backtrace("WARNING: too many mutators, cannot add any more\n"); return 0; } - mutators[j] = func; + loaded_mutators[j] = name; if(func(MUTATOR_ADDING) == 0) { @@ -113,21 +113,21 @@ float Mutator_Add(mutatorfunc_t func) return 1; } backtrace("WARNING: when adding mutator: adding failed\n"); - Mutator_Remove(func); + Mutator_Remove(func, name); return 0; } -void Mutator_Remove(float(float) func) +void Mutator_Remove(float(float) func, string name) { float i; for(i = 0; i < MAX_MUTATORS; ++i) - if(func == mutators[i]) + if(name == loaded_mutators[i]) break; if(i >= MAX_MUTATORS) { backtrace("WARNING: removing not-added mutator\n"); return; } - mutators[i] = func_null; + loaded_mutators[i] = string_null; if(func(MUTATOR_REMOVING) != 0) { diff --git a/qcsrc/server/mutators/base.qh b/qcsrc/server/mutators/base.qh index f150d1ea9..05a5187e5 100644 --- a/qcsrc/server/mutators/base.qh +++ b/qcsrc/server/mutators/base.qh @@ -17,11 +17,11 @@ float CallbackChain_Call(entity cb); #define MUTATOR_REMOVING 0 #define MUTATOR_ADDING 1 typedef float(float) mutatorfunc_t; -float Mutator_Add(mutatorfunc_t func); -void Mutator_Remove(mutatorfunc_t func); // calls error() on fail +float Mutator_Add(mutatorfunc_t func, string name); +void Mutator_Remove(mutatorfunc_t func, string name); // calls error() on fail -#define MUTATOR_ADD(name) Mutator_Add(MUTATOR_##name) -#define MUTATOR_REMOVE(name) Mutator_Remove(MUTATOR_##name) +#define MUTATOR_ADD(name) Mutator_Add(MUTATOR_##name, #name) +#define MUTATOR_REMOVE(name) Mutator_Remove(MUTATOR_##name, #name) #define MUTATOR_DEFINITION(name) float MUTATOR_##name(float mode) #define MUTATOR_DECLARATION(name) float MUTATOR_##name(float mode) #define MUTATOR_HOOKFUNCTION(name) float HOOKFUNCTION_##name()