summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/engine/engine.c22
-rw-r--r--src/main/engine/engine.h2
-rw-r--r--src/main/game/game.c4
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);