#include "fdf.h" /* ** U -> up wiew ** I -> isometric original view ** O -> increase altitude ** P -> decrease altitude ** F -> fit to window ** C -> center */ void keypress_more(int keycode, t_fdf *fdf) { if (keycode == A) fdf->zoom += 1; else if (keycode == W) fdf->zoom -= 1; else if (keycode == U) { fdf->rot_x = 0; fdf->rot_y = 0; } else if (keycode == I) { fdf->rot_x = -45; fdf->rot_y = -35; fdf->mov_x = (fdf->win_size_x - fdf->map_size_x) / 2; fdf->mov_y = (fdf->win_size_y - fdf->map_size_y) / 2; fdf->zoom = 0; } else if (keycode == O) fdf->altitude += Z_HEIGHT_UP; else if (keycode == P) fdf->altitude -= Z_HEIGHT_DOWN; } int should_ignore_keypress(const struct timeval *current_time, t_fdf *fdf) { int is_less; unsigned long current_milliseconds; unsigned long last_milliseconds; current_milliseconds = (current_time->tv_sec % 1000) * 1000 + current_time->tv_usec / 1000; last_milliseconds = (fdf->last_keypress_time.tv_sec % 1000) * 1000 + fdf->last_keypress_time.tv_usec / 1000; is_less = (current_milliseconds - last_milliseconds) < DEBOUNCE_TIME; /* [1 705 151 587 ,905 277,49579540-1000000] 1 705 151 587 000 1 705 151 587 905 1 705 151 587 % 1000 = 587 587 * 1000 + 905 277 / 1000 = 587 000 + 905 = 587905 [836 763,836 066] ft_putchar('['); ft_putnbr(current_milliseconds); ft_putchar(','); ft_putnbr(last_milliseconds); ft_putchar(']'); */ if (!is_less) fdf->last_keypress_time = *current_time; return is_less; } /* ** Q -> move left ** D -> move right ** Z -> move up ** S -> move down ** A -> zoom ** W -> unzoom */ int keypress(int keycode, t_fdf *fdf) { struct timeval current_time; gettimeofday(¤t_time, NULL); if (should_ignore_keypress(¤t_time, fdf)) return (0); if (keycode == ESCAPE) shut_down(fdf); else if (keycode == LEFT) fdf->rot_x += 1; else if (keycode == RIGHT) fdf->rot_x -= 1; else if (keycode == UP) fdf->rot_y += 1; else if (keycode == DOWN) fdf->rot_y -= 1; else if (keycode == Q) fdf->mov_x -= MOVE; else if (keycode == D) fdf->mov_x += MOVE; else if (keycode == Z) fdf->mov_y -= MOVE; else if (keycode == S) fdf->mov_y += MOVE; else keypress_more(keycode, fdf); draw_image(fdf); return (0); }