Add example usage
This commit is contained in:
		
							
								
								
									
										155
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										155
									
								
								src/main.c
									
									
									
									
									
								
							| @@ -1,102 +1,103 @@ | ||||
| #include "event_system.h" | ||||
| #include <stdio.h> | ||||
|  | ||||
| #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); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user