From 14ffe0479dc33cb5ed96f85535f84fa91d56c48b Mon Sep 17 00:00:00 2001 From: Dominik Kaiser Date: Thu, 9 May 2024 17:49:54 +0200 Subject: [PATCH] Add input to direction handling --- include/so_long.h | 42 +++++++++++++++++++++++++++++++++--------- src/init.c | 29 +++++++++++++++++++++-------- src/input.c | 39 +++++++++++++++++++++++++++++++++++++++ src/loop.c | 21 ++++++++++++++++++++- 4 files changed, 113 insertions(+), 18 deletions(-) create mode 100644 src/input.c diff --git a/include/so_long.h b/include/so_long.h index 98b4711..11d9084 100644 --- a/include/so_long.h +++ b/include/so_long.h @@ -6,7 +6,7 @@ /* By: dkaiser mlx, loop, game); - /* mlx_key_hook(game->mlx, on_key_down, game); */ - mlx_hook(game->window, 2, 0, on_key_down, game); - mlx_hook(game->window, 3, 0, on_key_up, game); -} +static void init_hooks(t_game *game); +static void init_player(t_player *player, int x, int y); int init(t_game *game) { game->mlx = mlx_init(); game->window = mlx_new_window(game->mlx, 1920, 1080, "so_long"); // TODO: make size and title dynamic + game->input_direction = ZERO; init_hooks(game); + init_player(&game->player, 960, 540); + // TODO: make player spawn point dynamic return (0); } + +static void init_hooks(t_game *game) +{ + mlx_loop_hook(game->mlx, loop, game); + mlx_hook(game->window, 2, 0, on_key_down, game); + mlx_hook(game->window, 3, 0, on_key_up, game); +} + +static void init_player(t_player *player, int x, int y) +{ + player->position.x = x; + player->position.y = y; + player->velocity.x = 0; + player->velocity.y = 0; +} diff --git a/src/input.c b/src/input.c new file mode 100644 index 0000000..2fcdc4e --- /dev/null +++ b/src/input.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* input.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser input_direction |= UP; + else if (keycode == 0) + game->input_direction |= LEFT; + else if (keycode == 1) + game->input_direction |= DOWN; + else if (keycode == 2) + game->input_direction |= RIGHT; + return (0); +} + +int on_key_up(int keycode, t_game *game) +{ + if (keycode == 13) + game->input_direction &= ~UP; + else if (keycode == 0) + game->input_direction &= ~LEFT; + else if (keycode == 1) + game->input_direction &= ~DOWN; + else if (keycode == 2) + game->input_direction &= ~RIGHT; + return (0); +} diff --git a/src/loop.c b/src/loop.c index 506dad1..a55360b 100644 --- a/src/loop.c +++ b/src/loop.c @@ -6,13 +6,32 @@ /* By: dkaiser mlx, game->window); + if (game->input_direction & UP) + mlx_string_put(game->mlx, game->window, 150, 100, 0x00FFFFFF, "^"); + if (game->input_direction & DOWN) + mlx_string_put(game->mlx, game->window, 150, 200, 0x00FFFFFF, "v"); + if (game->input_direction & LEFT) + mlx_string_put(game->mlx, game->window, 100, 150, 0x00FFFFFF, "<"); + if (game->input_direction & RIGHT) + mlx_string_put(game->mlx, game->window, 200, 150, 0x00FFFFFF, ">"); + game->player.direction.x = ((game->input_direction & RIGHT) != 0) + - ((game->input_direction & LEFT) != 0); + game->player.direction.y = ((game->input_direction & DOWN) != 0) + - ((game->input_direction & UP) != 0); + mlx_string_put(game->mlx, game->window, 500, 500, 0x00FFFFFF, + ft_itoa(game->player.direction.x)); + mlx_string_put(game->mlx, game->window, 550, 500, 0x00FFFFFF, + ft_itoa(game->player.direction.y)); return (0); } -- 2.47.2