diff options
author | 2025-05-21 18:15:12 +0200 | |
---|---|---|
committer | 2025-05-21 18:15:12 +0200 | |
commit | 1855ae04c490270d9b255df7a082528b1e4922cf (patch) | |
tree | f13fa94859bc3c8719e2090ff3b9b2384ff43630 | |
parent | 0e8e745f88617fe5933eb7981198ac24cb7b1ee4 (diff) | |
download | tris-1855ae04c490270d9b255df7a082528b1e4922cf.tar.gz tris-1855ae04c490270d9b255df7a082528b1e4922cf.zip |
Add logic to get the game in mouse button pressed event
-rw-r--r-- | src/main/engine/engine.c | 22 | ||||
-rw-r--r-- | src/main/engine/engine.h | 2 | ||||
-rw-r--r-- | src/main/game/game.c | 4 |
3 files changed, 21 insertions, 7 deletions
diff --git a/src/main/engine/engine.c b/src/main/engine/engine.c index d8314c9..0a4d81d 100644 --- a/src/main/engine/engine.c +++ b/src/main/engine/engine.c @@ -58,7 +58,13 @@ static int frames; static time_t end; void (*dispatch_ui_event)(int); -void (*on_mouse_button_pressed)(float x, float y); + +typedef struct MouseButtonEvent { + void (*on_mouse_button_pressed)(float x, float y, void *data); + void *data; +} MouseButtonEvent; + +MouseButtonEvent *mouse_button_event; void engine_init(int w, int h) @@ -254,13 +260,21 @@ mouse_button_press_event(UIMouseButtonPressed *mbp) float oglX = engine->ortho_left + ((float) mbp->x / width) * (engine->ortho_right - engine->ortho_left); float oglY = engine->ortho_top - ((float) mbp->y / height) * (engine->ortho_top - engine->ortho_bottom); - on_mouse_button_pressed(oglX, oglY); + mouse_button_event->on_mouse_button_pressed(oglX, oglY, mouse_button_event->data); } void -engine_set_mouse_button_listener(void (*event)(float x, float y)) +engine_set_mouse_button_listener(void (*event)(float x, float y, void *data), void *data) { - on_mouse_button_pressed = event; + mouse_button_event = malloc(sizeof(MouseButtonEvent)); + if (mouse_button_event == NULL) { + log_error("Error allocating mouse button event"); + exit(EXIT_FAILURE); + } + + mouse_button_event->on_mouse_button_pressed = event; + mouse_button_event->data = data; + ui_set_mouse_press_listener(mouse_button_press_event); } diff --git a/src/main/engine/engine.h b/src/main/engine/engine.h index 624bc44..3c75d1a 100644 --- a/src/main/engine/engine.h +++ b/src/main/engine/engine.h @@ -29,6 +29,6 @@ void engine_draw_circle(float cx, float cy, float r, int num_segments, int outli void engine_draw_line(float x1, float y1, float x2, float y2); void engine_loop(void); void engine_input(void (*f_input)(int engine_input)); -void engine_set_mouse_button_listener(void (*event)(float x, float y)); +void engine_set_mouse_button_listener(void (*event)(float x, float y, void *data), void *data); #endif /* __ENGINE_H__ */ diff --git a/src/main/game/game.c b/src/main/game/game.c index 5ec3652..e1a193a 100644 --- a/src/main/game/game.c +++ b/src/main/game/game.c @@ -61,7 +61,7 @@ draw_sign(float x, float y) } static void -game_mouse_button_pressed(float x, float y) +game_mouse_button_pressed(float x, float y, void *data) { /* Click inside the field */ if (x >= xmin && x <= xmax && y >= ymin && y <= ymax) { @@ -117,7 +117,7 @@ game_init(int width, int height) engine_init(width, height); ui_set_title("Tris Game"); - engine_set_mouse_button_listener(game_mouse_button_pressed); + engine_set_mouse_button_listener(game_mouse_button_pressed, game); game_draw_field(game, 0.5, 0, 0); |