Add example usage
This commit is contained in:
parent
e1fe7fa5f4
commit
e396c6608e
153
src/main.c
153
src/main.c
@ -1,102 +1,103 @@
|
|||||||
#include "event_system.h"
|
#include "event_system.h"
|
||||||
#include <stdio.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);
|
struct window_event {
|
||||||
void callback1(void *data);
|
int window_width;
|
||||||
void callback2(void *data);
|
int window_height;
|
||||||
void callback3(void *data);
|
};
|
||||||
void callback4(void *data);
|
|
||||||
void callback5(void *data);
|
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) {
|
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) {
|
EventSystem es = es_init(COUNT_EVENTS, 64);
|
||||||
Event ev = es_register_event(es);
|
|
||||||
printf("%lu\n", ev.id);
|
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) {
|
printf("FROM MAIN\n");
|
||||||
es_deregister_event(es, (Event){ .id = (i + 1) * 2 });
|
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);
|
es_deinit(&es);
|
||||||
printf("SYSTEM: %lu\n", es.id);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void callback(void *data) {
|
void window_event_handler(void *data) {
|
||||||
|
if (!data) {
|
||||||
return;
|
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) {
|
void keyboard_event_handler(void *data) {
|
||||||
printf("Hello from callback1\n");
|
if (!data) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
KeyboardEvent *ev = (KeyboardEvent *)data;
|
||||||
|
|
||||||
|
printf("FROM CALLBACK\n");
|
||||||
|
printf(" KEY: %d\n\n", ev->key);
|
||||||
}
|
}
|
||||||
|
|
||||||
void callback2(void *data) {
|
void mouse_event_handler(void *data) {
|
||||||
printf("Hello from callback2\n");
|
if (!data) {
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
void callback3(void *data) {
|
MouseEvent *ev = (MouseEvent *)data;
|
||||||
printf("Hello from callback3\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
void callback4(void *data) {
|
printf("FROM CALLBACK\n");
|
||||||
printf("Hello from callback4\n");
|
printf(" X: %d, Y: %d\n\n", ev->x, ev->y);
|
||||||
}
|
|
||||||
|
|
||||||
void callback5(void *data) {
|
|
||||||
printf("Hello from callback5\n");
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user