#ifndef GAMEITEM_H #define GAMEITEM_H #include "../oo.qh" #define ITEM_HANDLE(signal, ...) __Item_Send_##signal(__VA_ARGS__) CLASS(GameItem, Object) ATTRIB(GameItem, m_id, int, 0) METHOD(GameItem, show, void(entity this)) void GameItem_show(entity this) { print("A game item\n"); } void ITEM_HANDLE(Show, entity this) { this.show(this); } ENDCLASS(GameItem) int ITEM_COUNT; #define REGISTER_ITEM(id, class, body) \ entity ITEM_##id; \ void RegisterItems_##id() { \ const entity this = NEW(class); \ ITEM_##id = this; \ this.m_id = ITEM_COUNT; \ ITEMS[ITEM_COUNT++] = this; \ body \ } \ ACCUMULATE_FUNCTION(RegisterItems, RegisterItems_##id) #endif