X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fecs%2Flib.qh;h=192136b6253225e014490f4d4e100f2ddfca30e9;hb=c17b948d800cf6abf41f88c8d0acc07fb5d2079a;hp=2d48e577b8da2bf72b5ae3fa8cf19da46d8b89aa;hpb=3484e46389f34f6e869e8f98f9a0847b4001bba4;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/ecs/lib.qh b/qcsrc/ecs/lib.qh index 2d48e577b..192136b62 100644 --- a/qcsrc/ecs/lib.qh +++ b/qcsrc/ecs/lib.qh @@ -1,24 +1,29 @@ #pragma once +IntrusiveList g_events; +IntrusiveList g_components; +STATIC_INIT(components) { g_events = IL_NEW(); g_components = IL_NEW(); } + /** Components always interpolate from the previous state */ #define COMPONENT(com) \ void com_##com##_interpolate(entity it, float a); \ .bool com_##com -#define FOREACH_COMPONENT(com, body) FOREACH_ENTITY_FLOAT(com_##com, true, body) +#define FOREACH_COMPONENT(com, body) IL_EACH(g_components, it.com_##com, body) #define EVENT(T, args) .bool evt_##T##_listener; .void args evt_##T #define emit(T, ...) \ MACRO_BEGIN \ - FOREACH_ENTITY_FLOAT_ORDERED(evt_##T##_listener, true, it.evt_##T(__VA_ARGS__)); \ + IL_EACH(g_events, it.evt_##T##_listener, it.evt_##T(__VA_ARGS__)); \ MACRO_END #define subscribe(listener, T, fn) \ MACRO_BEGIN \ listener.evt_##T = (fn); \ listener.evt_##T##_listener = true; \ + IL_PUSH(g_events, listener); \ MACRO_END