render player and angle
This commit is contained in:
parent
061d583b3f
commit
2ebf2a6e12
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */
|
||||
/* Updated: 2025/04/15 18:55:25 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/04/17 17:59:23 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -21,6 +21,7 @@
|
||||
# include "game.h"
|
||||
# include "screen.h"
|
||||
# include "keyhandle.h"
|
||||
# include "line.h"
|
||||
# include "render.h"
|
||||
# include "player.h"
|
||||
|
||||
|
||||
20
inc/line.h
Normal file
20
inc/line.h
Normal file
@ -0,0 +1,20 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* line.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/17 17:49:09 by qmennen #+# #+# */
|
||||
/* Updated: 2025/04/17 17:59:09 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#ifndef LINE_H
|
||||
# define LINE_H
|
||||
# include "cub3d.h"
|
||||
|
||||
void line_low(t_screen *screen, t_vec2 start, t_vec2 end, unsigned int color);
|
||||
void line_high(t_screen *screen, t_vec2 start, t_vec2 end, unsigned int color);
|
||||
|
||||
#endif
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 16:28:16 by qmennen #+# #+# */
|
||||
/* Updated: 2025/04/15 18:55:54 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/04/17 17:59:35 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -15,6 +15,8 @@
|
||||
|
||||
# include "cub3d.h"
|
||||
|
||||
void render_line(t_screen *screen, t_vec2 start, t_vec2 end, unsigned int color);
|
||||
void render_circle(t_screen *screen, t_vec2 point, int radius, unsigned int color);
|
||||
void render_clear(t_screen *screen);
|
||||
void render_entities(t_game *game);
|
||||
|
||||
|
||||
69
src/line.c
Normal file
69
src/line.c
Normal file
@ -0,0 +1,69 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* line.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/17 17:49:01 by qmennen #+# #+# */
|
||||
/* Updated: 2025/04/17 18:04:30 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "line.h"
|
||||
#include "MLX42.h"
|
||||
|
||||
void line_low(t_screen *screen, t_vec2 start, t_vec2 end, unsigned int color)
|
||||
{
|
||||
int delta;
|
||||
int yi;
|
||||
t_vec2 current;
|
||||
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;
|
||||
current = start;
|
||||
while (current.x <= end.x)
|
||||
{
|
||||
mlx_put_pixel(screen->img, (int)current.x, (int)current.y, color);
|
||||
if (delta > 0)
|
||||
{
|
||||
current.y += yi;
|
||||
delta -= 2 * delta_point.x;
|
||||
}
|
||||
delta += 2 * delta_point.y;
|
||||
current.x++;
|
||||
}
|
||||
}
|
||||
|
||||
void line_high(t_screen *screen, t_vec2 start, t_vec2 end, unsigned int color)
|
||||
{
|
||||
int delta;
|
||||
int xi;
|
||||
t_vec2 current;
|
||||
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;
|
||||
current = start;
|
||||
while (current.y <= end.y)
|
||||
{
|
||||
mlx_put_pixel(screen->img, (int)current.x, (int)current.y, color);
|
||||
if (delta > 0)
|
||||
{
|
||||
current.x += xi;
|
||||
delta -= 2 * delta_point.y;
|
||||
}
|
||||
delta += 2 * delta_point.x;
|
||||
current.y++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,11 +6,12 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 18:53:19 by qmennen #+# #+# */
|
||||
/* Updated: 2025/04/15 19:11:48 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/04/17 18:10:17 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "player.h"
|
||||
#include "render.h"
|
||||
#include "types.h"
|
||||
|
||||
int player_create(t_game **game)
|
||||
@ -49,7 +50,11 @@ void player_move(keys_t key, t_player *player)
|
||||
|
||||
void player_render(t_screen *screen, t_player *player)
|
||||
{
|
||||
t_vec2 direction;
|
||||
if (player->pos.x < 0 || player->pos.x >= screen->width || player->pos.y < 0 || player->pos.y >= screen->height)
|
||||
return ;
|
||||
mlx_put_pixel(screen->img, (int) player->pos.x, (int) player->pos.y, 0xFFFFFFFF);
|
||||
render_circle(screen, player->pos, 10, 0x3294a8ff);
|
||||
direction.x = player->pos.x + cos(player->angle) * 30;
|
||||
direction.y = player->pos.y + sin(player->angle) * 30;
|
||||
render_line(screen, player->pos, direction, 0xa83232ff);
|
||||
}
|
||||
|
||||
45
src/render.c
45
src/render.c
@ -6,12 +6,11 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 16:28:10 by qmennen #+# #+# */
|
||||
/* Updated: 2025/04/15 19:20:00 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/04/17 17:59:14 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "render.h"
|
||||
#include "MLX42.h"
|
||||
|
||||
void render_clear(t_screen *screen)
|
||||
{
|
||||
@ -22,6 +21,48 @@ void render_clear(t_screen *screen)
|
||||
mlx_put_pixel(screen->img, i % screen->width, i / screen->width, 0x212121FF);
|
||||
}
|
||||
|
||||
void render_circle(t_screen *screen, t_vec2 point, int radius, unsigned int color)
|
||||
{
|
||||
int i;
|
||||
int size;
|
||||
int x;
|
||||
int y;
|
||||
|
||||
i = 0;
|
||||
size = 2 * radius + 1;
|
||||
while (i <= size * size)
|
||||
{
|
||||
x = i % size - radius;
|
||||
y = i / size - radius;
|
||||
if (x * x + y * y <= radius * radius)
|
||||
mlx_put_pixel(screen->img, (int) point.x + x, (int) point.y + y, color);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
void render_entities(t_game *game)
|
||||
{
|
||||
player_render(game->screen, game->player);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user