- added debouncing option

- added some gif for presentation
This commit is contained in:
asus
2024-01-19 20:09:21 +01:00
parent 60b4a82489
commit 211204e888
8 changed files with 40 additions and 15 deletions

View File

@@ -2,4 +2,4 @@
This is a 3D mini game, using raycasting, in imitation of Wolfenstein3D or Doom. This is a 3D mini game, using raycasting, in imitation of Wolfenstein3D or Doom.
![]() ![aller retour](assets/cube3d_aller_retour.gif)

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 MiB

BIN
assets/cube3d_tour_2.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

View File

@@ -30,4 +30,7 @@
# include "cube3d_proto.h" # include "cube3d_proto.h"
# include "get_next_line.h" # include "get_next_line.h"
# include <time.h> // for time
# include <sys/time.h> // for gettimeofday
#endif #endif

View File

@@ -18,7 +18,7 @@
*/ */
/* nbr pixel player move */ /* nbr pixel player move */
# define PLR_MV 4 # define PLR_MV 10
/* degree of rotation of the player per press */ /* degree of rotation of the player per press */
# define PLR_ROT 1 # define PLR_ROT 1
/* nbr key you can press at the same time */ /* nbr key you can press at the same time */
@@ -33,10 +33,9 @@
# define SCREEN_FOCAL 70 # define SCREEN_FOCAL 70
/* size of a cell on the map */ /* size of a cell on the map */
# define CELL 100 # define CELL 100
// minimum time in milliseconds between two keypress
# define DEBOUNCE_TIME 500
/*
* keys macro
*/
/* /*
* keys macro * keys macro

View File

@@ -162,15 +162,16 @@ typedef struct s_plr
typedef struct s_game typedef struct s_game
{ {
void *mlx_ptr; void *mlx_ptr;
t_win win; t_win win;
t_img img; t_img img;
t_plr plr; t_plr plr;
t_rcast rcast; t_rcast rcast;
t_txt txt; t_txt txt;
t_map map; t_map map;
int fd; int fd;
int k_hook[MAX_NB_KEY]; int k_hook[MAX_NB_KEY];
struct timeval last_keypress_time;
} t_game; } t_game;
#endif #endif

View File

@@ -21,9 +21,31 @@ static int print_keycode(int keycode, t_plr *plr)
return (0); return (0);
} }
int should_ignore_keypress(const struct timeval *current_time, t_game *game)
{
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 = (game->last_keypress_time.tv_sec % 1000) * 1000 + game->last_keypress_time.tv_usec / 1000;
is_less = (current_milliseconds - last_milliseconds) < DEBOUNCE_TIME;
if (!is_less)
game->last_keypress_time = *current_time;
return is_less;
}
int hook_action(t_game *game) int hook_action(t_game *game)
{ {
int is_action; int is_action;
struct timeval current_time;
gettimeofday(&current_time, NULL);
if (should_ignore_keypress(&current_time, game))
return (0);
is_action = 0; is_action = 0;
if (is_esc(game->k_hook, &is_action)) if (is_esc(game->k_hook, &is_action))

View File

@@ -66,7 +66,7 @@ void init_game(t_game *game)
game->win.size_x = SCREEN_WIDTH; game->win.size_x = SCREEN_WIDTH;
game->win.size_y = SCREEN_HEIGHT; game->win.size_y = SCREEN_HEIGHT;
game->win.ptr = mlx_new_window(game->mlx_ptr, game->win.size_x, \ game->win.ptr = mlx_new_window(game->mlx_ptr, game->win.size_x, \
game->win.size_y, "cub3d"); game->win.size_y, "cube3d");
init_img(&(game->img), game->mlx_ptr, &game->win); init_img(&(game->img), game->mlx_ptr, &game->win);
init_txtr(&game->txt, game->mlx_ptr); init_txtr(&game->txt, game->mlx_ptr);
ft_bzero(&game->k_hook, sizeof(game->k_hook)); ft_bzero(&game->k_hook, sizeof(game->k_hook));