multi key action
This commit is contained in:
@@ -24,9 +24,18 @@ void init_parsing(int ac, char **av, t_game *game);
|
|||||||
|
|
||||||
// key_hook.c
|
// key_hook.c
|
||||||
int keypress(int keycode, t_game *game);
|
int keypress(int keycode, t_game *game);
|
||||||
|
int keyrelease(int keycode, t_game *game);
|
||||||
|
|
||||||
// key_do_action.c
|
// key_do_action.c
|
||||||
int shut_down(t_game *game);
|
int shut_down(t_game *game);
|
||||||
|
void keypress_do_action(t_game *game);
|
||||||
|
|
||||||
|
// key_is_action_1.c
|
||||||
|
int is_esc(int *k_hook);
|
||||||
|
int is_go_left(int *k_hook);
|
||||||
|
int is_go_right(int *k_hook);
|
||||||
|
int is_go_forward(int *k_hook);
|
||||||
|
int is_go_backward(int *k_hook);
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ int main(int ac, char **av)
|
|||||||
|
|
||||||
// receive a keypress event
|
// receive a keypress event
|
||||||
mlx_hook(game->win_ptr, 2, 1L << 0, keypress, game);
|
mlx_hook(game->win_ptr, 2, 1L << 0, keypress, game);
|
||||||
|
// receive a keyprelease event
|
||||||
|
mlx_hook(game->win_ptr, 3, 1L << 1, keyrelease, game);
|
||||||
// receive event when clicking the red button to close the window
|
// receive event when clicking the red button to close the window
|
||||||
mlx_hook(game->win_ptr, 17, 1L << 17, shut_down, game);
|
mlx_hook(game->win_ptr, 17, 1L << 17, shut_down, game);
|
||||||
// infinite loop that waits for events to occurs
|
// infinite loop that waits for events to occurs
|
||||||
|
|||||||
@@ -7,3 +7,21 @@ int shut_down(t_game *game)
|
|||||||
free(game);
|
free(game);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// temp, to test keypress hook
|
||||||
|
void keypress_do_action(t_game *game)
|
||||||
|
{
|
||||||
|
if (is_esc(game->k_hook))
|
||||||
|
shut_down(game);
|
||||||
|
if (is_go_left(game->k_hook))
|
||||||
|
(game->plr_x) -= 5;
|
||||||
|
if (is_go_right(game->k_hook))
|
||||||
|
(game->plr_x) += 5;
|
||||||
|
if (is_go_forward(game->k_hook))
|
||||||
|
(game->plr_y) -= 5;
|
||||||
|
if (is_go_backward(game->k_hook))
|
||||||
|
(game->plr_y) += 5;
|
||||||
|
mlx_pixel_put(game->mlx_ptr, game->win_ptr, game->plr_x, game->plr_y, 0x74db74);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,31 +8,70 @@
|
|||||||
}
|
}
|
||||||
// temp end
|
// temp end
|
||||||
|
|
||||||
static void keypress_action(int keycode, t_game *game)
|
|
||||||
{
|
|
||||||
// escape
|
|
||||||
if (keycode == 65307)
|
|
||||||
shut_down(game);
|
|
||||||
// left
|
|
||||||
if (keycode == 65361)
|
|
||||||
(game->plr_x) -= 5;
|
|
||||||
// right
|
|
||||||
if (keycode == 65363)
|
|
||||||
(game->plr_x) += 5;
|
|
||||||
// up
|
|
||||||
if (keycode == 65362)
|
|
||||||
(game->plr_y) -= 5;
|
|
||||||
// down
|
|
||||||
if (keycode == 65364)
|
|
||||||
(game->plr_y) += 5;
|
|
||||||
mlx_pixel_put(game->mlx_ptr, game->win_ptr, game->plr_x, game->plr_y, 0x74db74);
|
|
||||||
}
|
|
||||||
|
|
||||||
int keypress(int keycode, t_game *game)
|
int keypress(int keycode, t_game *game)
|
||||||
{
|
{
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
// temp
|
// temp
|
||||||
print_keycode(keycode);
|
print_keycode(keycode);
|
||||||
|
|
||||||
keypress_action(keycode, game);
|
i = 0;
|
||||||
|
while (i < MAX_NB_KEY && game->k_hook[i] != 0 && game->k_hook[i] != keycode)
|
||||||
|
i++;
|
||||||
|
if (game->k_hook[i] == keycode && i < MAX_NB_KEY)
|
||||||
|
game->k_hook[i] = 0;
|
||||||
|
else if (i < MAX_NB_KEY)
|
||||||
|
game->k_hook[i] = keycode;
|
||||||
|
|
||||||
|
keypress_do_action(game);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int keyrelease(int keycode, t_game *game)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (i < MAX_NB_KEY && game->k_hook[i] != keycode)
|
||||||
|
i++;
|
||||||
|
if (i < MAX_NB_KEY)
|
||||||
|
game->k_hook[i] = 0;
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* first version, cannot combine key hook
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* static void keypress_action(int keycode, t_game *game)
|
||||||
|
* {
|
||||||
|
* // escape
|
||||||
|
* if (keycode == 65307)
|
||||||
|
* shut_down(game);
|
||||||
|
* // left
|
||||||
|
* if (keycode == 65361)
|
||||||
|
* (game->plr_x) -= 5;
|
||||||
|
* // right
|
||||||
|
* if (keycode == 65363)
|
||||||
|
* (game->plr_x) += 5;
|
||||||
|
* // up
|
||||||
|
* if (keycode == 65362)
|
||||||
|
* (game->plr_y) -= 5;
|
||||||
|
* // down
|
||||||
|
* if (keycode == 65364)
|
||||||
|
* (game->plr_y) += 5;
|
||||||
|
* mlx_pixel_put(game->mlx_ptr, game->win_ptr, game->plr_x, game->plr_y, 0x74db74);
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* int keypress(int keycode, t_game *game)
|
||||||
|
* {
|
||||||
|
* // temp
|
||||||
|
* print_keycode(keycode);
|
||||||
|
*
|
||||||
|
* keypress_action(keycode, game);
|
||||||
|
* return (0);
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user