/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   game.c                                             :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: erey-bet <marvin@42.fr>                    +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2023/04/26 12:59:53 by erey-bet          #+#    #+#             */
/*   Updated: 2023/06/15 12:40:32 by erey-bet         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include "game.h"

static void	destroy(t_game *game)
{
	if (game->textures[0])
	{
		mlx_delete_texture(game->textures[0]);
		if (game->textures[1])
		{
			mlx_delete_texture(game->textures[1]);
			if (game->textures[2])
			{
				mlx_delete_texture(game->textures[2]);
				if (game->textures[3])
				{
					mlx_delete_texture(game->textures[3]);
					if (game->mlx)
						mlx_terminate(game->mlx);
				}
			}
		}
	}
}

static void	hook(void *param)
{
	t_game	*game;

	game = param;
	if (manage_keys(game))
		raycasting(game);
}

int	start_game(t_map	map)
{
	t_game	game;

	if (init(map, &game))
	{
		destroy(&game);
		return (1);
	}
	game.window = mlx_new_image(game.mlx, WIDTH, HEIGHT);
	if (!game.window)
	{
		mlx_terminate(game.mlx);
		destroy(&game);
		return (1);
	}
	if (mlx_image_to_window(game.mlx, game.window, 0, 0) == -1)
	{
		mlx_terminate(game.mlx);
		destroy(&game);
		return (1);
	}
	raycasting(&game);
	mlx_loop_hook(game.mlx, &hook, &game);
	mlx_loop(game.mlx);
	destroy(&game);
	return (0);
}
