101 lines
2.7 KiB
C
101 lines
2.7 KiB
C
/* ************************************************************************** */
|
|
/* */
|
|
/* ::: :::::::: */
|
|
/* so_long.c :+: :+: :+: */
|
|
/* +:+ +:+ +:+ */
|
|
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
|
/* +#+#+#+#+#+ +#+ */
|
|
/* Created: 2022/12/09 14:18:18 by erey-bet #+# #+# */
|
|
/* Updated: 2022/12/11 18:48:15 by erey-bet ### ########.fr */
|
|
/* */
|
|
/* ************************************************************************** */
|
|
|
|
#include "so_long.h"
|
|
#include <stdio.h>
|
|
|
|
void free_img(t_data *data)
|
|
{
|
|
mlx_destroy_image(data->mlx, data->mlx_img);
|
|
free(data->mlx_img);
|
|
}
|
|
|
|
int quit(t_data *data)
|
|
{
|
|
if (data->mlx_img != NULL)
|
|
free_img(data);
|
|
free(data->mlx_win);
|
|
free(data->mlx);
|
|
exit(0);
|
|
return (0);
|
|
}
|
|
|
|
int key_hook(int key, t_data *data)
|
|
{
|
|
if (key == K_ESC)
|
|
quit(data);
|
|
else if (key == K_LEFT)
|
|
data->x_player -= 128;
|
|
else if (key == K_RIGHT)
|
|
data->x_player += 128;
|
|
else if (key == K_UP)
|
|
data->y_player -= 128;
|
|
else if (key == K_DOWN)
|
|
data->y_player += 128;
|
|
data->update = 1;
|
|
return (0);
|
|
}
|
|
|
|
int render(t_data *data)
|
|
{
|
|
int x;
|
|
int y;
|
|
|
|
if (data->update == 1)
|
|
{
|
|
x = -1;
|
|
while (++x < (data->w_screen / 128))
|
|
{
|
|
y = -1;
|
|
while (++y < (data->h_screen / 128))
|
|
{
|
|
if (x * 128 != data->x_player || y * 128 != data->y_player)
|
|
{
|
|
data->mlx_img = mlx_xpm_file_to_image(data->mlx, "assets/background.xpm", &data->size, &data->size);
|
|
mlx_put_image_to_window(data->mlx, data->mlx_win, data->mlx_img, x * 128, y *128);
|
|
}
|
|
}
|
|
}
|
|
data->mlx_img = mlx_xpm_file_to_image(data->mlx, "assets/player.xpm", &data->size, &data->size);
|
|
mlx_put_image_to_window(data->mlx, data->mlx_win, data->mlx_img, data->x_player, data->y_player);
|
|
data->update = 0;
|
|
}
|
|
return (0);
|
|
}
|
|
|
|
void init_data(t_data *data)
|
|
{
|
|
data->update = 1;
|
|
data->size = 128;
|
|
data->x_player = 0;
|
|
data->y_player = 0;
|
|
data->h_screen = 768;
|
|
data->w_screen = 768;
|
|
data->mlx = mlx_init();
|
|
data->mlx_win = mlx_new_window(data->mlx, data->w_screen, data->h_screen, "lili meli");
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
t_data data;
|
|
|
|
(void)argc;
|
|
(void)argv;
|
|
map = get_map(argc, argv);
|
|
init_data(&data);
|
|
mlx_hook(data.mlx_win, 17, 0, quit, &data);
|
|
mlx_key_hook(data.mlx_win, key_hook, &data);
|
|
mlx_loop_hook(data.mlx, render, &data);
|
|
mlx_loop(data.mlx);
|
|
return (0);
|
|
}
|