112 lines
2.8 KiB
C
112 lines
2.8 KiB
C
/* ************************************************************************** */
|
|
/* */
|
|
/* ::: :::::::: */
|
|
/* utils_3.c :+: :+: :+: */
|
|
/* +:+ +:+ +:+ */
|
|
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
|
/* +#+#+#+#+#+ +#+ */
|
|
/* Created: 2024/11/13 16:51:15 by lfirmin #+# #+# */
|
|
/* Updated: 2024/11/13 16:51:15 by lfirmin ### ########.fr */
|
|
/* */
|
|
/* ************************************************************************** */
|
|
#include "../include/so_long.h"
|
|
|
|
void draw_tile(t_game *game, char current, int x, int y)
|
|
{
|
|
mlx_put_image_to_window(game->mlx, game->win,
|
|
game->img_floor, x * 32, y * 32);
|
|
if (current == '1')
|
|
mlx_put_image_to_window(game->mlx, game->win,
|
|
game->img_wall, x * 32, y * 32);
|
|
else if (current == 'P')
|
|
mlx_put_image_to_window(game->mlx, game->win,
|
|
game->img_player, x * 32, y * 32);
|
|
else if (current == 'C')
|
|
mlx_put_image_to_window(game->mlx, game->win,
|
|
game->img_collect, x * 32, y * 32);
|
|
else if (current == 'E' && game->collectibles == 0)
|
|
mlx_put_image_to_window(game->mlx, game->win,
|
|
game->img_exit, x * 32, y * 32);
|
|
}
|
|
|
|
void draw_map(t_game *game)
|
|
{
|
|
int x;
|
|
int y;
|
|
char current;
|
|
|
|
y = 0;
|
|
while (y < game->map_height)
|
|
{
|
|
x = 0;
|
|
while (x < game->map_width)
|
|
{
|
|
current = game->map[y][x];
|
|
if (current != '\n')
|
|
draw_tile(game, current, x, y);
|
|
x++;
|
|
}
|
|
y++;
|
|
}
|
|
}
|
|
|
|
int check_player(t_game *game, int x, int y, int *found)
|
|
{
|
|
if (game->map[y][x] == 'P')
|
|
{
|
|
game->player_x = x;
|
|
game->player_y = y;
|
|
*found = 1;
|
|
}
|
|
return (0);
|
|
}
|
|
|
|
int find_player_pos(t_game *game)
|
|
{
|
|
int x;
|
|
int y;
|
|
int found;
|
|
|
|
if (!game || !game->map)
|
|
return (1);
|
|
y = 0;
|
|
found = 0;
|
|
while (y < game->map_height)
|
|
{
|
|
x = 0;
|
|
while (x < game->map_width)
|
|
{
|
|
check_player(game, x, y, &found);
|
|
x++;
|
|
}
|
|
y++;
|
|
}
|
|
if (!found)
|
|
return (ft_printf_fd(2, "Error: Player position not found\n"), 1);
|
|
return (0);
|
|
}
|
|
|
|
int key_hook(int keycode, t_game *game)
|
|
{
|
|
int new_x;
|
|
int new_y;
|
|
|
|
new_x = game->player_x;
|
|
new_y = game->player_y;
|
|
if (keycode == KEY_ESC)
|
|
close_game(game);
|
|
else if (keycode == KEY_W || keycode == KEY_UP)
|
|
new_y--;
|
|
else if (keycode == KEY_S || keycode == KEY_DOWN)
|
|
new_y++;
|
|
else if (keycode == KEY_A || keycode == KEY_LEFT)
|
|
new_x--;
|
|
else if (keycode == KEY_D || keycode == KEY_RIGHT)
|
|
new_x++;
|
|
else
|
|
return (0);
|
|
if (is_valid_move(game, new_x, new_y))
|
|
move_player(game, new_x, new_y);
|
|
return (0);
|
|
}
|