bsq

/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   boxer.c                                            :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: rmckinno <[email protected]>                    +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2020/01/29 01:48:47 by rmckinno          #+#    #+#             */
/*   Updated: 2020/01/29 23:34:04 by rmckinno         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include "../lib/ft_bsq.h"

int		verify_square(int **hm, int y, int x, int max)
{
	int side;
	int cy;
	int cx;

	cy = y;
	cx = x;
	if (y < 0 || x < 0 || hm[y][x] < max)
		return (0);
	side = hm[y][x];
	while (cy > (y - side))
	{
		while (cx > (x - side))
		{
			if (hm[cy][cx] == 0)
			{
				hm[y][x]--;
				return (verify_square(hm, y, x, max));
			}
			cx--;
		}
		cx = x;
		cy--;
	}
	return (1);
}

void	draw_to_map(t_map *m, int y, int x, int s)
{
	int cy;
	int cx;

	cy = y;
	cx = x;
	while (cy > (y - s))
	{
		while (cx > (x - s))
		{
			m->map[cy][cx] = m->full;
			cx--;
		}
		cx = x;
		cy--;
	}
}

void	find_from_corner(t_map *m, int **hm)
{
	int max;
	int y;
	int x;
	int my;
	int mx;

	max = 0;
	y = m->lines;
	x = m->length;
	while (--y >= 0)
	{
		while (--x >= 0)
		{
			if (verify_square(hm, y, x, max))
			{
				max = hm[y][x];
				my = y;
				mx = x;
			}
		}
		x = m->length;
	}
	draw_to_map(m, my, mx, max);
}

void	solve_map(t_map *m)
{
	int **heat_map;

	heat_map = make_heat_map(m);
	find_from_corner(m, heat_map);
}