diff options
Diffstat (limited to 'sily_input.c')
-rw-r--r-- | sily_input.c | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/sily_input.c b/sily_input.c new file mode 100644 index 0000000..1afaa32 --- /dev/null +++ b/sily_input.c @@ -0,0 +1,84 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* sily_input.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: kdx <kdx @student.42angouleme.fr +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/10/07 07:32:30 by kdx #+# #+# */ +/* Updated: 2022/11/02 17:29:25 by kdx ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft/libft.h" +#include "sily.h" +#include "miscellany.h" +#include "game.h" +#include <X11/keysymdef.h> + +static void press_key(t_sily *sily, int k) +{ + if (sily->input_queue[k] == 0) + { + sily->input_queue[k] = 1; + sily->move_events += 1; + ft_printf("moves: %u\n", (unsigned)sily->move_events); + } +} + +void sily_input_update(t_sily *sily) +{ + int i; + + i = 0; + while (i < 4) + { + sily->input[i] = sily->input_queue[i]; + i++; + } +} + +int sily_input_press_ev(int key, t_sily *sily) +{ + if (key == XK_Escape) + sily->quit = 1; + else if (key == 119 || key == 107 || key == XK_Up) + press_key(sily, K_UP); + else if (key == 97 || key == 104 || key == XK_Left) + press_key(sily, K_LEFT); + else if (key == 115 || key == 106 || key == XK_Down) + press_key(sily, K_DOWN); + else if (key == 100 || key == 108 || key == XK_Right) + press_key(sily, K_RIGHT); + return (0); +} + +int sily_input_release_ev(int key, t_sily *sily) +{ + if (key == 119 || key == 107 || key == XK_Up) + sily->input_queue[K_UP] = 0; + else if (key == 97 || key == 104 || key == XK_Left) + sily->input_queue[K_LEFT] = 0; + else if (key == 115 || key == 106 || key == XK_Down) + sily->input_queue[K_DOWN] = 0; + else if (key == 100 || key == 108 || key == XK_Right) + sily->input_queue[K_RIGHT] = 0; + return (0); +} + +void sily_input_draw(t_sily *sily) +{ + char *str; + + str = ft_itoa(sily->prev_move_events); + if (str == NULL) + return ; + sily_erase_text(sily, str, 2, 10); + free(str); + str = ft_itoa(sily->move_events); + if (str == NULL) + return ; + sily_draw_text(sily, str, 2, 10); + free(str); + sily->prev_move_events = sily->move_events; +} |