From e396c6608e63a909e73deced098a3c562bc9df92 Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Wed, 1 Jan 2025 20:04:15 +0000 Subject: [PATCH] Add example usage --- src/main.c | 155 +++++++++++++++++++++++++++-------------------------- 1 file changed, 78 insertions(+), 77 deletions(-) diff --git a/src/main.c b/src/main.c index a98f6c8..13b813f 100644 --- a/src/main.c +++ b/src/main.c @@ -1,102 +1,103 @@ #include "event_system.h" #include -#define ARR_LEN(ARR) (sizeof(ARR) / sizeof(ARR[0])) +typedef struct window_event WindowEvent; +typedef struct keyboard_event KeyboardEvent; +typedef struct mouse_event MouseEvent; -void callback(void *data); -void callback1(void *data); -void callback2(void *data); -void callback3(void *data); -void callback4(void *data); -void callback5(void *data); +struct window_event { + int window_width; + int window_height; +}; + +struct keyboard_event { + int key; +}; + +struct mouse_event { + int x; + int y; +}; + +enum event_ids { + EVENT_WINDOW, + EVENT_KEYBOARD, + EVENT_MOUSE, + + COUNT_EVENTS, +}; + +void window_event_handler(void *data); +void keyboard_event_handler(void *data); +void mouse_event_handler(void *data); int main(void) { - EventSystem es = es_init(16, 64); + Event events [COUNT_EVENTS] = {0}; + EventListener listeners[COUNT_EVENTS] = {0}; + EventCallback callbacks[COUNT_EVENTS] = {window_event_handler, keyboard_event_handler, mouse_event_handler}; - for (int i = 0; i < 40; ++i) { - Event ev = es_register_event(es); - printf("%lu\n", ev.id); + EventSystem es = es_init(COUNT_EVENTS, 64); + + for (int i = 0; i < COUNT_EVENTS; ++i) { + events[i] = es_register_event(es); + listeners[i] = es_add_event_listener(es, events[i], callbacks[i]); } - printf("\n"); + WindowEvent window_event = { .window_width = 1280, .window_height = 720 }; + KeyboardEvent keyboard_event = { .key = 120 }; + MouseEvent mouse_event = { .x = 628, .y = 154 }; - unsigned int count = 6; + printf("FROM MAIN\n"); + printf(" WIDTH: %d, HEIGHT: %d\n", window_event.window_width, window_event.window_height); + es_emit_event(es, events[EVENT_WINDOW], (void *)&window_event); - for (int i = 0; i < count; ++i) { - es_deregister_event(es, (Event){ .id = (i + 1) * 2 }); + printf("FROM MAIN\n"); + printf(" KEY: %d\n", keyboard_event.key); + es_emit_event(es, events[EVENT_KEYBOARD], (void *)&keyboard_event); + + printf("FROM MAIN\n"); + printf(" X: %d, Y: %d\n", mouse_event.x, mouse_event.y); + es_emit_event(es, events[EVENT_MOUSE], (void *)&mouse_event); + + for (int i = 0; i < COUNT_EVENTS; ++i) { + es_remove_event_listener(es, listeners[i]); + es_deregister_event(es, events[i]); } - for (int i = 0; i < count; ++i) { - Event ev = es_register_event(es); - printf("%lu\n", ev.id); - } - - printf("\n"); - - es_deregister_event(es, (Event){ .id = 10 }); - Event ev = es_register_event(es); - for (int i = 0; i < 10; ++i) { - EventListener listener = es_add_event_listener(es, ev, callback); - printf("Event: %lu, ID: %lu\n", listener.event.id, listener.id); - } - - printf("\n"); - - for (int i = 5; i < 8; ++i) { - es_remove_event_listener(es, (EventListener){ .event = ev, .id = i }); - } - - for (int i = 0; i < 3; ++i) { - EventListener listener = es_add_event_listener(es, ev, callback); - printf("Event: %lu, ID: %lu\n", listener.event.id, listener.id); - } - - printf("\n"); - - EventCallback callbacks[] = {callback1, callback2, callback3, callback4, callback5}; - EventListener listeners[ARR_LEN(callbacks)] = {0}; - Event ev_with_callbacks = (Event){ .id = 20 }; - for (int i = 0; i < ARR_LEN(callbacks); ++i) { - listeners[i] = es_add_event_listener(es, ev_with_callbacks, callbacks[i]); - } - - es_emit_event(es, ev_with_callbacks, (void *)0); - - printf("\n"); - - es_remove_event_listener(es, listeners[2]); - - es_emit_event(es, ev_with_callbacks, (void *)0); - - printf("\n"); - - printf("SYSTEM: %lu\n", es.id); es_deinit(&es); - printf("SYSTEM: %lu\n", es.id); return 0; } -void callback(void *data) { - return; +void window_event_handler(void *data) { + if (!data) { + return; + } + + WindowEvent *ev = (WindowEvent *)data; + + printf("FROM CALLBACK\n"); + printf(" WIDTH: %d, HEIGHT: %d\n\n", ev->window_width, ev->window_height); } -void callback1(void *data) { - printf("Hello from callback1\n"); +void keyboard_event_handler(void *data) { + if (!data) { + return; + } + + KeyboardEvent *ev = (KeyboardEvent *)data; + + printf("FROM CALLBACK\n"); + printf(" KEY: %d\n\n", ev->key); } -void callback2(void *data) { - printf("Hello from callback2\n"); -} +void mouse_event_handler(void *data) { + if (!data) { + return; + } -void callback3(void *data) { - printf("Hello from callback3\n"); -} + MouseEvent *ev = (MouseEvent *)data; -void callback4(void *data) { - printf("Hello from callback4\n"); -} - -void callback5(void *data) { - printf("Hello from callback5\n"); + printf("FROM CALLBACK\n"); + printf(" X: %d, Y: %d\n\n", ev->x, ev->y); }