/* ************************************************************************** */ /* */ /* :::::::: */ /* render_line.c :+: :+: */ /* +:+ */ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/17 20:06:40 by qmennen #+# #+# */ /* Updated: 2025/05/07 11:36:57 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #include "render.h" static void line_low(t_screen *screen, t_vec2 start, t_vec2 end, unsigned int color) { int delta; int yi; t_vec2 cur; t_vec2 delta_point; delta_point.x = end.x - start.x; delta_point.y = abs((int) end.y - (int) start.y); yi = 1; if (end.y - start.y < 0) yi = -1; delta = 2 * delta_point.y - delta_point.x; cur = start; while (cur.x <= end.x) { if (render_check_bounds(screen, &cur)) mlx_put_pixel(screen->minimap, (int)cur.x, (int)cur.y, color); if (delta > 0) { cur.y += yi; delta -= 2 * delta_point.x; } delta += 2 * delta_point.y; cur.x++; } } static void line_high(t_screen *screen, t_vec2 start, t_vec2 end, unsigned int color) { int delta; int xi; t_vec2 cur; t_vec2 delta_point; delta_point.x = abs((int) end.x - (int) start.x); delta_point.y = end.y - start.y; xi = 1; if (end.x - start.x < 0) xi = -1; delta = 2 * delta_point.x - delta_point.y; cur = start; while (cur.y <= end.y) { if (render_check_bounds(screen, &cur)) mlx_put_pixel(screen->minimap, (int)cur.x, (int)cur.y, color); if (delta > 0) { cur.x += xi; delta -= 2 * delta_point.y; } delta += 2 * delta_point.x; cur.y++; } } void render_line(t_screen *screen, t_vec2 start, t_vec2 end, unsigned int color) { if ((start.x < 0 || start.x >= (int) screen->img->width || start.y < 0 || start.y >= (int) screen->img->height) && (end.x < 0 || end.x >= (int) screen->img->width || end.y < 0 || end.y >= (int) screen->img->height)) return ; if (abs((int) end.y - (int) start.y) < abs((int) end.x - (int) start.x)) { if (start.x > end.x) line_low(screen, end, start, color); else line_low(screen, start, end, color); } else { if (start.y > end.y) line_high(screen, end, start, color); else line_high(screen, start, end, color); } }