#ifndef COMMON_MUTATORS_EVENTS_H #define COMMON_MUTATORS_EVENTS_H #define EV_NO_ARGS(i, o) #pragma noref 1 string ret_string; #define MUTATOR_TYPES(_, x) \ _(x, bool) \ _(x, int) \ _(x, entity) \ _(x, float) \ _(x, vector) \ _(x, string) \ /**/ #define MUTATOR_ARGV(x, type) MUTATOR_ARGV_##x##_##type #define MUTATOR_NEWGLOBAL(x, type) type MUTATOR_ARGV(x, type); MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 0) MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 1) MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 2) #undef MUTATOR_TYPES #undef MUTATOR_NEWGLOBAL #pragma noref 0 /** appends ":mutatorname" to ret_string for logging */ #define EV_BuildMutatorsString(i, o) \ /**/ i(string, ret_string) \ /**/ o(string, ret_string) \ /**/ MUTATOR_HOOKABLE(BuildMutatorsString, EV_BuildMutatorsString); /** appends ", Mutator name" to ret_string for display */ #define EV_BuildMutatorsPrettyString(i, o) \ /**/ i(string, ret_string) \ /**/ o(string, ret_string) \ /**/ MUTATOR_HOOKABLE(BuildMutatorsPrettyString, EV_BuildMutatorsPrettyString); /** appends mutator string for displaying extra gameplay tips */ #define EV_BuildGameplayTipsString(i, o) \ /**/ i(string, ret_string) \ /**/ o(string, ret_string) \ /**/ MUTATOR_HOOKABLE(BuildGameplayTipsString, EV_BuildGameplayTipsString); #define EV_IsFlying(i, o) \ /**/ i(entity, MUTATOR_ARGV_0_entity) \ /**/ MUTATOR_HOOKABLE(IsFlying, EV_IsFlying); #define EV_WP_Format(i, o) \ /**/ i(entity, MUTATOR_ARGV_0_entity) \ /**/ i(string, MUTATOR_ARGV_0_string) \ /**/ o(vector, MUTATOR_ARGV_0_vector) \ /**/ o(string, MUTATOR_ARGV_0_string) \ /**/ MUTATOR_HOOKABLE(WP_Format, EV_WP_Format); #endif