added debounce time
This commit is contained in:
Binary file not shown.
BIN
builds/fdf.o
BIN
builds/fdf.o
Binary file not shown.
Binary file not shown.
BIN
builds/modifs.o
BIN
builds/modifs.o
Binary file not shown.
BIN
builds/parse.o
BIN
builds/parse.o
Binary file not shown.
@@ -3,39 +3,42 @@
|
|||||||
|
|
||||||
# include "../libft/includes/libft.h"
|
# include "../libft/includes/libft.h"
|
||||||
# include <mlx.h>
|
# include <mlx.h>
|
||||||
# include <math.h> // for M_PI
|
# include <math.h> // for M_PI
|
||||||
# include <fcntl.h> // for open
|
# include <fcntl.h> // for open
|
||||||
|
# include <time.h> // for time
|
||||||
|
# include <sys/time.h> // for gettimeofday
|
||||||
|
|
||||||
typedef struct s_fdf
|
typedef struct s_fdf
|
||||||
{
|
{
|
||||||
void *mlx_ptr;
|
void *mlx_ptr;
|
||||||
void *win_ptr;
|
void *win_ptr;
|
||||||
void *img_ptr;
|
void *img_ptr;
|
||||||
char *img_addr;
|
char *img_addr;
|
||||||
int **map;
|
int **map;
|
||||||
int offset;
|
int offset;
|
||||||
int min_z;
|
int min_z;
|
||||||
int max_z;
|
int max_z;
|
||||||
int z_amplitude;
|
int z_amplitude;
|
||||||
int altitude;
|
int altitude;
|
||||||
int win_size_x;
|
int win_size_x;
|
||||||
int win_size_y;
|
int win_size_y;
|
||||||
int img_size_x;
|
int img_size_x;
|
||||||
int img_size_y;
|
int img_size_y;
|
||||||
int map_size_x;
|
int map_size_x;
|
||||||
int map_size_y;
|
int map_size_y;
|
||||||
int map_width;
|
int map_width;
|
||||||
int map_height;
|
int map_height;
|
||||||
int rot_x;
|
int rot_x;
|
||||||
int rot_y;
|
int rot_y;
|
||||||
double rad_x;
|
double rad_x;
|
||||||
double rad_y;
|
double rad_y;
|
||||||
int mov_x;
|
int mov_x;
|
||||||
int mov_y;
|
int mov_y;
|
||||||
double zoom;
|
double zoom;
|
||||||
int img_bpp;
|
int img_bpp;
|
||||||
int img_sizel;
|
int img_sizel;
|
||||||
int img_endian;
|
int img_endian;
|
||||||
|
struct timeval last_keypress_time;
|
||||||
} t_fdf;
|
} t_fdf;
|
||||||
|
|
||||||
// fdf.c
|
// fdf.c
|
||||||
@@ -71,16 +74,17 @@ int **parse_map(t_fdf *fdf, int fd);
|
|||||||
// steps size for the hight transform with p and o
|
// steps size for the hight transform with p and o
|
||||||
// must be > 0
|
// must be > 0
|
||||||
// 100 is small, 1 is the biggest
|
// 100 is small, 1 is the biggest
|
||||||
# define Z_HEIGHT 10
|
# define Z_HEIGHT 50
|
||||||
|
|
||||||
// color for altitude
|
// color for altitude
|
||||||
# define COLOR_START 0xffffff
|
# define COLOR_START 0xffffff
|
||||||
# define COLOR_END 0x00d700
|
/*
|
||||||
// R,G,B colors
|
# define COLOR_END 0x1423e6 // blue
|
||||||
// ex for col = 0x236ad0
|
*/
|
||||||
# define COLOR_R(col) ((col & 0xff0000) >> 16) // output 23
|
# define COLOR_END 0x00d700 // green
|
||||||
# define COLOR_G(col) ((col & 0x00ff00) >> 8) // output 6a
|
|
||||||
# define COLOR_B(col) (col & 0x0000ff) // output d0
|
// minimum time in milliseconds between two keypress
|
||||||
|
# define DEBOUNCE_TIME 60
|
||||||
|
|
||||||
# define ESCAPE 65307
|
# define ESCAPE 65307
|
||||||
# define UP 65362
|
# define UP 65362
|
||||||
|
|||||||
@@ -53,6 +53,8 @@ void init_offset(t_fdf *fdf)
|
|||||||
|
|
||||||
void init_fdf(t_fdf *fdf)
|
void init_fdf(t_fdf *fdf)
|
||||||
{
|
{
|
||||||
|
struct timeval current_time;
|
||||||
|
|
||||||
fdf->win_size_x = 700;
|
fdf->win_size_x = 700;
|
||||||
fdf->win_size_y = 700;
|
fdf->win_size_y = 700;
|
||||||
fdf->img_size_x = fdf->win_size_x;
|
fdf->img_size_x = fdf->win_size_x;
|
||||||
@@ -71,6 +73,8 @@ void init_fdf(t_fdf *fdf)
|
|||||||
fdf->mov_x = (fdf->win_size_x - fdf->map_size_x) / 2;
|
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->mov_y = (fdf->win_size_y - fdf->map_size_y) / 2;
|
||||||
fdf->zoom = 0;
|
fdf->zoom = 0;
|
||||||
|
gettimeofday(¤t_time, NULL);
|
||||||
|
fdf->last_keypress_time = current_time;
|
||||||
init_server(fdf);
|
init_server(fdf);
|
||||||
draw_image(fdf);
|
draw_image(fdf);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,36 @@ void keypress_more(int keycode, t_fdf *fdf)
|
|||||||
fdf->altitude--;
|
fdf->altitude--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
** Q -> move left
|
||||||
** D -> move right
|
** D -> move right
|
||||||
@@ -44,6 +74,11 @@ void keypress_more(int keycode, t_fdf *fdf)
|
|||||||
*/
|
*/
|
||||||
int keypress(int keycode, t_fdf *fdf)
|
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)
|
if (keycode == ESCAPE)
|
||||||
shut_down(fdf);
|
shut_down(fdf);
|
||||||
else if (keycode == LEFT)
|
else if (keycode == LEFT)
|
||||||
|
|||||||
Reference in New Issue
Block a user