/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* algo.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: grobledo +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/01 16:24:58 by grobledo #+# #+# */ /* Updated: 2024/10/22 15:48:47 by grobledo ### ########.fr */ /* */ /* ************************************************************************** */ #include "algo.h" #include "input.h" void *g_mlx = NULL; void *g_win = NULL; t_map g_map; t_player g_player; // t_tex g_tex; // TODO manage image format error better static void load_textures(t_tex *tex) { tex->tex_width = 64; tex->tex_height = 64; tex->textures[0] = mlx_xpm_file_to_image(g_mlx, "textures/north.xpm", &tex->tex_width, &tex->tex_height); tex->textures[1] = mlx_xpm_file_to_image(g_mlx, "textures/south.xpm", &tex->tex_width, &tex->tex_height); tex->textures[2]= mlx_xpm_file_to_image(g_mlx, "textures/east.xpm", &tex->tex_width, &tex->tex_height); tex->textures[3]= mlx_xpm_file_to_image(g_mlx, "textures/west.xpm", &tex->tex_width, &tex->tex_height); } void draw_screen() { int bpp; int size_line; int endian; void *img_ptr; u_int32_t *img_data; t_tex tex; load_textures(&tex); img_ptr = mlx_new_image(g_mlx, SCREEN_WIDTH, SCREEN_HEIGHT); img_data = (u_int32_t *) mlx_get_data_addr(img_ptr, &bpp, &size_line, &endian); if (bpp != 32 || endian != 0) { printf("image format error\n"); exit(1); } render(img_data, &tex); mlx_put_image_to_window(g_mlx, g_win, img_ptr, 0, 0); mlx_destroy_image(g_mlx, img_ptr); } static void loop(void) { move(); if (g_input_actions.quit) { mlx_destroy_window(g_mlx, g_win); exit(0); } draw_screen(); } static int loop_hook(void *param) { (void)param; timedloop(loop); return (0); } int main(int argc, char *argv[]) { g_mlx = mlx_init(); input_init(); if (argc != 2) { printf("Syntax: %s \n", argv[0]); return (1); } if (!map_from_file(&g_map, argv[1])) return (1); g_win = mlx_new_window(g_mlx, SCREEN_WIDTH, SCREEN_HEIGHT, "cub3d"); mlx_hook(g_win, KeyPress, KeyPressMask, keypress, NULL); mlx_hook(g_win, KeyRelease, KeyReleaseMask, keyrelease, NULL); mlx_loop_hook(g_mlx, loop_hook, NULL); draw_screen(); mlx_loop(g_mlx); return (0); }