From 03ceeb1da57d36285769eabdbdb1d4e1ee1614a1 Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Thu, 8 May 2025 17:29:41 +0200 Subject: [PATCH] brokkenmirrorenstufff --- assets/broken_mirror.png | Bin 0 -> 2383 bytes assets/lamp.png | Bin 0 -> 778 bytes src/player.c | 12 ++++++------ src/render/DDAscratch.c | 2 +- src/render/render_sprite.c | 36 +++++++++++++++++++----------------- src/screen.c | 5 +++-- src/util/initialize.c | 26 +++++++++++++++++++++++--- 7 files changed, 52 insertions(+), 29 deletions(-) create mode 100644 assets/broken_mirror.png create mode 100644 assets/lamp.png diff --git a/assets/broken_mirror.png b/assets/broken_mirror.png new file mode 100644 index 0000000000000000000000000000000000000000..651053bafee6e3936451d9767a2f1e567a710839 GIT binary patch literal 2383 zcmV-V39$BwP)EX>4Tx04R}tkv&MmKp2MKww4yDbg+YnLx$>PK~zLHtwIqhgj%6h2a`+xph-iL z;^HW{799LptU9+0Yt2!cN#?t+t|i5UH9kcQwk;nd;;+-(+!JwgLrDw z(mC%F$5>fXh|h^f4Z0xlBiCh@-#C{X_Vdh`kgel zkz)ZhsE`~#_#gc4ty!EHcatJXAoyb2AHzUs7icwX`}^3oTPHx^8Mx9q{#p~5{v^H8 z(c(uybQ`$1?r8EJaJd5vJn51lIZ}X@zgPs`&*+=-K>sb!yXN+-eU8%yAWOYU-v9@P zz(|R**FD}H?(W;aHSPZW0B}fhrkA-pG5`Po24YJ`L;(K){{a7>y{D4^000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2k8X}4;&}B>gav|000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}000LjNklj5A>~Xed}A_ z`qsC;^{sDx>s#OY*0=vRQ~!&gcW=M$@l0fYmdO`I#0St?r=F+Jd0IdB!W$p__%jLM z?(Nt8!rJTyX_gItQaj)C=8f@w{lXg`{NytMVBgLWon20me6u$d4i zwhN--`zMUiU+onH(`x`(CbRkEs}-NnH^iysVxvVArvT3aG#BGK0T^|{95=jM~&jt&QZw3%#b z#mSeIRt$szN-1n6*i1HWy?%JpyB8Y2UpD|Ic8q)_wf3+$=Lf!FAn<8KF&7tF4mbq- zs6N*?lea%NpZs-nICvHyPV8>2l^Uo7h=WW7aNBPF!tk+oFD!giVEk z5&DKGwOnen01iz~*QX|@>&ePK^|?k`pKBZh4qa-rh*C@F8+2O<)lB3_(c{!TTKzkc z)ZW(K+zd*?LNmfSo}QepPp!hm&z*)g0c0W%JLi=@ZE9r?FY-4x(heXcQ= zw^<5dH9$Ijk3~t^ts6wdOzarhU%FISoZAcFX^qw@2XK64yDLz_@hD06Z>&}Ev?deD zV?9?Y1vqir^3}JQV66bWSb*yntrcu0T@~c9N(DfiT%Ri-ZC7(|*5?{$uhwtJ$D66m z@U&hQt6U0jZbKV@!nOgtUZDHetX$TR)Ox{vYDWiS{AEp3eZ4a zya2pcp!@f1CTOLW#VQwo{56xxOIXep=>BXbLTCQCvX{f_#R>(Wx{m_+Zaun|{)b;V z?LHwr9`&@wx#h7+l?W-N#5t$MIgF=CQf^wyr(OuKNob+vt0ksjY_j7KJJS*&s?K?O#wwQrv^w1>S23Q(7!7b&0j}>dMt5tBrLjt;0ChZ9 zfQTaue1N?LxZWEEJ|b?30@U#$Pp-o3n>T+x6%jKS1~}*V`+UOzH!OW8u$B|y=z;Og zz?sht*OXF1s)t9tC>|y-T)5arX3%(4H;VxJ^UV?(ZnE-77MUR=n(r4A8wI zQ|a6%XvHZ@`~PF11;Fe(AFI*>*t6vt2mIRv)_O^5Y5!h8_*7qssZN5luo%;9C1|DC zFc7j~AVe!gvz4&07?aox)rRs?KH=PQAUWW51t6>hkNBQ9pJ$5ADB)r=;$kzR8719S z_dRbutOSqz?(~H_XW#i)t%OkeJ>YWk&t<#TtFo8#SHz>BK8?+9C4eHKUM&ROtJN=Z z^8aZQEb6gXH{S)80xWV*=ox^eD^=9$7kU2Y_D{L+td4gkrN00G002ovPDHLkV1ny5 Bel-99 literal 0 HcmV?d00001 diff --git a/assets/lamp.png b/assets/lamp.png new file mode 100644 index 0000000000000000000000000000000000000000..bd536b128200e7dd184a8642b32f732e996dc8a6 GIT binary patch literal 778 zcmV+l1NHogP)EX>4Tx04R}tkv&MmKp2MKww4yDbg+YnLx$>PK~zLHtwIqhgj%6h2a`+xph-iL z;^HW{799LptU9+0Yt2!cN#?t+t|i5UH9kcQwk;nd;;+-(+!JwgLrDw z(mC%F$5>fXh|h^f4Z0xlBiCh@-#C{X_Vdh`kgel zkz)ZhsE`~#_#gc4ty!EHcatJXAoyb2AHzUs7icwX`}^3oTPHx^8Mx9q{#p~5{v^H8 z(c(uybQ`$1?r8EJaJd5vJn51lIZ}X@zgPs`&*+=-K>sb!yXN+-eU8%yAWOYU-v9@P zz(|R**FD}H?(W;aHSPZW0B}fhrkA-pG5`Po24YJ`L;(K){{a7>y{D4^000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2k8X}4;Ll15Kx%_000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0002tNkl=^0lcjE&*1;~%*WVg5b*+xSl*Y)1I|8Su+^N%E@RJ%G~uoB^+2 z!za5S%HJ9A&SKWS1?i1K=RZXO0000000000000000059zSIQAbLYTda{r~^~07*qo IM6N<$g0|sL-~a#s literal 0 HcmV?d00001 diff --git a/src/player.c b/src/player.c index 97652ff..6ab0300 100644 --- a/src/player.c +++ b/src/player.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 18:53:19 by qmennen #+# #+# */ -/* Updated: 2025/05/08 15:51:06 by qmennen ### ########.fr */ +/* Updated: 2025/05/08 17:07:17 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -70,10 +70,10 @@ static void strave(t_map *map, t_player *player, int dir, double delta) } } -static void rotate(t_player *player, double rot_speed) +static void rotate(t_player *player, double rot_speed, double delta) { - player->dir = rot(player->dir, rot_speed); - player->camera = rot(player->camera, rot_speed); + player->dir = rot(player->dir, rot_speed * delta); + player->camera = rot(player->camera, rot_speed * delta); } void player_update(t_game *game, double delta_time) @@ -88,9 +88,9 @@ void player_update(t_game *game, double delta_time) else if (get_key(game, MLX_KEY_D)) strave(game->map, game->player, 1, delta_time); if (get_key(game, MLX_KEY_LEFT)) - rotate(game->player, -.05f); + rotate(game->player, -2.5, delta_time); else if (get_key(game, MLX_KEY_RIGHT)) - rotate(game->player, .05f); + rotate(game->player, 2.5, delta_time); } void player_render(t_screen *screen, t_player *player) diff --git a/src/render/DDAscratch.c b/src/render/DDAscratch.c index 6d16a94..87a9a70 100644 --- a/src/render/DDAscratch.c +++ b/src/render/DDAscratch.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/02 11:58:09 by whaffman #+# #+# */ -/* Updated: 2025/05/08 14:51:32 by qmennen ### ########.fr */ +/* Updated: 2025/05/08 16:56:17 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/render/render_sprite.c b/src/render/render_sprite.c index 227c5e9..7ada600 100644 --- a/src/render/render_sprite.c +++ b/src/render/render_sprite.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/08 12:23:17 by qmennen #+# #+# */ -/* Updated: 2025/05/08 16:02:06 by qmennen ### ########.fr */ +/* Updated: 2025/05/08 17:02:10 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,7 +24,7 @@ static void sort_sprites(t_game *game) { i = 1; new_n = 0; - while (i < n - 1) + while (i <= n - 1) { if (game->map->sprites[i - 1].dist < game->map->sprites[i].dist) { @@ -84,6 +84,8 @@ unsigned int sample_texture_color(mlx_texture_t *texture, int x, int y, double d int index; int alpha; + dist = (dist == 0) * 1e30 + (dist > 1) * dist + (dist <= 1) * 1; + alpha = 1.0 / dist * 255; index = (x + y * texture->width) * texture->bytes_per_pixel; if (texture->pixels[index + 3] == 0) @@ -93,7 +95,7 @@ unsigned int sample_texture_color(mlx_texture_t *texture, int x, int y, double d return texture->pixels[index] << 24 | texture->pixels[index + 1] << 16 | texture->pixels[index + 2] << 8 | alpha; } -void draw_sprite(t_game *game, t_sprite *sprite) +void draw_sprite(t_game *game, t_sprite *sprite, t_render *render) { double sprite_scale; int x_start; @@ -106,36 +108,36 @@ void draw_sprite(t_game *game, t_sprite *sprite) double tex_y; unsigned int color; - if (isnan(sprite->cam_frac) || sprite->dist < 1) + if (isnan(sprite->cam_frac) || sprite->dist <= 0) return; - sprite_scale = (1 / sprite->dist) * 16; + sprite_scale = (1.0 / sprite->dist) * 16.0; x_start = (game->screen->width / 2) * (1 + sprite->cam_frac) - ((sprite->texture->width * sprite_scale) / 2); y_start = (game->screen->height / 2) - (sprite->texture->height * sprite_scale) / 2 ; x_end = (game->screen->width / 2) * (1 + sprite->cam_frac) + ((sprite->texture->width * sprite_scale) / 2); y_end = (game->screen->height / 2) + (sprite->texture->height * sprite_scale) / 2 ; x = x_start; - y = y_start; - while (y < y_end) + while (x < x_end) { - if (y < 0 || y >= game->screen->height) - break; - x = (int)x_start; - while (x < x_end) + y = y_start; + if (x < 0 || x >= game->screen->width || sprite->dist > render[x].perp_dist) + { + x++; + continue; + } + while (y < y_end) { tex_x = ((double)((x - x_start) / (double)(x_end - x_start))) * sprite->texture->width; tex_y = ((double)((y- y_start) / (double)(y_end - y_start))) * sprite->texture->height; - // printf("\e[1;1H\e[2J"); - // printf("x: %d, y: %d, tex_x: %d, tex_y: %d\n", x, y, (int) tex_x, (int) tex_y); color = sample_texture_color(sprite->texture, (int)(tex_x), (int)(tex_y), sprite->dist); if (x < 0 || x >= game->screen->width || y < 0 || y >= game->screen->height || (color & 0xFF) == 0) { - x++; + y++; continue; } mlx_put_pixel(game->screen->img, x, y, color); - x++; + y++; } - y++; + x++; } } @@ -149,7 +151,7 @@ void render_sprites(t_render *render, t_game *game) while (i < game->map->n_sprites) { cam_fraction(game, &game->map->sprites[i]); - draw_sprite(game, &game->map->sprites[i]); + draw_sprite(game, &game->map->sprites[i], render); i++; } } \ No newline at end of file diff --git a/src/screen.c b/src/screen.c index 7f0040e..f9578c7 100644 --- a/src/screen.c +++ b/src/screen.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 15:30:27 by qmennen #+# #+# */ -/* Updated: 2025/05/08 16:08:08 by qmennen ### ########.fr */ +/* Updated: 2025/05/08 17:10:50 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,7 +22,8 @@ int screen_create(t_game **game) return (FAILURE); screen->width = WIDTH; screen->height = HEIGHT; - mlx = mlx_init(WIDTH, HEIGHT, TITLE, false); + mlx_set_setting(MLX_FULLSCREEN, 1); + mlx = mlx_init(WIDTH, HEIGHT, TITLE, true); if (!mlx) return (FAILURE); screen->mlx = mlx; diff --git a/src/util/initialize.c b/src/util/initialize.c index 72f289c..431f943 100644 --- a/src/util/initialize.c +++ b/src/util/initialize.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/22 17:08:26 by qmennen #+# #+# */ -/* Updated: 2025/05/08 14:52:45 by qmennen ### ########.fr */ +/* Updated: 2025/05/08 17:28:50 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,7 +14,7 @@ static int init_temp(t_game **game) { - (*game)->map->sprites = malloc(sizeof(t_sprite)); + (*game)->map->sprites = malloc(sizeof(t_sprite) * 5); if (!(*game)->map->sprites) return (FAILURE); (*game)->map->sprites[0].n_frames = 1; @@ -22,7 +22,27 @@ static int init_temp(t_game **game) (*game)->map->sprites[0].pos.y = 3.5; (*game)->map->sprites[0].dist = 0; (*game)->map->sprites[0].texture = mlx_load_png("./assets/battery.png"); - (*game)->map->n_sprites = 1; + (*game)->map->sprites[1].n_frames = 1; + (*game)->map->sprites[1].pos.x = 2.5; + (*game)->map->sprites[1].pos.y = 3.5; + (*game)->map->sprites[1].dist = 0; + (*game)->map->sprites[1].texture = mlx_load_png("./assets/battery.png"); + (*game)->map->sprites[2].n_frames = 1; + (*game)->map->sprites[2].pos.x = 1.5; + (*game)->map->sprites[2].pos.y = 3.5; + (*game)->map->sprites[2].dist = 0; + (*game)->map->sprites[2].texture = mlx_load_png("./assets/battery.png"); + (*game)->map->sprites[3].n_frames = 1; + (*game)->map->sprites[3].pos.x = 3.5; + (*game)->map->sprites[3].pos.y = 4.5; + (*game)->map->sprites[3].dist = 0; + (*game)->map->sprites[3].texture = mlx_load_png("./assets/broken_mirror.png"); + (*game)->map->sprites[4].n_frames = 1; + (*game)->map->sprites[4].pos.x = 2.5; + (*game)->map->sprites[4].pos.y = 5.5; + (*game)->map->sprites[4].dist = 0; + (*game)->map->sprites[4].texture = mlx_load_png("./assets/lamp.png"); + (*game)->map->n_sprites = 5; (*game)->screen->hud = mlx_texture_to_image((*game)->screen->mlx, mlx_load_png("./assets/overlay.png")); return (SUCCESS); }