From 6d8196504c4b4872caf3d59636b94f32534734d9 Mon Sep 17 00:00:00 2001 From: Ladebeze66 Date: Sun, 21 Jan 2024 21:43:07 +0100 Subject: [PATCH] manquecorrigetouchesetparsing --- versionmod/.vscode/settings.json | 7 +- versionmod/cub3d | Bin 114024 -> 118392 bytes versionmod/cub3d.h | 67 ++++---- versionmod/draw/ft_2d_view.c | 57 ++++--- versionmod/draw/ft_2d_view.o | Bin 3112 -> 4016 bytes versionmod/draw/ft_3d_view.c | 8 +- versionmod/draw/ft_3d_view.o | Bin 2528 -> 2528 bytes versionmod/draw/ft_background.c | 11 +- versionmod/draw/ft_background.o | Bin 1920 -> 2352 bytes versionmod/draw/ft_load_textures.c | 27 ++-- versionmod/draw/ft_load_textures.o | Bin 3448 -> 3248 bytes versionmod/draw/ft_textures.c | 35 ++-- versionmod/draw/ft_textures.o | Bin 3912 -> 3336 bytes versionmod/main.c | 38 +++-- versionmod/main.o | Bin 3912 -> 3664 bytes versionmod/map.cub | 6 +- versionmod/move/ft_collision.c | 63 ++++---- versionmod/move/ft_collision.o | Bin 2416 -> 3704 bytes versionmod/move/ft_key.c | 57 ++++--- versionmod/move/ft_key.o | Bin 3408 -> 4064 bytes versionmod/move/ft_move.c | 168 +++++++++++--------- versionmod/move/ft_move.o | Bin 3552 -> 5232 bytes versionmod/parsing/ft_find_map_start.c | 8 +- versionmod/parsing/ft_find_map_start.o | Bin 4192 -> 3880 bytes versionmod/parsing/ft_parsing.c | 99 ++++++++---- versionmod/parsing/ft_parsing.o | Bin 3472 -> 4088 bytes versionmod/parsing/ft_textures_and_colors.c | 41 +++-- versionmod/parsing/ft_textures_and_colors.o | Bin 5128 -> 5376 bytes versionmod/window/ft_player.c | 49 +++++- versionmod/window/ft_player.o | Bin 2640 -> 3512 bytes versionmod/window/ft_refresh_window.c | 41 +++-- versionmod/window/ft_refresh_window.o | Bin 3392 -> 3720 bytes versionmod/window/ft_window.c | 20 +-- versionmod/window/ft_window.o | Bin 5608 -> 5424 bytes 34 files changed, 473 insertions(+), 329 deletions(-) diff --git a/versionmod/.vscode/settings.json b/versionmod/.vscode/settings.json index bb879da..e6398eb 100644 --- a/versionmod/.vscode/settings.json +++ b/versionmod/.vscode/settings.json @@ -4,7 +4,7 @@ "C_Cpp_Runner.debuggerPath": "gdb", "C_Cpp_Runner.cStandard": "", "C_Cpp_Runner.cppStandard": "", - "C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/VR_NR/Community/VC/Auxiliary/Build/vcvarsall.bat", + "C_Cpp_Runner.msvcBatchPath": "", "C_Cpp_Runner.useMsvc": false, "C_Cpp_Runner.warnings": [ "-Wall", @@ -55,5 +55,8 @@ "C_Cpp_Runner.useLeakSanitizer": false, "C_Cpp_Runner.showCompilationTime": false, "C_Cpp_Runner.useLinkTimeOptimization": false, - "C_Cpp_Runner.msvcSecureNoWarnings": false +"C_Cpp_Runner.msvcSecureNoWarnings": false, +"files.associations": { + "math.h": "c" +} } \ No newline at end of file diff --git a/versionmod/cub3d b/versionmod/cub3d index 38597f2f4acbb9eb744fadeab686de615e8df4ca..bf6cef09e27819ea5e29de717e71abce9f1ce9b9 100755 GIT binary patch literal 118392 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 Hmhpc9MdiaI diff --git a/versionmod/cub3d.h b/versionmod/cub3d.h index 5afc29c..ac26404 100644 --- a/versionmod/cub3d.h +++ b/versionmod/cub3d.h @@ -6,7 +6,7 @@ /* By: fgras-ca +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/14 16:56:52 by fgras-ca #+# #+# */ -/* Updated: 2024/01/16 16:50:38 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 21:40:53 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ @@ -31,7 +31,7 @@ # define P2 PI/2 # define P3 3*PI/2 # define COLBUF 2 -# define NUMRAY 1280 +# define NUMRAY 10 # define FOVIEW 60 # define DISRAY 1000000 # define DOF 120 @@ -39,6 +39,7 @@ # define HEIGHT 720 # define BOV 500 # define MAX_LINE_LENGTH 100000 + typedef enum { NORTH, SOUTH, @@ -59,17 +60,29 @@ typedef struct s_img int endian; } t_img; +typedef struct s_struture_windows +{ + void *mlx; + void *win; + int height; + int width; +} t_structure_windows; + typedef struct s_struture_map { - char *map; - char *buff; - char **temp_list; - int i; - int j; - int temp; - int mapX; - int mapY; - int mapS; + char *map; + char *buff; + char **temp_list; + int i; + int j; + int temp; + int mapX; + int mapY; + int mapS; + float player_x; + float player_y; + char player_direction; + t_structure_windows wd; } t_structure_map; typedef struct s_struture_player @@ -108,14 +121,6 @@ typedef struct s_struture_img int texture_height; } t_structure_img; -typedef struct s_struture_windows -{ - void *mlx; - void *win; - int height; - int width; -} t_structure_windows; - typedef struct s_texture { char *north; @@ -125,6 +130,17 @@ typedef struct s_texture unsigned int floor_color; unsigned int ceil_color; } t_texture; + +typedef struct s_map_params { + t_structure_map *map_info; + const char *buffer; + int length; + int *maxWidth; + int *height; + int *currentWidth; + int *isNewLine; +} t_map_params; + typedef struct s_structure_main { int fd; @@ -173,17 +189,6 @@ typedef struct s_position_params { char direction; } t_position_params; - -typedef struct s_map_params { - t_structure_map *map_info; - const char *buffer; - int length; - int *maxWidth; - int *height; - int *currentWidth; - int *isNewLine; -} t_map_params; - typedef struct s_square_params { t_structure_main *w; int x; @@ -339,7 +344,7 @@ char **ft_split(char const *s, char c); char *get_next_line(int fd); /*ft_key.c 3/5*/ int *kill_prog(t_structure_main *w); -void move(int key, t_structure_main *w); +void move(t_structure_main *w, int key); int deal_key(int key, t_structure_main *w); size_t ft_strlen(const char *s); char *ft_strdup(const char *src); diff --git a/versionmod/draw/ft_2d_view.c b/versionmod/draw/ft_2d_view.c index c483305..fd7f4c4 100644 --- a/versionmod/draw/ft_2d_view.c +++ b/versionmod/draw/ft_2d_view.c @@ -6,7 +6,7 @@ /* By: fgras-ca +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/12 17:49:42 by fgras-ca #+# #+# */ -/* Updated: 2024/01/17 21:47:17 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 21:17:37 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ @@ -31,6 +31,7 @@ void init_base_params(t_base_params *params, t_structure_main *w) params->FOV = FOVIEW * (PI / 180); params->DR = params->FOV / params->numrays; params->ra = w->s_player.pa - (params->FOV / 2); + //printf("initbaseparams: %d , %f\n", params->tilesize, params->ra); draw_background(w); } @@ -62,27 +63,37 @@ void calculate_ray(t_base_params *base, t_ray_state *state, rayparams->color = calc->color; } -void drawrays2d(t_structure_main *w) -{ - t_drawrays2d_params params; +void drawrays2d(t_structure_main *w) { + t_drawrays2d_params params; - init_base_params(¶ms.base_params, w); - params.ray_calc.w = w; - params.ray_calc.r = 0; - while (params.ray_calc.r++ < params.base_params.numrays) - { - params.base_params.ra = fmod(params.base_params.ra + 2 * PI, 2 * PI); - params.hrayparams = (t_ray_calc_params){w, params.base_params.ra, - ¶ms.ray_state.disH, ¶ms.ray_state.hx, - ¶ms.ray_state.hy, ¶ms.ray_state.hwalldir}; - params.vrayparams = (t_ray_calc_params){w, params.base_params.ra, - ¶ms.ray_state.disV, ¶ms.ray_state.vx, - ¶ms.ray_state.vy, ¶ms.ray_state.vwalldir}; - calculatehorizontalray(¶ms.hrayparams); - calculateverticalray(¶ms.vrayparams); - calculate_ray(¶ms.base_params, ¶ms.ray_state, - ¶ms.ray_calc, ¶ms.rayparams); - drawray(¶ms.rayparams); - params.base_params.ra += params.base_params.DR; - } + init_base_params(¶ms.base_params, w); + params.ray_calc.w = w; + params.ray_calc.r = 0; + while (params.ray_calc.r++ < params.base_params.numrays) { + params.base_params.ra = fmod(params.base_params.ra + 2 * PI, 2 * PI); + + // Ajout de logs pour les paramètres du rayon + printf("drawrays2d BEFORE: Ray #%d, Angle (ra) = %f\n", params.ray_calc.r, params.base_params.ra); + + params.hrayparams = (t_ray_calc_params){w, params.base_params.ra, + ¶ms.ray_state.disH, ¶ms.ray_state.hx, + ¶ms.ray_state.hy, ¶ms.ray_state.hwalldir}; + params.vrayparams = (t_ray_calc_params){w, params.base_params.ra, + ¶ms.ray_state.disV, ¶ms.ray_state.vx, + ¶ms.ray_state.vy, ¶ms.ray_state.vwalldir}; + calculatehorizontalray(¶ms.hrayparams); + calculateverticalray(¶ms.vrayparams); + calculate_ray(¶ms.base_params, ¶ms.ray_state, + ¶ms.ray_calc, ¶ms.rayparams); + printf("drawrays2d AFTER : Ray #%d, ra: %f\n", params.ray_calc.r, params.base_params.ra); + + //Plus de logs après les calculs des rayons + //printf("drawrays2d: Ray #%d, Player Position: x = %f, y = %f, Angle (ra) = %f\n", + // params.ray_calc.r, w->s_player.px, w->s_player.py, params.base_params.ra); + //printf("Horizontal Ray: Distance = %f, x = %f, y = %f\n", params.ray_state.disH, params.ray_state.hx, params.ray_state.hy); + //printf("Vertical Ray: Distance = %f, x = %f, y = %f\n", params.ray_state.disV, params.ray_state.vx, params.ray_state.vy); + + drawray(¶ms.rayparams); + params.base_params.ra += params.base_params.DR; + } } diff --git a/versionmod/draw/ft_2d_view.o b/versionmod/draw/ft_2d_view.o index 44f516d6da05e424781ab36857fd6a7eec5a41a4..11d36d29a6a355b6bc306a52226ee7d37ed31aad 100644 GIT binary patch literal 4016 zcmbtWZ)hAv6rW3zw$`?rNW@5M*gdzw9{m>8n5D?*N!K8kQ{UAXRf+$2A@JtkfM$h+~o!M-+IRqWp zd2fF2@63BMcW-FVAF2w4m>ePY3|n4Fl(FdgWj@B)7~9A;umxqyAFaCcqkds7x}el) zb2J^DrK$CY1*KM_>6C`0wv<+WDJr|QrM@l1-C9si9$lJOYHQ$YUO91NUO8Fx^hgSW z-CW8INJbDDY;X-u-DU7CNl(wsD|M%*$vFi*X)dL8WpIY3Y;o2#d0CrAkXtu>IoImW z`9e)ZaM<8}40Vp2IRf5pt+PmHJzEKAZi!Tu$kQ>g{3F*wGdnDduIM`p9qz z#Q9p5L@x|;fioN~m&+5wQJPW5pVCxa+SD*3K(zIwud64~gdUK_9(@hT8=jl`T->JS zor2lz0uKX&&z&#y5#E24&^WFqZxm@I^Bw80_t+lQWA$ww8;|M}!~G(8eL@?;CWu}V zbX3qWL9YmURnTjkdWQi|xU)mlqnGFwjZ%M(=}zmFdoyeBa_9+rtiID@<9jHLaS^5{ z=%k=if=&xMBPc%wvMcemOiLR_PDRRTl5(1&oTe$K85ybuoAnASN?n6cL2yLZrO`)s{f)#!&Si98 z;qq^!uy0Cv>-=Bk@~BR4R7!usZDzZMAIz?%5$=gkjb6)zXKqKKw!}qkB{Ywu(NC zdY7=!xfT}cuMKTlzh>Z*@P!KkeGfKQ+A zk+4VT!+8bARsx_e_4u9%Yoc!@{br&65)!7t&wyy0KKQwcJ=5TOC;AF~EBR@wfOk~D z2P@$3RKVY_fU~rnXi6peGUnMxk|lGNWhU)(Cf{ien6%8ZOg3XD+Ks%K=rJs#JI_0s zfaIADE7zM%v82(J?CmmaGeP&l*Y7OdolCJEE0eX;%SxR&D|0TFwT&)ld$xV1WoKyR zbHNgcyiH*e$<8y0w2|qe9WZu)&kX&|d;7RpCo14p1^gp{u zpZ=$CKm!DSNu~aj5653biOVYnF+C3+zC&C+ng33bVeAz+^!;&<_;B1&>Hl3HuJ~}3 zcntU#N66PPJ}=|)-nIpBc|V5&xV)b%k{{@{jdr58<@g=yf(q?8^1{~8J4GiX01?D;=WX-qU|k1kxP{wGjy8f|=b?=D(G+ROT{ x6dNW{Y>LK^*f8D}`DOr@_V5|3J>=I!pii*yjo|s!k!&UVago36vjrQp{|Cs{r_}%e literal 3112 zcmbtUL1-LR7=D|iO{_^~BNZyCVGCNLwv*jZq?Mwp>9libC6tE7kh)HGXS=c4-7q_w zCOyPRnb2Wb45HApAP64pp$9L*h8~i5(nBH8iwA|M0X6Xu>gxJ`Z{FLTPIp1{hxg|H zzyJTg_rLf4H}7lb&$fj^OiGBo#u}DH8T-7ep~txzXT7Y4?J5Hg$8`5c{pNObSLxHX zX}YjQ)7THYN?4<5QiG{g)5@e4Uo36t4v&|?kM4X;M!5fS9g?&NNS6`9ihGI z?$=v?*J>%f)bacvh3c-h7pv$c2WV;OZX08+6RFi|YtC~tGb)O<#!I7uok7C99lcbB zpL`tKRo+>J{}^F{On29KEyAS8rFCMbZy7A~eHx`w<~MY1Jo^ygYfhMEcz$|?!o~5G z;qsl}IySs6fwVFRpuTy2xDHb4wK%h6p<1A*bROQa^BZlO&R~huJx{$wYSmL$NbN$L ztKB9Q6oFll=Z=q6`-;N;@RBQ}GB0_Z)DBPmmeg)f-PFt49m$7dK`kHyfiko@r^E2T zKIbqctvLs2W~|0aye`){Pd1`ZJ9ZTpHZ}nJ4B5Y&m83v?Jj7Ju#WZ+Ou%8E2OP z-Vztd53|H6mBH_D3Gxoo%3{Ukj>Zi{iL1nW%XLn39XIVdC;1v-9*wnh?n8IE&M4Qh zYuC9%Go2o2e5WQZbey*y(s98h-bCfmkoyVNIK_Ke`S8oXYPA);r0u2jm%aA4_wgRx zxQB*gKdWah{dwe>_(unpUneup&W((`8W|j$D(38BBoduxnQ|5kvt(|{cGJ}h+OA`8ujL;c;IT`Tk`4-<|7xr<5b4KKHi^z3i@ zf+9TMY2YL;fK2+^2ikc6_dGt~-`2r?=dUT~ZEyPLL#_O=KN8+c)>FQCUL#@8(!hR$ za)bcH%Q#*$VaI4Ri^txY;cv9S$6Mgp7I?7*&eC>bIF*>2Hm|Emmdsn0nY7c>g^ami zl38FW%eZbC3x(knR})i4^4e7^U(BUgI-5_iq%o5$&KS0t$y?Jm@;Td>q3{MgXIl0& z1pyRXERiVKM3YEnt|ijO^bFO8eL|>Tc&}8cXCVoWK8{;0@XrK}p2IClo`->W_#rVg z2np;?8Zv%V;IbZSK`u7~xQzd}1^%gz9~?5i6T~D~_X!#jzwE;g`0%6R0U;hk#+QBg zlRo^u5AXKj5z--8Ml8kcIG-E1>|3T57P7W6MPJ+Uz8R@m=8U1*=Df|+lwli8ohlTV zYUMp6na^g;9Qks2+f?aaaGYPdu&?Hd>a3NYrS4du959)gMA|a4rl{oqeIk^Oqu(E( zi3|III3MX2*Cb8WPa4iSUPnCTwjj)i1e`fk*&l~Q{851imSO!MZ6d+-@t*+af6b3k zE;#*nOeTwn^@IN!SwCVRr)VHQ3d1K+k&pWPBI}pmH_0h=f86B1-2X*N!g~zX|E|c7 z_(@3**8d)1SU;G*B=Yh9^h+=wU5L=QKM1-Al;?u`$NQD}^8TBxjr2{i{z-8-c$ +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/12 17:35:53 by fgras-ca #+# #+# */ -/* Updated: 2024/01/14 17:19:42 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 19:55:50 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,6 +20,8 @@ void init_line_params(t_line_params *lineparams, t_ray_params *rayParams) lineparams->x1 = (int)rayParams->rx; lineparams->y1 = (int)rayParams->ry; lineparams->color = rayParams->color; + //printf("init_line_params: Player Position: x0 = %d, y0 = %d\n", lineparams->x0, lineparams->y0); + //printf("init_line_params: Ray End Position: x1 = %d, y1 = %d\n", lineparams->x1, lineparams->y1); } void init_texture_params(t_texture_params *textureparams, @@ -54,6 +56,10 @@ void drawray(t_ray_params *rayparams) textureparams.startX = rayparams->r * rayparams->raywidth + rayparams->backgroundOffsetX; textureparams.endX = textureparams.startX + rayparams->raywidth; + //printf("drawray: Player Position: x = %f, y = %f\n", rayparams->w->s_player.px, rayparams->w->s_player.py); + //printf("drawray: Ray Angle: pa = %f\n", rayparams->w->s_player.pa); + //printf("drawray: Ray Distance: disT = %f\n", rayparams->disT); + //printf("drawray: Ray Height: lineH = %f\n", rayparams->lineH); init_line_params(&lineparams, rayparams); draw_line(&lineparams); init_texture_params(&textureparams, rayparams); diff --git a/versionmod/draw/ft_3d_view.o b/versionmod/draw/ft_3d_view.o index b98f586c6c2046e728056ad7c1cc1cfc89e0ee5c..1f450cae37af95d5ad91e0f64163be09fc76cb17 100644 GIT binary patch delta 38 rcmaDL{6Kg@rt||Q28Pf4Iu|^;U4L{2Z~& +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/11 23:19:39 by fgras-ca #+# #+# */ -/* Updated: 2024/01/14 17:37:52 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 13:23:24 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ @@ -32,16 +32,21 @@ void draw_background(t_structure_main *w) t_sky_ground_params ground_params; backgroundoffsetx = BOV; + if (!w || !w->t) + { + fprintf(stderr, "Structure w or w->t not properly initialized.\n"); + exit_error(w); + } sky_params.w = w; sky_params.startHeight = 0; sky_params.endHeight = w->s_win.height / 2; - sky_params.color = 0xB2FFFF; + sky_params.color = w->t->ceil_color; sky_params.backgroundOffsetX = backgroundoffsetx; draw_sky_ground(&sky_params); ground_params.w = w; ground_params.startHeight = w->s_win.height / 2; ground_params.endHeight = w->s_win.height; - ground_params.color = 0x280000; + ground_params.color = w->t->floor_color; ground_params.backgroundOffsetX = backgroundoffsetx; draw_sky_ground(&ground_params); } diff --git a/versionmod/draw/ft_background.o b/versionmod/draw/ft_background.o index 5893cd2d34520608070069bc608eb51cb02ea299..2bda791caeafd95fd3955221f7e3b782db8024e4 100644 GIT binary patch delta 728 zcmZqR-yk$WLwo}(0~|PjSq=<*47?NVH#;}iu3#t;@aT43;nCgjgNcE`qxC?kzDGA$ zhezkZU3x(E`xt?QM=w_Qdxpf=C8*JE(NJUYIP!XpSnX(CPYNas;E6 zF-UiCNl|HXNoi54Lb*bIkwUqyU5P?oeu+XsQGP*cQBI{oW?p7VW@1ieRceYJ7sKR6 zM*Yd_7}JCWKrV6R6KG>{=4E4MXXIh$nC!?RIoW~9U~&Kp3o|nV>*RQ*Oir*mpwghp z3z@_jBf(?>h@5J$rwxax$#FE5GEDIQCPhQAkE@%KU1_*9ICgH3?*0n|kO$%<_9jFyudS;d+7nI_L-RbzCTd=SX7W`b%JU<{hf$R^I@ zz%*HkO^q>YvLl-~X96f_fFJ^_J$3Ry7I9GyXbLodNHK5&Y0k-O*|bG>Kvi=Y6x`k0+uhTP-bLbx2+<}S1~gU|)ZmGvNhublNF!FFpjMW#u{KPtq_hbn z5d!`K+w&h-TE<>E?^80(%+9>`W{1V@;-l;MoczO2luru8>>a$KPB-LxGYG>m!3Fgq zJtf2?7}HHyYzsa+FHYi>=7ROWjtYVeOsO!^R}ruprix=tJE0T2Y3-%tG`UWR#HAb! z?qHvrjjtJ3i}X*JqC(Rko}TshW_%sL{0g`FGd+YYJll;2BiyA#=Fk?~?4Cy7T1H>E zx%?C>s7ot;wq%9w;zl}bkdIlkg^_fOVb-(`TbAh=zJ+51nRl9a9qb6F)X!RLd27T9 h9aSy4EVW*;WIkdIPpWDJS#pdI +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/14 20:30:59 by fgras-ca #+# #+# */ -/* Updated: 2024/01/17 21:45:36 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 14:06:26 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,8 +16,7 @@ void load_texture(t_structure_main *w, char *file_path, void **texture_ptr) { int width; int height; - //w->s_win.mlx = mlx_init(); - printf("file path %s\n", file_path); + width = 0; height = 0; *texture_ptr = mlx_xpm_file_to_image(w->s_win.mlx, @@ -29,24 +28,26 @@ void load_texture(t_structure_main *w, char *file_path, void **texture_ptr) } w->s_img.texture_width = width; w->s_img.texture_height = height; - printf("height %d\n", height); - printf("width %d\n", width); + printf("Loaded texture from %s: width = %d, height = %d\n", file_path, width, height); + fflush(stdout); } void load_wall_textures(t_structure_main *w) { - printf("load wall texture %s\n", w->t->north); - printf("load wall texture %s\n", w->t->south); - printf("load wall texture %s\n", w->t->east); - printf("load wall texture %s\n", w->t->west); + if (!w || !w->t) + { + fprintf(stderr, "Structures not properly initialized.\n"); + exit_error(w); + } + if (!w->t->north || !w->t->south || !w->t->west || !w->t->east) + { + fprintf(stderr, "One or more texture paths are not set.\n"); + exit_error(w); + } load_texture(w, w->t->north, (void **)&w->s_img.north_texture); load_texture(w, w->t->south, (void **)&w->s_img.south_texture); load_texture(w, w->t->west, (void **)&w->s_img.west_texture); load_texture(w, w->t->east, (void **)&w->s_img.east_texture); - printf("load wall texture %s\n", w->t->north); - printf("load wall texture %s\n", w->t->south); - printf("load wall texture %s\n", w->t->east); - printf("load wall texture %s\n", w->t->west); } void exit_error(t_structure_main *w) diff --git a/versionmod/draw/ft_load_textures.o b/versionmod/draw/ft_load_textures.o index 2a1d67c79e2002f689f6c58f0eee73b1e0bdc82d..b9e727a9f59ea756e29694186694fb55cb0f73b1 100644 GIT binary patch literal 3248 zcmbuAO>7%Q6vxL&+6HJ+gK~%{pyd!qMZ4HlC1}(Zi^%C58W06b9FVq~csE{Zd(G}x zaUu#4;X}qU_znk-+&EGp1VNP=dO;j>?4?q~hg8%YEQD0ve|IJxZ)}9%N#mLMz4!j} zW_EV{ZvN83NGipYrPu}5n<>gz=7HWg7Y%c4l1;FC$Da7Jz?*mY=5HC^ytd1m_1nBz z*eUYX*vu>i@@Br9-P+FIMbdVD4;^picX=z9;qApe-Y(qbEhKI4#=gQ1Z;nvN4sS93 z!B*YmtwYjto3|&TVe==7zmB0yB0(w8f?j^N+1VIjtX0^HC+}mjxEDKVv75Xdi}uSX z7O8e9wOi!R#2XQZB6#bDw&gT!xyv`Nb(u&bn71~%v=FL(R#n~n;hPz%^E;esZ&6it zSCy@&NBb7%`cQ71RK;vROM^}Iv+3mOPygH1+np;YUfV}&JeozP-K)6WDJA3hkigo3 z!1$aFC^ilRPA8V`96b5&ai&pSY{B-*PSFs)QTA=>orb6f&YUq5K1eZ)T_Os9%ndj2 zE99FqR=uJq8Rw0e;z^_Acq=6lP2wcVdsPJWWk`ia)fYxB@M}&`UNgL^Cp^3Ctvf{% z!7o=G!w-y#A2|Dq)ND}-4Vws3Lq{O;;{5!aFxo^Np_9%XoALD;8NR6>S?hgtX9r$IzUZU5oF9rL0 zM2nC1K@YFoZ7YSk?MruZsKYFbw9Qh zKr$TjVQPv8fMnpf%Zk4TNCurF)D-^&kPMuz?>_$)kWA^|-okFhT@;VME~WFcoZM9*Z)f6(0`j6 z>}yR&*T120UH?~&qb60)6gET#rt|YdxI2VzYWx^!DSd;+Ft}w%G|xr9J+9u5D+#XN zS7wH56=5$?FM_x)sZrpRZ4>VWGmEycnYk2(%nbZ^vg}tXPL+K0QFcuFrk;wfx}2|6 z>t_6s7i*LQC8uP$fn9NACI7E8C>=+SXR2FHPCn8Pg_wLy`=Q5agy)jmC-Hzw!C9G) zJB(aBbJ%p;v8Sj9$KBCwJF%|vCD%Vm4ru<@{4C`{Gr8Q45`0NM-BkUGouvWtGYZJQ zCJRD+x~ckA{~|fnSdaTWxgqIH#$G0l?^3ei!CIh+5!}G^?PvxuUKWJ^FJP%Q_4Y^@_>wuE^&>VDB*X3XMr{vcyd43O*b6~z) LNa)ElPUim&a{gQX literal 3448 zcmd5cRbD0>L5NPCE^tZ8PJz^<#TqhYdj&;=LTg9yEyOiy~;`J<Ec=18atM|R{ zy?XV!szN@fytXot%P}Q6c9|Vm3T15nk%M_zOv`MJ&9Xlqd-`vShrjWU9u#@_-YyS& zJ3O?ut2~-oI7>txR`yGqJgN}<6Ca#FEDyK7gWko@R%I_%BPb&7@~B+ogV#rVVD0e; z`L+a;N7gnECy27mBgQ}3?3p}@6Gqk!AIypb;V*~Mi-a;kgnX6VaJVtSSY(Z2<6{_= zQFe7vWiQ(?q~QH3KNs&ZI3X(h`Nu>*3e=B%uz0j_m)1bd*|`pp$}`7e%^!@bWB&+oK8yJO>)i0@H~s+^MzpI|Z@5Os z2|Qz=n`bKynN=fb8;!O@+U*BD-@PP!o?Bn{0%M_?XE*Cr1kg;-ZaR&I;tDFevb=oB zIBTu;T0ze!mCPlxxLE25v-JM?^Ja1BISDg1MWqyI;96X{YB6f_Ca_5wkkheZx!c!R zu3yNVIW;{qr23yC90O9oekyZ?PbZdVPfkwfh$4J12`^*!5Bcwn{clVElh7(&VmgIX zQ|yn2S^mk)mk4_im;O))_Vq-9FZMv#%QVoBv^+yV7Jfm4U)JC&gk#+iH5wxJPWlZR zS@~B92Vd1EdP!JM!)LX?#<8&F>FJtl;+QC#H5+}q-)Y)7dUnvZ>rH3fW!<3a`aY|5 z{CX>>F}Gh2Yy#Rov+Zu+tlhBJyc>3n4rrVWhfbyJ3OdyTDa8usNSvX69>#)xKybG3 zH5BdvBmsVshQdDtNP;}mG!#AnNTTxRW0QR@HS)~RQ2cKaIQ}Fl{Eoy`o@b@~Yl5Gw zQ(RZ_DZbk0UmAWM2bBc%phmUslEhV>7eOLIU4Zi1ie&u1F`mm2=}8vd4szoX&*uHon9!-*c8 zqM`a@&>Vs=87l0u_&vbYJ-?p9)qBCr?yY9vtdb7=SbJ*byA8+0y=P|C2^?mwcDu~< z+p)3MZZ_Q(`C9G3HR-Ki6c=0C>#d&I@!K8O4{lKmGP#~z^PQ$EEBSBApl}==-0`H8 zr7@@e;7D5@voZAy&Ct{G7>Or_OgJy&A0-&Ecmp8wv0}L2z*Ebxt7$;;)9XJ^IC7@x z$BoB(ft<;2Pv&@i3r0fH>%TxgV8sLn)30Pfs4pohUg=lKspd)Eo%DvJGtIq5INsrO z{dZ-&A>))%{a5xoG(paE{GN>OE27ltc$~tl?|)JLpTT7uzCR!pufBiQ+6eKGl;on^ nFzzg%bUboqwdxBzMkKdmHU3Ta?{V^E#c#;^gK=a$Nyq;S?BHrO diff --git a/versionmod/draw/ft_textures.c b/versionmod/draw/ft_textures.c index 5cba2a6..98ff9c2 100644 --- a/versionmod/draw/ft_textures.c +++ b/versionmod/draw/ft_textures.c @@ -6,7 +6,7 @@ /* By: fgras-ca +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/12 17:39:11 by fgras-ca #+# #+# */ -/* Updated: 2024/01/17 21:38:40 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 13:27:19 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ @@ -36,7 +36,6 @@ void draw_texture_line(t_texture_params *params, float y, int textureY) put_pixel_img(params->w, x, y, color); x++; } - printf("draw_texture_line: texturex = %d, textureY = %d, color = %d\n", texturex, textureY, color); } void draw_texture(t_texture_params *params) @@ -56,32 +55,30 @@ void draw_texture(t_texture_params *params) texturey = textureheight - 1; draw_texture_line(params, y, texturey); y++; - }printf("draw_texture: y = %f, texturey = %d\n", y, texturey); - + } } void *get_selected_texture(t_structure_main *w, WallDirection wallDir) { void *texture = NULL; if (wallDir == NORTH) - return (w->t->north); + return (w->s_img.north_texture); else if (wallDir == SOUTH) - return (w->t->south); + return (w->s_img.south_texture); else if (wallDir == WEST) - return (w->t->west); + return (w->s_img.west_texture); else if (wallDir == EAST) - return (w->t->east); + return (w->s_img.east_texture); else { fprintf(stderr, "Invalid wall direction.\n"); exit_error(w); return (NULL); } - if (texture == NULL) { - fprintf(stderr, "get_selected_texture: selected texture is NULL\n"); - } else { - printf("get_selected_texture: selected texture = %p\n", texture); - } + if (texture == NULL) + fprintf(stderr, "get_selected_texture: selected texture is NULL\n"); + else + printf("get_selected_texture: selected texture = %p\n", texture); } t_texture_data get_texture_data(void *texture) @@ -90,7 +87,6 @@ t_texture_data get_texture_data(void *texture) texture_data.data = mlx_get_data_addr(texture, &texture_data.bpp, &texture_data.size_line, &texture_data.endian); - printf("get_texture_data: bpp = %d, size_line = %d, endian = %d\n", texture_data.bpp, texture_data.size_line, texture_data.endian); return (texture_data); } @@ -103,13 +99,12 @@ int get_texture_color(t_structure_main *w, WallDirection wallDir, selected_texture = get_selected_texture(w, wallDir); if (selected_texture == NULL) - { return (0); - } - texture_data = get_texture_data(selected_texture); - pixel_pos = (textureX + textureY * w->s_img.texture_width) - * (texture_data.bpp / 8); - printf("get_texture_color: textureX = %d, textureY = %d, pixel_pos = %d\n", textureX, textureY, pixel_pos); + if (textureX < 0 || textureX >= w->s_img.texture_width || textureY < 0) + return (0); + pixel_pos = textureX * (texture_data.bpp / 8) + textureY * texture_data.size_line; + if (pixel_pos < 0) + return (0); return (*(int *)(texture_data.data + pixel_pos)); } diff --git a/versionmod/draw/ft_textures.o b/versionmod/draw/ft_textures.o index 179aaa0703deca4abe9326d115d07f8ba287b04b..77114857ac76c45167e0c4044f56fd09f5b032f7 100644 GIT binary patch delta 985 zcmYk3L1+^}6ozLuX*QeeW~)(>RMFNhw1f)H#adfi#135#iXI9@JX8x355))-D?ER5Ivn+tO3Rl%l5P99h@)Ooar~!_pCpb-Q*r!9j{kxwFjS8&8T4GHgk*!K?db-1L2ZhvZ?MGZ7SxYd+}78gM{GiL1MbQ*yLcW!THbXI*$;|yL@TIVEBkra?kM5=4w6c$(Xr(8QXn#Wr288K0 z%>H~yKB_PFYx2bzQ(rF4;a7T`3lQ9ZZDPxzhFX#0jELz>Ryj9vVL>>%`d{eoVC5vj zVm;hY*@v*F9&Uv1#S!dw(bV7J1pm`*v!`(UYptx#Yo`7}E6w37))-iM$}ASK9r>X; zR+==`@p44OJmrId%j2>(IkDoAA5N6iS#$rasgEK5-xa>~#tJxUA{QU*%O{8OXLHHE zl#xz$E4DSH>{LEZv^nMx+dP#?WpdVch>n$y?^ezc(eK7sW+KGCN`Dhi83|=Do=PbR zBbPjtH!|t=0%aIT=H2>b~b8C%PyX>%PW(E&!K^>D&>xXJ1b*-g0CFo9j8 zu2H7pnXd(6{&ib4w1{y$t!@$1ZM+9x4ao!O@OKGAu*n~78bO<4DmG_zh}aEcg?pso z7yllAHfN;s{jliILSLYx<5M~)6pErgs(;mFkBxf~3vl=xj0U2G*L6`?*OIMvaVMK| z+@ITceYQuOKfNKR`cn?4uHv=yY_^8CGD;NY0_M2_5e{#MOTlPiuYJPgM4!$r_S$%T zTSX3+xonR)T;lKr4qwIL3MFQ&(>>iW%VzA88exsWpY8z;m!TZoCTK7bj5awJUbN$B z5Ly-ZGZ+=Ffh4^YbuYY?I;DAh$s{YVCDbL{gm|b2^-rOm(06w7paA#7%@7PXO1G`w zD`RcY>st#u!ZGow58vsB_)fhrjOL6F?u2)Vi#~XT+lvr<6xk*H?5~w5f)VMGHroY% TwQ`I_V$wmn8I-(*RHew@n&hlu diff --git a/versionmod/main.c b/versionmod/main.c index 94923ef..f80c870 100644 --- a/versionmod/main.c +++ b/versionmod/main.c @@ -6,7 +6,7 @@ /* By: fgras-ca +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/15 18:45:52 by fgras-ca #+# #+# */ -/* Updated: 2024/01/17 21:22:18 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 19:40:29 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ @@ -29,33 +29,37 @@ int setup_and_load_map(int argc, char **argv, t_structure_main *w, t_texture *te printf("Failed to load the map.\n"); return (0); } - printf("set_up_andloadmap %s\n", textures->north); - printf("set_up_andloadmap %s\n", textures->south); - printf("set_up_andloadmap %s\n", textures->east); - printf("set_up_andloadmap %s\n", textures->west); return (1); } +void init_structure_main(t_structure_main *w) +{ + if (w == NULL) + { + return ; + } + w->t = (t_texture *)malloc(sizeof(t_texture)); + if (w->t != NULL) + { + ft_memset(w->t, 0, sizeof(t_texture)); + } + ft_memset(&(w->s_win), 0, sizeof(t_structure_windows)); + ft_memset(&(w->s_img), 0, sizeof(t_structure_img)); + ft_memset(&(w->s_map), 0, sizeof(t_structure_map)); + ft_memset(&(w->s_player), 0, sizeof(t_structure_player)); +} + int main(int argc, char **argv) { t_structure_main w; t_global_struct global_struct; - w.t = malloc(sizeof(t_texture)); - if (w.t == NULL) - { - // Gérer l'erreur d'allocation - } - ft_memset(w.t, 0, sizeof(t_texture)); + init_structure_main(&w); global_struct.w = &w; global_struct.state.jkl = -1; global_struct.state.yui = 0; if (!setup_and_load_map(argc, argv, &w, w.t)) return (1); - printf("main textures %s\n", w.t->north); - printf("main textures %s\n", w.t->south); - printf("main textures %s\n", w.t->east); - printf("main textures %s\n", w.t->west); init_windows(&w); mlx_loop_hook(w.s_win.mlx, (void *)sleep_mouse, &global_struct); mlx_hook(w.s_win.win, 2, 1L << 0, deal_key, &w); @@ -65,5 +69,9 @@ int main(int argc, char **argv) { free(w.s_map.map); } + if (w.t) + { + free(w.t); + } return (0); } diff --git a/versionmod/main.o b/versionmod/main.o index 740226939f7b150208c6363f85a3e086e1d69224..ea402c26318d79ee47cb884e6ef08d2cf5b80a58 100644 GIT binary patch delta 1347 zcmZ`%T}V_x6rOwc&;9q0)&-RUL){`YN+Z+_LKvYQB7}Vi{4HFG3R}S!*)6-#WwCZS zNN=St(pyFZvQch7phCg=5)?ri1RE=)M6kq)oiq3DaxpwG-^@AR`I|YjQlF_!G|3r9 zGSDU+O%4R)TsWC%lnx{}sw;Cxc)UByA)px(W^?!T0`h!nx zmUDG7&!;By%zNiKl1ohpSzL^(Z!t-ptBE`%p<_HIj!HUGXV6m=@>&a7)EJXs;A{~Wdhs4=|#N7bBV&?qTPj4 z$iivUeb_QZE-q59-JbHh@>#c4e(JK7F;Sg!ax(W8<{Oq9a2NQwIesId5?5TXB^?xRvV6pSKYU4(<;7KGJ7ECXUISZUU`HW|>}>;EWndo) zc3x+xCOu;@^BdT9_@qyS@-G=2&MtrPfApgp2}ROUp~v}6{v$)c)#kXNPij_%QCFLE z66Rb%#0^)_eu@T(G6K!+c4-y{+(GFB@{O?Ku8}h)`0nn4es`HP0nMIvdpS)9g+tiW fE{(vPCumPtHQN`MGgm>u(_jzjUJ+sGaJl{g!TGB2 literal 3912 zcmbVPO>7%Q6dvcVp(L$I3j{Tw6%Z6CS>n(GR0X*SPPbA@OIu65pv}f!CnmPn+8>$} zwFH8J)hbdhNacz+v=SUERgnmmDo86N1QG|tDI94V| zzW3(M+nKk?o2l`!mRO8%iIEpcea2BjZr)oTC+RRr_KDYzSBsLq59q8KCxdcV;0~{ZeBlr?hd*bi5 zjCOalJ{toHwH={WLVny~|DM{J=^qNIZR9t4oTJ9phMfy@r5$7ky%T0V0-xpx*a3KO zzfpM3#B={#1 z{F($`mf&!!@+CEc=RZ9DI-Y+WE&y@dtZCaMSGMydH%BNA_fOBk%_C*cb*L}=6be>` z2?N93~Gmw?|Ca9o@7e_=S!^8(mVei!&+9XgN*66Nn>cywR=68^A+|B{6NiiAHQ z;P@Tp`|=o${cx{<&kKC)pPYYL;NusUSt{v)WKC;b%q2kw=s9D1`h&t&w zM76DOlCg?KvjjHy@|!ArYX@n6VDqVxr$Q4co3=X#J{ZZI)^oN|W6#3?{f9WfbdC9AexmUFxgG%{AB(&`ENTOZ za!&&XOC8N$Vg5=aMl}D|z>YDa{z>M4?qB@z6gGPQ3j4p2*9E88-}w6c{Wn@0m%Pl@ pA7F`Lk3}fzk1?a~9w1U>2l^|V2okLy_Mk@or&#{3;EThk|KEJb*^dAK diff --git a/versionmod/map.cub b/versionmod/map.cub index c8aa80a..e95b76d 100644 --- a/versionmod/map.cub +++ b/versionmod/map.cub @@ -2,8 +2,8 @@ NO textures/NO.xpm SO textures/SO.xpm WE textures/WE.xpm EA textures/EA.xpm -F 220, 100, 0 -C 0, 255, 255 +F 80, 75, 61 +C 165, 176, 196 1111111 11111111111111111111 11111111111 11111111111111111111111111111111111111111111111111111111111111 111111000001110000000000000000001 10000000001 10000000000000000000000000000000001111111111111111111111111111 @@ -17,7 +17,7 @@ C 0, 255, 255 100000000000000000111100000000000000000000000000000000000000000000000000000000000011111111111111111111111 1000000000001 100000100000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111 1000000000001 110000100000011111100000000000000000000000000000000000000000000000000000000000000000000000000000000000001 1000000000001 - 10000100000011 1100000000000000000000000000000000000000000000000000000000000000000000000000000000000001 1000000000001 + 10000100000011 1100000000000000000000000000000000000000000000N00000000000000000000000000000000000000001 1000000000001 110000100000011 1100000000000000000000000000000000000000000000000000000000000000000000000000000000000001 1000000000001 100000100000011111100000000000000000000000000000000000000000000000000000000000000000000000000000000000001 1000000000001 100000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111 1000000000001 diff --git a/versionmod/move/ft_collision.c b/versionmod/move/ft_collision.c index 33431c2..2f5b713 100644 --- a/versionmod/move/ft_collision.c +++ b/versionmod/move/ft_collision.c @@ -6,45 +6,48 @@ /* By: fgras-ca +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/11 14:09:52 by fgras-ca #+# #+# */ -/* Updated: 2024/01/11 20:35:31 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 21:40:56 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ #include "../cub3d.h" -void calculate_future_position(t_position_params *params) -{ - *(params->future_px) = params->px + params->pdx + params->collisionBuffer; - *(params->future_py) = params->py + params->pdy + params->collisionBuffer; +void calculate_future_position(t_position_params *params) { + *(params->future_px) = params->px + params->pdx + params->collisionBuffer; + *(params->future_py) = params->py + params->pdy + params->collisionBuffer; + + printf("calculate_future_position: Current px = %d, pdx = %d, collisionBuffer = %d\n", params->px, params->pdx, params->collisionBuffer); + printf("calculate_future_position: Current py = %d, pdy = %d, collisionBuffer = %d\n", params->py, params->pdy, params->collisionBuffer); + printf("calculate_future_position: Calculated Future Position: x = %d, y = %d\n", *(params->future_px), *(params->future_py)); } -int check_collision(t_structure_main *w, int future_px, int future_py) -{ - int future_ipx; - int future_ipy; +int check_collision(t_structure_main *w, int future_px, int future_py) { + int future_ipx = future_px / w->s_map.mapS; + int future_ipy = future_py / w->s_map.mapS; - future_ipx = future_px / w->s_map.mapS; - future_ipy = future_py / w->s_map.mapS; - return (w->s_map.map[future_ipy * w->s_map.mapX + future_ipx] == '0'); + printf("check_collision: Checking Collision at Future Map Index: x = %d, y = %d\n", future_ipx, future_ipy); + printf("check_collision: Collision Status: %s\n", w->s_map.map[future_ipy * w->s_map.mapX + future_ipx] == '0' ? "No Collision" : "Collision Detected"); + + return (w->s_map.map[future_ipy * w->s_map.mapX + future_ipx] == '0'); } -void calculate_future_position_right_left(t_position_params *params) -{ - double angle; - int collision_px; - int collision_py; +void calculate_future_position_right_left(t_position_params *params) { + double angle = params->pa; + int collision_px; + int collision_py; - angle = params->pa; - if (params->direction == 'd') - angle += M_PI_2; - else - angle -= M_PI_2; - *(params->future_px) = params->px + (int)(cos(angle) * 5); - *(params->future_py) = params->py + (int)(sin(angle) * 5); - collision_px = *(params->future_px) + (int)(cos(params->pa) - * params->collisionBuffer); - collision_py = *(params->future_py) + (int)(sin(params->pa) - * params->collisionBuffer); - *(params->future_px) = collision_px; - *(params->future_py) = collision_py; + if (params->direction == 'd') + angle += M_PI_2; + else + angle -= M_PI_2; + + *(params->future_px) = params->px + (int)(cos(angle) * 5); + *(params->future_py) = params->py + (int)(sin(angle) * 5); + collision_px = *(params->future_px) + (int)(cos(params->pa) * params->collisionBuffer); + collision_py = *(params->future_py) + (int)(sin(params->pa) * params->collisionBuffer); + *(params->future_px) = collision_px; + *(params->future_py) = collision_py; + + printf("calculate_future_position_right_left: Current px = %d, py = %d, direction = %c\n", params->px, params->py, params->direction); + printf("calculate_future_position_right_left: Calculated Future Position: x = %d, y = %d\n", collision_px, collision_py); } diff --git a/versionmod/move/ft_collision.o b/versionmod/move/ft_collision.o index 6f3da8c4e386b51fc9a911f0ebf4fd7b55367ab5..72108ee2518bcdca9b871bf25e8ab9194ccda8c0 100644 GIT binary patch literal 3704 zcmbtW|7%-S6u(L5+Rb(^lQIG;a>Y&RXdi9a53^MFT$k-B+bG)t6((7lytHv?5?}6v zR&*8ybMZ0g5Bp&Q{{cbJAEfLj?HFn+{!qjpsvz`-2*C+z6c)8u&$(Zc=QV+-2kyJ~ zeD3F*d(OFEk~d>#PK84uq9jC~BTY@Agw*#o#}*%2WFP4xzZj4I9=FTi+1GxE*yT6s zwjZneQvS=InZsku23u~bKseSViT-z>xb{G39 zS8zo|?H68Yd#deQJwEpc;rOIAae4iIATbJwRm)zb9Nz->RsVwz!-V*;%AJRQmN6@U z?h0t@&cmH@Y}=1-Lr|?DT7?L`4STZIoVe9f4? z#~BX}02D*K5BH#EToO21`qQ}m)r@WASNRS#SuX)=Xah-j7QW$U0r<2NJ{$~bfE$NL z1Dsfc&1Dert!T#halK|7S*sa*wbjsOIkqL)J^#|KBJ7AC-x9I%(-W@<1xsXnw8qz+ z!W>}vHiy)YSNzyk>l3kT`!Cnm?_(VaNhNbBFPCIaBI7a7brQuwDa*2j{5YNTT-V7n zT3n#d(!=Q?T1=}^s*uZNOTaqeWipP-=f#EX#NT4WpBnu)e=77eJ;h_EQ;pbFpke_C zEj8z)t|S`kKz0aZ^RskP*uKd1@MPca@CGo%+yvqv-{Pk+ z{}rD<1kfeKL2ls>jhc^L>*~55;v7EN=7T1?$j>{irn_4Ha$!#V@%ozy=KffK&vOCn z2sE72WfTD9D<01cu;(Sdf`NhXoS@G@Yvt#aHaN+!=4~)j?avJcfRM_J3_8<6l*NbhQi;GxZ%9p#P5pc+k%Qd697%hp)?go|L$r@0iB_Lh_Hd;ZyL5g8pR)T(|hQiL3i^ zS;N(RA!ccDo+W3XXRhey)W~&mNs~DXjF{;pOA>RYR3fHZ5K5{rKMy~L#LO3%W5OFY zTw=-86{*kWJ+tT*ijK<`!3I4!bBTwx6z>kk2rK6QGh_V^y6&*0vJN|vR= zW7>p@A2}$`KtuZxR06UlpK6RRC@Ox{pMXg<4)T8e=Tpz8b?$jUvD8|aq%Q3#w`zX$ z`0*V_pSpci9*Cu;DIe+fcnVwX|1tOvf?|t~;Qr&iR`zQDTdj>Ix8?djp#stiO}$B| jD|_^*?>)}nkmnD7BZ8vWZ$C`7vR{(%v!F4Ib^E^nj;ZpJ delta 587 zcmew%^Fe5W2Ga-DiCXd#eZ9CR#2)_4FZV0dqx0!xRYrr!g^XI0-!ZZ=#%}(~=*-AI z!J|9&$H~K!H?npIg)snuE1y6clQS^V3z~o(k@cW(5^L0Hi?xYz&Z&pDf5O&X_#8 zklk_ePIkNcFJM^)1|}fQ48(u_LjVuRS|C6d*Mf?(0Oi<$7^dC`O+82+1fr1C1APux zp9B#%gIfU8FcC=uvIQrR#5pGGav3v*O-|$zXF9+zxr*x^6DQN;C~h;Z0;n-S(OKMP zOrA`W8M(zKZ(w7Y{DxZvnXAL2!Wsbb956hDCui_za3+9wK%g^uA)D~zH9RUzJxIEN z+zCvRg?R0lHZV;N0#XL7lPB@oaT +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/11 14:17:56 by fgras-ca #+# #+# */ -/* Updated: 2024/01/12 20:28:07 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 21:12:41 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ @@ -35,37 +35,44 @@ int *kill_prog(t_structure_main *w) return (0); } -void adjust_player_angle(t_structure_main *w, int key) +void adjust_player_angle(t_structure_main *w, int key) { - double angle_adjustment; + double angle_adjustment; + printf("adjust_player_angle: Key pressed: %d\n", key); + printf("adjust_player_angle: Before adjustment - pa: %f\n", w->s_player.pa); - if (key != 65361 && key != 65363) - return ; - angle_adjustment = 16 * ((PI / 3) / NUMRAY); - if (key == 65361) - { - w->s_player.pa -= angle_adjustment; - if (w->s_player.pa < 0) - w->s_player.pa += 2 * PI; - } - else - { - w->s_player.pa += angle_adjustment; - if (w->s_player.pa > 2 * PI) - w->s_player.pa -= 2 * PI; - } - w->s_player.pdx = cos(w->s_player.pa) * 5; - w->s_player.pdy = sin(w->s_player.pa) * 5; + if (key != 65361 && key != 65363) + return; + angle_adjustment = 16 * ((PI / 3) / NUMRAY); + if (key == 65361) + { + w->s_player.pa -= angle_adjustment; + if (w->s_player.pa < 0) + w->s_player.pa += 2 * PI; + } + else + { + w->s_player.pa += angle_adjustment; + if (w->s_player.pa > 2 * PI) + w->s_player.pa -= 2 * PI; + } + w->s_player.pdx = cos(w->s_player.pa) * 5; + w->s_player.pdy = sin(w->s_player.pa) * 5; + printf("adjust_player_angle: After adjustment - pa: %f\n", w->s_player.pa); } -void handle_movement_keys(int key, t_structure_main *w) +void handle_movement_keys(t_structure_main *w, int key) { if (key == 119 || key == 100 || key == 115 || key == 97) - move(key, w); + { + adjust_player_angle(w, key); + move(w, key); + } } int deal_key(int key, t_structure_main *w) { + printf("deal_key: Key received: %d\n", key); if (key == 65307) { kill_prog(w); @@ -74,12 +81,10 @@ int deal_key(int key, t_structure_main *w) { adjust_player_angle(w, key); } - else if (key == 65362 || key == 65364 || key == 114 || key == 102) - { - } else { - handle_movement_keys(key, w); + handle_movement_keys(w, key); } + printf("deal_key: Key handled: %d\n", key); return (key); } diff --git a/versionmod/move/ft_key.o b/versionmod/move/ft_key.o index da2846f541692dfab217ae8c76145549078486f4..e2b6f647e40329901fc02cf5ac35093e36666447 100644 GIT binary patch literal 4064 zcmbtXT}&KR6ut|!e*&{x`+&umX``*iGC*w%5>r=jW&DZ3T2eGM+kw3cTlOzAv%pps zA*2oK`a_JV^})o%2YuHE6CVVtMG|93V;U1*`hW>a8xeRQ?I!h{JNL48XLn+vC)qpq ze&_qnIdlI8-U_|+T#e61g!#w`QW^=Akh68Aevoy8q=D3v4dubxy?Xw4efp-V=W{E1 zAq2mkcIO#v)$`Z&{K5(BmJ6Zf z{8jzkdsv|S!q?ke%)6oZC)c2msPfmf4dwNvsIE+4lbn+jxLz#!RBri|yM);F(0LU) z%7xFsx32hE@O32++TxTUUb*-Qq?6T9+ag5x zv6QE8-W_OlSXMas`aJWo+(?QlEv)nrShmt+IC6hI&J>hgkxb@7alZloSDZL(l5=dP zpjIw_txUec_mVX4%OJmja%}!ZezQ`33*;*($ENzSt@>scuSh$?4+m*0pV^$wZI0Ue zppDpd&|3CRXpPLFLhmNL;#TQoRRFGd`CL)YXVwa#V)dOil`A&EcF8nA*fp_l9(q0U8?-Rh0XN zjASG(T;%GlH#h$H`R%9w)Sf+c=ivQ8C;R>&>F(<4P#@{-&m`@P+SaBW*IJv~GHlp3 zaqO7Zdi+riGszBU{qVzW-u-effekc=SS|d}_B#*aJAab+#{9mfx?Q_x;ZQdM{s8y2 z-~|wB@L#Oys^7`+cJ4a>0k?g%ff|rAT_5-N;8SR8y3tKkfW{C9`v{wD|9i}jke6X8 zJILR#TPm%#>X!xIl^yaj0WRo1iO=2Kk0#=1{~`Vb+CB_ zY}kWudf+1-_<6uF{_}j{*}4Gsz6bw9&i|P6**XD6qBd@4ZGa5N;_-0WObwDmd@LNH zmTji8;n7$!k{T_8VhLlAlBh{(861gOcuEN!i`mtVBT1XFq#Y##DT`RKByrA1IFTBm zcr>vJi{OZebA;vLI-%hn$5m(FX!uNbA_#^!?qPwyfgqS07yHwVUvlUb{2x5iy}O2j`c@$Z%JaTos~@S){B_@BG@-#c`o zU_vmF_a|pa`aSS*5By7x<2>M>fTI3yT>M{n{B?}?jJEv$i<(yH^yCjaX%2v$|h{1AD*`9JcmTjq;W&D>6lHl zh+!K<>$fbTnJH&5kV@crCR#FOQw_dR&6aHp4D<0|GNZvIlcuJf1r0``L*b}tBq*=s z|2T>7?;cgEjJX#kD{!huQZP{f9ZuX$Ub( zyYdR$o&P8}Fy?>Nw}BR8%6kHaMC8AL1Ia}F0>bYf>RScCpFRAOi}lGS>KD&WaEiXn z8|Qi%!@iq~-&4FN-Stm$y$U|r-1VOWC&qN^Kjr$%vKabqJq4`V`p@8kgPmoqbI0Jl zE%c2Xua+BK?R-OC<}ZwQBj$1IF{XR%0U}E{DPZ`|lx*(#3xKnleudX>%VOxe_5T1| C?^yx> delta 958 zcmZ`#L1+_E5dHg;rr9LBo3!Gl+8C>%L6lIz)>CSgz=ELFrVyl;fCQljYrCmZj3$JZ zhM)vSy!9-2k>Jf!N((k1x_Iy=MoWK$gT}F9h#O+* zd|VjJrhnevXH1tcnZ`s}c?eZuWMZ2$)==)2ca_=b-YzCuAzEuFz6=3o?p>oisr)S~ z;SFVVoppiCHeBVWZxXySXOY{Drege1#V#qSg!@pBEnVogLx~3iJ=5Do^`KCF3@AE&riLyY0ka*nZ}67{NPq!n2sfC<&m(g05mr z>OD$U8_HHTVXW`Xt#tuaqOy0DUzZ%Vmx8C?$%e5MCv~(53LSijP{vN8KSn3ZQRv`& z`CZr{3SwIn>vK?YsKNt^LyPzyU;_Jymmq5kT0Kx^0A^EL8dz;F|Ly%scDC zEF?tr*%qyeMgl~$(+5qp6c5%%52@d`>eTN>Z|$2le}L~HakSTF9nQIYqi+x4*sZ-u zQ%3J-hQa4ng&34vsks$59G1R%m6B>g?;^c1l;r=eYu=s>97?B5|>hZg3j`p8< zIdEx=f3iWsa}=heP$w-)A +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/11 14:08:25 by fgras-ca #+# #+# */ -/* Updated: 2024/01/11 20:35:09 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 21:09:26 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ #include "../cub3d.h" -void move_forward(t_structure_main *w, int key) +void move_forward(t_structure_main *w, int key) { - t_position_params params; - int future_px; - int future_py; + printf("move_forward: Key pressed: %d\n", key); + printf("move_forward: Before move - px: %f, py: %f, pdx: %f, pdy: %f\n", w->s_player.px, w->s_player.py, w->s_player.pdx, w->s_player.pdy); + t_position_params params; + int future_px; + int future_py; - if (key != 119) - return ; - params.future_px = &future_px; - params.future_py = &future_py; - params.pdx = w->s_player.pdx; - params.pdy = w->s_player.pdy; - params.collisionBuffer = COLBUF; - params.px = w->s_player.px; - params.py = w->s_player.py; - calculate_future_position(¶ms); - if (check_collision(w, future_px, future_py)) - { - w->s_player.px += w->s_player.pdx; - w->s_player.py += w->s_player.pdy; - } + if (key != 119) + return; + params.future_px = &future_px; + params.future_py = &future_py; + params.pdx = w->s_player.pdx; + params.pdy = w->s_player.pdy; + params.collisionBuffer = COLBUF; + params.px = w->s_player.px; + params.py = w->s_player.py; + calculate_future_position(¶ms); + if (check_collision(w, future_px, future_py)) + { + w->s_player.px += w->s_player.pdx; + w->s_player.py += w->s_player.pdy; + } + printf("move_forward: After move - px: %f, py: %f\n", w->s_player.px, w->s_player.py); } -void move_backward(t_structure_main *w, int key) +void move_backward(t_structure_main *w, int key) { - t_position_params params; - int future_px; - int future_py; + printf("move_forward: Key pressed: %d\n", key); + printf("move_forward: Before move - px: %f, py: %f, pdx: %f, pdy: %f\n", w->s_player.px, w->s_player.py, w->s_player.pdx, w->s_player.pdy); + t_position_params params; + int future_px; + int future_py; - if (key != 115) - return ; - params.future_px = &future_px; - params.future_py = &future_py; - params.pdx = -w->s_player.pdx; - params.pdy = -w->s_player.pdy; - params.collisionBuffer = COLBUF; - params.px = w->s_player.px; - params.py = w->s_player.py; - calculate_future_position(¶ms); - if (check_collision(w, future_px, future_py)) - { - w->s_player.px -= w->s_player.pdx; - w->s_player.py -= w->s_player.pdy; - } + if (key != 115) + return; + params.future_px = &future_px; + params.future_py = &future_py; + params.pdx = -w->s_player.pdx; + params.pdy = -w->s_player.pdy; + params.collisionBuffer = COLBUF; + params.px = w->s_player.px; + params.py = w->s_player.py; + calculate_future_position(¶ms); + if (check_collision(w, future_px, future_py)) + { + w->s_player.px -= w->s_player.pdx; + w->s_player.py -= w->s_player.pdy; + } + printf("Move Backward: Player position after moving backward: x = %f, y = %f\n", w->s_player.px, w->s_player.py); } -void move_right(t_structure_main *w, int key) +void move_right(t_structure_main *w, int key) { - t_position_params params; - int future_px; - int future_py; + printf("move_forward: Key pressed: %d\n", key); + printf("move_forward: Before move - px: %f, py: %f, pdx: %f, pdy: %f\n", w->s_player.px, w->s_player.py, w->s_player.pdx, w->s_player.pdy); + t_position_params params; + int future_px; + int future_py; - if (key != 100) - return ; - params.future_px = &future_px; - params.future_py = &future_py; - params.pa = w->s_player.pa; - params.collisionBuffer = COLBUF; - params.px = w->s_player.px; - params.py = w->s_player.py; - params.direction = 'd'; - calculate_future_position_right_left(¶ms); - if (check_collision(w, future_px, future_py)) - { - w->s_player.px = future_px; - w->s_player.py = future_py; - } + if (key != 100) + return; + params.future_px = &future_px; + params.future_py = &future_py; + params.pa = w->s_player.pa; + params.collisionBuffer = COLBUF; + params.px = w->s_player.px; + params.py = w->s_player.py; + params.direction = 'd'; + calculate_future_position_right_left(¶ms); + if (check_collision(w, future_px, future_py)) + { + w->s_player.px = future_px; + w->s_player.py = future_py; + } + printf("Move Backward: Player position after moving backward: x = %f, y = %f\n", w->s_player.px, w->s_player.py); } -void move_left(t_structure_main *w, int key) +void move_left(t_structure_main *w, int key) { - t_position_params params; - int future_px; - int future_py; + printf("move_forward: Key pressed: %d\n", key); + printf("move_forward: Before move - px: %f, py: %f, pdx: %f, pdy: %f\n", w->s_player.px, w->s_player.py, w->s_player.pdx, w->s_player.pdy); + t_position_params params; + int future_px; + int future_py; - if (key != 97) - return ; - params.future_px = &future_px; - params.future_py = &future_py; - params.pa = w->s_player.pa; - params.collisionBuffer = COLBUF; - params.px = w->s_player.px; - params.py = w->s_player.py; - params.direction = 'a'; - calculate_future_position_right_left(¶ms); - if (check_collision(w, future_px, future_py)) - { - w->s_player.px = future_px; - w->s_player.py = future_py; - } + if (key != 97) + return; + params.future_px = &future_px; + params.future_py = &future_py; + params.pa = w->s_player.pa; + params.collisionBuffer = COLBUF; + params.px = w->s_player.px; + params.py = w->s_player.py; + params.direction = 'a'; + calculate_future_position_right_left(¶ms); + if (check_collision(w, future_px, future_py)) + { + w->s_player.px = future_px; + w->s_player.py = future_py; + } + printf("Move Backward: Player position after moving backward: x = %f, y = %f\n", w->s_player.px, w->s_player.py); } -void move(int key, t_structure_main *w) +void move(t_structure_main *w, int key) { move_forward(w, key); move_backward(w, key); diff --git a/versionmod/move/ft_move.o b/versionmod/move/ft_move.o index ad3989a19025e16dfe935ce9a6c19085bae720ea..39b08a6c606021346458af70f9731e5dd2824dff 100644 GIT binary patch literal 5232 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 diff --git a/versionmod/parsing/ft_find_map_start.c b/versionmod/parsing/ft_find_map_start.c index 8c8fe3a..9296877 100644 --- a/versionmod/parsing/ft_find_map_start.c +++ b/versionmod/parsing/ft_find_map_start.c @@ -6,7 +6,7 @@ /* By: fgras-ca +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/15 20:04:23 by fgras-ca #+# #+# */ -/* Updated: 2024/01/16 17:47:49 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 11:54:07 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ @@ -43,7 +43,7 @@ bool handle_colors(int fd, t_texture *textures) { line[i] = '\0'; printf("Ligne lue pour les couleurs: '%s'\n", line); - if (process_color_line(line, textures)) + if ((line[0] == 'F' || line[0] == 'C') && process_color_line(line, textures)) color_count++; i = 0; } @@ -100,9 +100,5 @@ bool load_cub_file(const char *filename, printf("No map data found in file.\n"); result = false; } - printf("loadcubfile %s\n", textures->north); - printf("loadcubfile %s\n", textures->south); - printf("loadcubfile %s\n", textures->east); - printf("loadcubfile %s\n", textures->west); return (cleanup_and_close(fd, map_buffer, result)); } diff --git a/versionmod/parsing/ft_find_map_start.o b/versionmod/parsing/ft_find_map_start.o index 07a31ed61627016ff75603a6e2492186f82e0167..8866003747fa15d9c905ac1016ef9d79f86ef9f8 100644 GIT binary patch delta 692 zcmY*WO-K}B7@qf=*`Jx6pRHA=p+5t~#e*n>g37LB&2B-k)UlJd&`Y?4)SkU{s#vo3YiHo=froj&_j%vv`S|90>*0;DQ?P{d&7Nzl&MD z7tKZmUyU6vBu&%C-0YedagzEFmJ{XN=zqNdvQuf)>;T7(fqLQ18-3_{oq(pO`eF=pLk*VVLGysADvlZN@SzH^t74r z){xS7mHs$toVBZ{mZDa0$?}8Gikec?a|~O4n2_-dnRuBQC+4EQT$be|Q{t*Juimf+ z2b@(_)ErO8ZjW%n>YSoBDe7~%OS`CM9`J+r*nSX1cYecD67ncHfoc1jvlsbDMZQ4VVYwH3lPOmuCQA@P&@65+#*3Fxz(dq_<-9DPZqFWSOMq|>=i){nH-GX>$ gpx-Nq4;GfZ0zJk@uSiq)h`eQ zw3gDF>=uUD2s?>mYy@}NaaP1HwjP>fk_4seC!dgor zTyL`*^>P}Al|l8}8zOK;$%MUX{+(BqmYz6z*UjmIpAh^$^6^-C9xGj(K7H!)%-IX2 zGpWH#CT2o+Vxv@5%18U=<%71Sq@k!2{f&RPm&^+5ScxPtr!KQm?9#HVj%lsH6g<)j zhAUGBLgU$QZH=)LSk;{*cnU&@Oefpi>f#lC>dyEVL5&FNy3g~B3R!`SV?&6y=-kVe z#)RP{_xTO*S}{SriVCUAf*Kdp7g#Zz@ehJ(3+fMn-zM;Xe4c-Jhf`!6D&nS-+|DTi z??lYzVvN+HulDYiI_BOv}^K>X7#Kh(K`{1G}2fq2AWF7`w|%TfrYl`(64VF;drqLpDeRO}(t ztc35itb~!{FHE=x!`{z6Va(3TVU?D2fR;3b`}S^GSJALtd02%Ub>(&h2cj-(q7u!r Vk64Xnjq`ky2xZKw{n%kye*tx{_Ll$v diff --git a/versionmod/parsing/ft_parsing.c b/versionmod/parsing/ft_parsing.c index 0522360..b504578 100644 --- a/versionmod/parsing/ft_parsing.c +++ b/versionmod/parsing/ft_parsing.c @@ -6,12 +6,33 @@ /* By: fgras-ca +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/11 14:43:46 by fgras-ca #+# #+# */ -/* Updated: 2024/01/16 15:22:35 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 13:21:28 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ #include "../cub3d.h" +void calculate_map_scale(t_structure_map *map_info) +{ + int maps_x; + int maps_y; + + map_info->wd.width = WIDTH; + map_info->wd.height = HEIGHT; + if (map_info->mapX == 0 || map_info->mapY == 0) + { + fprintf(stderr, "Erreur: mapX ou mapY est zéro.\n"); + map_info->mapS = 0; + return ; + } + maps_x = map_info->wd.width / (map_info->mapX * 4); + maps_y = map_info->wd.height / (map_info->mapY * 2); + if (maps_x < maps_y) + map_info->mapS = maps_x; + else + map_info->mapS = maps_y; +} + bool init_map_info(t_structure_map *map_info, int maxWidth, int height) { map_info->mapX = maxWidth; @@ -39,7 +60,52 @@ bool copy_map_data_and_check(t_map_params *params) return (true); } -bool process_map(const char *buffer, int length, t_structure_map *map_info) +bool find_player_position_and_direction(const char *map_content, int length, t_structure_map *map_info) +{ + int i; + int line_number; + int column_number; + bool found_player; + char current_char; + + i = 0; + line_number = 0; + column_number = 0; + found_player = false; + calculate_map_scale(map_info); + while (i < length) + { + current_char = map_content[i]; + if (current_char == 'N' || current_char == 'S' || current_char == 'E' || current_char == 'W') + { + if (found_player) + { + printf("Multiple player start positions found. Invalid map.\n"); + return (false); + } + found_player = true; + map_info->player_x = column_number * map_info->mapS + map_info->mapS / 2; + map_info->player_y = line_number * map_info->mapS + map_info->mapS / 2; + map_info->player_direction = current_char; + } + if (current_char == '\n') + { + line_number++; + column_number = 0; + } + else + column_number++; + i++; + } + if (!found_player) + { + printf("Player start position not found. Invalid map.\n"); + return (false); + } + return (true); +} + +bool parse_map(const char *buffer, int length, t_structure_map *map_info) { int maxwidth; int height; @@ -62,35 +128,8 @@ bool process_map(const char *buffer, int length, t_structure_map *map_info) return (false); } if (!init_map_info(map_info, maxwidth, height)) - { return (false); - } - return (copy_map_data_and_check(&map_params)); -} - -bool parse_map(const char *map_content, int length, t_structure_map *map_info) -{ - t_map_params map_params; - int max_width; - int height; - - max_width = 0; - height = 0; - printf("Received map content (length = %d): \n%s\n", length, map_content); - map_params.map_info = map_info; - map_params.buffer = map_content; - map_params.length = length; - map_params.maxWidth = &max_width; - map_params.height = &height; - map_params.currentWidth = NULL; - map_params.isNewLine = NULL; - get_map_dimensions(&map_params); - if (max_width <= 0 || height <= 0) - { - printf("Invalid map dimensions: maxWidth=%d, height=%d\n", max_width, height); - return (false); - } - if (!init_map_info(map_info, max_width, height)) + if (!find_player_position_and_direction(buffer, length, map_info)) return (false); return (copy_map_data_and_check(&map_params)); } diff --git a/versionmod/parsing/ft_parsing.o b/versionmod/parsing/ft_parsing.o index bce51c0e713c7aa47ff3559221ba531cead21fcb..3aaf22e67883bf3888b5d09b670b85ed7c5be72a 100644 GIT binary patch literal 4088 zcmbtXU2GIp6uw(pilt>sB?N@%sKpd5YfEZ^ptun)j0q)cVMC21>##f9j_mGiW@e!! z6som`$yhZ(6G(jE0TX=kNo=$six?JOOns{_h6hZFHKDXMtfsM^bLZaOVY-_bJ;}_u z_dDPDxxce}hVI{669^C?0kWHvdjch7pt0Nzvu2pAAx&gH`1oH@+5S}?`CXFjp=sHn z(}nP%g_VT3&B$bp+jPRMqj_sJqE5JNG@t8`ojQyp+tYJhZqMci?qqD#$I?)9?((1Nm?MRzL7lL2WS^2zd^UCb+(JI@`OgTh`A+7h7 zKh6r@=tO6o?gix8KMMbG9PRQ7+?b`o!@$Cl!&8JeIIBc5hm=D>;x=F6GOd)4l~T7n zZ3ix!ox3C3(WwGmKw5zoUA2hn2A#uom=clhP5}t>A;%{Ho|XfX!7Jn}ogW^WKVYqg z_d%-}-qdP<_u=5^M?fDQnj_XmUy*Ef?oPNV0+_-Hx5F$ivZ=+6eeK%aCjvKrDh4K# z!F&1n;Inz8%?HSoM>T1X}jnHDCK-myyYDef|V1zCNU|hTC zo#2O?mzI`-SLocxY~cO8Re4=2OlB4)^Rk`01e19_Av?8O+F*1tY|zepfwJ)yC=M7W z6t)t@;amoN)1jAaIw_CQap+Bfo&bGYE>QOv6zDAT8Uqi$0UbI%nm=9d(23FfnWvrT z1OWDp@)Wad%$v1l-atzCI3_M{9d~&3F5`JPKIfh8OITACN+VQOssQN4g#6q(Hb|?E z<+^np>m-C4hMF^WN@*qAE9p7ZZ%V3ZNhhy=Y3QK_mqo~4MN6p($y`zv}{V1vMFUyH6+tg3`@%Dre6kULDoEEuVZ%CviyzIT5^ABxdq3J*5$H-&CbL4 z8tAro_-qaUdkP+$Prqyhpc38zIK~nFY_0&?U4>7p;QOoKZvl?+!+dCLt^qTv@ZYV1 ze_RFsvjunCUW@(sq;4zL^WRGOcktKhe*;3R3qvWj79nZ8h*#FbP$ zmx4nbg98{dp{o+pN~nfGk|zw!Qi+z)EN0X)Nu8wGB|x%3(1D_*Qm$iGiK`^8X9rm~ zp;$^x$s}U&el>pVVVr0tuDRBn?%CVBp|h7BO*6upkM|P~&)M5UiV3O8Qi{ zsPc&?SwqWMNfL{}O%p!`sgK2yaCgBpFnNV*IKOPSF2eT%<)8=0DHk~I3lu!-@LQ>b z|A8O~;&6;hcne=gjE`|z;X!$fVDBO)RYpk)B%fx@W_$SQPU(LLw7rI zJq@2ju)&vE4Z*i-8#@`i-vZwo&k+GUuKRH(&Ni34F3H1mj+}0 zSN~4%#hBi`0$tL}^B1w>5mCQ@UW5kvRJc*H+{Yr$5@pI|}|%T=Yf-~S)#qFXos delta 1100 zcmZ`%O=uHQ5Z<3`l9%6Ap)s}CElFrBp{63;TGWf}Rjnvg5n@QzT5Z#i1oa>$RuI8U z>Yx;*HxE4&skdJBC@3g+sD~aT=%E!nT2boE+qdN*_`%G+`R1E>^Y*=;z3l_-tY(H5 z2Ks=h+i*sIt`5Sc-Uo+$DHzj-jSI_<#$UjDy$f#ZwcT7lw0t9A8TtNmPRW_R>6ES6 zV$~|mRT@sEVP$8W%2eZ;b;8P&4~<%(OdU=eL(nqDpkwS;kHa6Mcl5I2Vv|1OG4p|T zD(ct1L;^uY=|Sp_n^uCVoZrDb+>3NW)j!GRg`@{Q_!DZ1`vLOFW0={isEVh!C6p6f zQ{aA<`x@6%p7h&7$A`l8eXe=R{Sx`iOQG!0SO`8IEv_~S)nctaU6~pzK{I$gP_50C zoO&JhuzZR#P67XsVv`o(Lo?8R@3=S*MV4rKKZUY>DeKKod_dx#;hI1^L-V@5Are7+ z2+iZ)5sA>ybhLvMAU?UDOS~YAfmiU&O>jOU@i)ZrX@i)=KNP&T!BJ8F1SUd>=BiXh zmEJCIB_6MTm*0?hQ{vOq9^vg$c0*-I@YFkw=Jl_;e3KtT9=H8ZBX8WL|1?^Yc=-Sy zC0;(jSBW?AYk6o^GwkJ)U5-Vovn gB;z()7P(cp7`NeUJgBbmZY%LLTNKI$XSO1dzZMx7`Tzg` diff --git a/versionmod/parsing/ft_textures_and_colors.c b/versionmod/parsing/ft_textures_and_colors.c index 351dd9c..9fb6ce8 100644 --- a/versionmod/parsing/ft_textures_and_colors.c +++ b/versionmod/parsing/ft_textures_and_colors.c @@ -6,7 +6,7 @@ /* By: fgras-ca +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/16 16:19:13 by fgras-ca #+# #+# */ -/* Updated: 2024/01/16 17:31:12 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/20 11:15:41 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ @@ -37,7 +37,6 @@ bool parse_texture_line(const char *line, t_texture *textures) textures->west = ft_strdup(path); else if (ft_strcmp(direction, "EA") == 0) textures->east = ft_strdup(path); - printf("parse texture %s\n", textures->north); return (true); } @@ -66,25 +65,41 @@ bool handle_map(int fd, char **map_buffer, int *map_length) return (true); } +bool parse_number_from_str(const char **str, int *number) +{ + *number = 0; + while (**str >= '0' && **str <= '9') + { + *number = *number * 10 + (**str - '0'); + (*str)++; + } + if (**str != ',' && **str != ' ' && **str != '\0') + { + return (false); + } + return (true); +} + bool parse_color_line(const char *line, unsigned int *color) { - int r; + int r; int g; int b; - int i; + const char *ptr; r = 0; g = 0; b = 0; - i = 0; - while (line[i] != ',' && line[i] != '\0') - r = r * 10 + (line[i++] - '0'); - i++; - while (line[i] != ',' && line[i] != '\0') - g = g * 10 + (line[i++] - '0'); - i++; - while (line[i] != ' ' && line[i] != '\0') - b = b * 10 + (line[i++] - '0'); + ptr = line; + while (*ptr == ' ') ptr++; + if (!parse_number_from_str(&ptr, &r) || *ptr++ != ',') + return (false); + while (*ptr == ' ') ptr++; + if (!parse_number_from_str(&ptr, &g) || *ptr++ != ',') + return (false); + while (*ptr == ' ') ptr++; + if (!parse_number_from_str(&ptr, &b)) + return (false); *color = (r << 16) | (g << 8) | b; return (true); } diff --git a/versionmod/parsing/ft_textures_and_colors.o b/versionmod/parsing/ft_textures_and_colors.o index dadc2b101f311ab8113f4456a4508be812ac9a54..58ed609a7a29b27367f60704f61f696a8c44e552 100644 GIT binary patch delta 1616 zcma)5T}V_>5I$#jTlcuDdv}*w1F7|=vM@@DM3Tzl!igxYkRlRMG^ns_yFx*=f)ZU8 z$(SG?GD--FdMJdjA7br?t+y>G>?t1%G=12p2Z^9&?vGuig+91@=6v(boS8XiFI9A} z>925ghaRpOaKQ~v*%etlT}%kLIme)~cHM=-zj3uS7w$TCm0H={F2QPJ+Tyt_>rH8SBSs;M zMmVlbFTV$u{cM!_7uhqjUh3z^u-;6YOnO#Spj+zdY*i|)PEbf%oivvjS}-SS)$DWt zt*q=xaoUkh^~JO)+1EHB6Me|(AEll)VtcZ@H`Ns}BB(FD(NI@vON^qXZkvg7q??rg znJr?rct|Gq=PGUHU%BkrlqS`Q(Q!q8kyIx~$9)3V8IdurDx)iSzvaVa-cP)EPd(dT z&km?etz)fcwf57ocza7*Y(-l>V^HZE3l6%lA+=Ds=-N@>bzg;usH(X~)3Z6(P$198 zSTR!Ph)3+Ad$IlQ?VJSUzYa}eIe!M{MUoGK$gf|z57{u|%s2(@rxb~3f>3^xx6&`% z%x|bW=rMWYWHblxqd4~>lQ&L8^RC73@tXXgxv(dcNxZha(@^7YfPR08w=;h9gmwfT z_+!BnT^+6M@#Z7(lO4^cwK%->ZyojqN;$s{{Xx&npkN~VPOsX9DJT5>bNx>au+)I$2oY9 zHMNC$Y4Qn14(9>KtN^=t75#)RN1_n!?KboU`kjWFv8y@scjoDjGq&3b7|s!po)^H_ zUQ7QzhyF5kgP_I~{Om&SLrE~&_{#Fy?Hwj5;+-Q3|0i=%_T^Kyd2hse6vp_VFSr3; z|7b9})PB|7s3*`l##!(Uz4jYUkqcpar$H#6U2A>tRoNs)=#?N+usT%DJD?@J3ND3; zEbC3ENOW3<_req^en3fht1Bkpin0VA2oIbKm(zAAyhUuInh|3#6|NR%XdZ}uSRJVr hMbsza4IIVYIK5@W2e>67@GMd;e00qS&0u~hfj?xpzY_oe delta 1385 zcmb7CUr19?7(Zv)cJDUb_0C!=!D}Hbkx~luArgs8*Owf~upSInE(j`Qo2XFDus>d| zg8KC!QH0S;Pbs6A1U7xK$N3gQH0ed~p*;*)u(a>&-W%7ILLZ#-o$vSkzTf%y&KYeQ z4@?DY8A{D^E@FFlDGLbvUKsXwUNb$&Ud@vf38e>j!eIy=kY)gNY}f3Pdm?chiqLigY+Ur%4aFJ7ZdpgOy$0@F^P z|0?E0LP<#r&mUPmT0hHzL?*%?<{Ld6@c-#0{kFGfk4Ye5YdNdDVj1=~t&_2N&Mgn_5v^a#t`rn +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/14 20:09:23 by fgras-ca #+# #+# */ -/* Updated: 2024/01/17 21:15:02 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 14:33:45 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ #include "../cub3d.h" -void init_player(t_structure_main *w) +void init_player(t_structure_main *w) { - w->s_player.px = 10; - w->s_player.py = 10; - w->s_player.pa = 0.1; - w->s_player.pdx = cos(w->s_player.pa) * 5; - w->s_player.pdy = sin(w->s_player.pa) * 5; + // Ajouter des logs pour vérifier les valeurs + printf("Initialisation du joueur:\n"); + printf("Position X: %f\n", w->s_map.player_x); + printf("Position Y: %f\n", w->s_map.player_y); + + w->s_player.px = w->s_map.player_x; + w->s_player.py = w->s_map.player_y; + + if (w->s_map.player_direction == 'N') + { + w->s_player.pa = M_PI; + w->s_player.pdx = 0; + w->s_player.pdy = -5; + } + else if (w->s_map.player_direction == 'S') + { + w->s_player.pa = 0; + w->s_player.pdx = 0; + w->s_player.pdy = 5; + } + else if (w->s_map.player_direction == 'E') + { + w->s_player.pa = M_PI / 2; + w->s_player.pdx = 5; + w->s_player.pdy = 0; + } + else if (w->s_map.player_direction == 'W') + { + w->s_player.pa = 3 * M_PI / 2; + w->s_player.pdx = -5; + w->s_player.pdy = 0; + } + + // Ajouter des logs pour vérifier les valeurs après l'initialisation + printf("Angle de direction: %f radians\n", w->s_player.pa); + printf("Vecteur de déplacement X: %f\n", w->s_player.pdx); + printf("Vecteur de déplacement Y: %f\n", w->s_player.pdy); } + + + void init_mlx_and_window(t_structure_main *w) { w->s_win.mlx = mlx_init(); diff --git a/versionmod/window/ft_player.o b/versionmod/window/ft_player.o index 4ac98830dc9702af34b8159823a72249cc6373d3..095eb3c11f830ecf6fe5937d754d8f93ecfe391d 100644 GIT binary patch literal 3512 zcmbtW-)kII6h52uhmB2lqasRe8IXvI8Iw|K5~_}gX(pg0RAQqP!(?|hnVQTlvomHR z+6Kfz2!%ZP;){r&{sSfcsw)vq^riSz$V(qmh}dc+J_Hf!`DX6jy}9hBMGu*|_k8#J z&N*}Mnc18lcYZi4t|U)aF(^wdeq~(q{Vb-y`O3=tND^Nc^Yo>;3Qv!pjGj%FGI80P>9)CBg2Lri;BQprHO>vje!Yt4ggIyz1h?<}Y3*3&$C$29yDL_@w8dd`$r zazd}*8@b3hTZr5!=%wL8iI*4~?KRr-Ej9nO#78kiFZdHvu94$EFL1NqW7PS$Ep?Lm9N;x=1n*1W@-H%k$YuH;XXSQ{^#_t2SHc^ogFHqzr06 z^xc`U8PCrZW|+Q~9%p2K)PajmJmEBR`Cct}gSa+1b$*#ctQR zBS*~6qfZDp&a{i~8NP6wgC|Fbd!_=cnJ?G_$v~;MPf@CzNgdq3_nt*Q*+&@11uL?M z1`cE{H1)UcX`X0eO1ySFUM2bgqg-$L2Fnc%O|y&syj_pbT=xr#TH|KiCP8oAr|{z% z8GD#7Jg;tt8K{T1Gmbb?A3qCYIH!92z6SVE1AMpvKGFcEd^pBkH|qvwme4lBqhb`6 zs2F&Dm``x@mE-3`yO3-%Dup>W2q-@jc%e&f*$d;fT4!-)qWj}Jp&#O2_~&+F2L+BE z!LCc(61e0)DEybj2>u?vBtHcx)wK!jhI5!pkeuckJd~mR=)^kX~G5ub| zX%{&5Q?2J|1y}1agbwjV2{B@6xO~saEX_`b&Nz=@kc^XZ7PwQ68M@_=%$yTCWR90g zWCn%A$rh&Zi$JDd2wjuEsU4-z$-XK42|qH6L80gd;Vf$q$(KU_3Wf@RQDC-9YhVMEkop2N@V^i2rpK3Ck9Q$}t&Q;zgLa$<&>)ca} z?d40a|1+UCcuh6E{**_^{_qa^e*um4ahL!A delta 867 zcmaJ-JxC)#6rO#z*<^RKw~0~DAM_LyR}rx>+PL^bAc%#EjaGp>f+A=UMF?WT6(VS% zzRu288?}<-iX4bo7znWu3pu#PPB4vypffwOIE3RK%=`J?_r5nX7tN*GJqJqKeot3! zC-G9TBLPCKVn_2AKuEF*`}Gg(`UA_eJZ(RfEB1UTowPTZTP{2@$!9xa@i_PU*`61e*-kE?bhe~oQW_w~R0OTZH-;;`C;eQFd()Q%V-ZKK7Tn_(u;trpkSwOElAiO-QO z7`HUI3_(J}IW`VQChQ#lba8ts^s&tyTESXSJJYzy(di(`x zX+XYER>IlOb?|ZWLs~3fXjj3k?n05^PyGQ!WxK*${P>+u3`00Y_ z7 +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/15 19:50:24 by fgras-ca #+# #+# */ -/* Updated: 2024/01/15 19:51:24 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 21:10:56 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ #include "../cub3d.h" -void rescale_sprite(t_structure_main *w, t_state *state) -{ - t_rescale_params params; +void rescale_sprite(t_structure_main *w, t_state *state) { + t_rescale_params params; - params.original_img = w->s_img.roomadslam[state->jkl]; - params.original_width = 112; - params.original_height = 112; - params.new_width = w->s_map.mapS; - params.new_height = w->s_map.mapS; - params.px = w->s_player.px - w->s_map.mapS / 2; - params.py = w->s_player.py - w->s_map.mapS / 2; - rescale_image(¶ms, w); + params.original_img = w->s_img.roomadslam[state->jkl]; + params.original_width = 112; + params.original_height = 112; + params.new_width = w->s_map.mapS; + params.new_height = w->s_map.mapS; + params.px = w->s_player.px - w->s_map.mapS / 2; // Ajustez cette ligne si nécessaire + params.py = w->s_player.py - w->s_map.mapS / 2; // Ajustez cette ligne si nécessaire + //Sprintf("rescale_sprite: Player sprite position: x = %d, y = %d\n", params.px, params.py); + rescale_image(¶ms, w); } + void refresh_window(t_structure_main *w, t_state *state) { + printf("refresh_window: Destroying old image\n"); mlx_destroy_image(w->s_win.mlx, w->s_img.buffer); + //printf("refresh_window: Creating new image\n"); w->s_img.buffer = mlx_new_image(w->s_win.mlx, w->s_win.width, w->s_win.height); + //printf("refresh_window: Getting data address\n"); w->s_img.addr = mlx_get_data_addr(w->s_img.buffer, &(w->s_img.bpp), &(w->s_img.line_len), &(w->s_img.endian)); + //printf("refresh_window: Drawing map\n"); draw_map(w); + //printf("refresh_window: Drawing rays 2D\n"); drawrays2d(w); + //printf("refresh_window: Putting image to window\n"); mlx_put_image_to_window(w->s_win.mlx, w->s_win.win, w->s_img.buffer, 0, 0); + //printf("refresh_window: Rescaling sprite\n"); rescale_sprite(w, state); + printf("refresh_window: Window refreshed\n"); } void handle_mouse_movement(t_structure_main *w) @@ -44,6 +53,7 @@ void handle_mouse_movement(t_structure_main *w) int x; int y; + mlx_mouse_get_pos(w->s_win.mlx, w->s_win.win, &x, &y); if ((x > 0 && x < w->s_win.height) && (y > 0 && y < w->s_win.width)) { @@ -55,6 +65,7 @@ void handle_mouse_movement(t_structure_main *w) deal_key(65363, w); } } + //printf("handle_mouse_movement: Mouse position: x = %d, y = %d\n", x, y); } void r_window(t_structure_main *w, t_state *state) @@ -73,9 +84,13 @@ void sleep_mouse(t_global_struct *global_struct) { global_struct->state.yui = 0; global_struct->state.jkl++; + //printf("sleep_mouse: Iteration %d - Updating window and handling mouse movement\n", global_struct->state.jkl); r_window(global_struct->w, &global_struct->state); handle_mouse_movement(global_struct->w); } if (global_struct->state.jkl == 10) - global_struct->state.jkl = -1; + { + //printf("sleep_mouse: Resetting state.jkl to -1\n"); + global_struct->state.jkl = -1; + } } diff --git a/versionmod/window/ft_refresh_window.o b/versionmod/window/ft_refresh_window.o index e7f16a5cb4927835e9bc8366ead8e48767b7abbc..2671d5636fecfb7ef6a0faa2c198daf5b2f2d34a 100644 GIT binary patch delta 1080 zcmZ{jO=uHA6vt!IM3C-5Bq$Plk_uw0hDOv&JQTc?K-MN=6HOw~Q{zPp zS}=VcJSg+YKCHoUVrQ9(!Rb zPw9CE>+a>c+bB=AD%Dc0b=*1QHk$R?tx9#usa-8OmFeP?i;H*rCb-`b*ewxwu4bX9 zmg1B$doE_(QBFsL$~Iio7QiwzRV4w~(keRFnWX^30h>;s)3_Z(=Cms@>Ey4SOKN9>Gu7Y;3pk2GsY`}-$qQ#U?Le`jY#Ue#G?{lk$6nv zUnP!x_&t9Y-0%4S(=awYK0|glofQX#9FN4`=&{5T5?}leeEf)uIo1KLq{J8)@!9=vj|K2JiQM^<5#x%pp1gW2UX7HMnFRq^ICEd&y~H zsYMI$nt{9qpP70EXvEgb`14r2;>%qai=+ndRi_^cNat7PtTa delta 828 zcmZ{hJxE+Z5XX1#-t*q)-FYI4WwQC}G zaHbrBr%vku$Iv7cRfo?7{(a!r0>2gbJbCvBbt%SKiBmDgO5wyV1I;b@zI$Y(If#V8 z4x#xacuDZQ;E%v#IarAm>{~$;oE7NO9C)o+ZnHRxXbi{S|Dg@Ri0<%J_^dhZx}>33 zs%U&DYR;!~DQZd48;M6HUMo7J6XO#9DDi~E{TKLt$Wx38sZzoX?CQ?oA1N&*MMtO? zG|Ecis9a`3;x^dExLf%K4^?DTkj4S58V)bPSK|#_8#{a%a%O+6N3VyL7uPnRX!h^| z+?&Jb(^gNaHxyKTAqsm|t2%&yLt3rlcPMU4zr{V(68%@@Wzpa($XPA!EM+~TV(`vx z>zcs`T`+?~wgx@ieGrg-Q-c$`v;LIiXjh_r6W39AusaQ}CJ3;93_9Zdx~Q +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/14 19:15:53 by fgras-ca #+# #+# */ -/* Updated: 2024/01/17 21:26:12 by fgras-ca ### ########.fr */ +/* Updated: 2024/01/21 14:08:12 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ @@ -71,19 +71,6 @@ void init_buffer(t_structure_main *w) w->s_win.width, w->s_win.height); } -void calculate_map_scale(t_structure_main *w) -{ - int maps_x; - int maps_y; - - maps_x = w->s_win.width / (w->s_map.mapX * 4); - maps_y = w->s_win.height / (w->s_map.mapY * 2); - if (maps_x < maps_y) - w->s_map.mapS = maps_x; - else - w->s_map.mapS = maps_y; -} - void init_windows(t_structure_main *w) { int temp; @@ -92,6 +79,10 @@ void init_windows(t_structure_main *w) w->s_win.height = HEIGHT; init_player(w); init_mlx_and_window(w); + w->s_img.north_texture = NULL; + w->s_img.south_texture = NULL; + w->s_img.west_texture = NULL; + w->s_img.east_texture = NULL; load_textures(w, &temp); init_buffer(w); load_wall_textures(w); @@ -102,5 +93,4 @@ void init_windows(t_structure_main *w) gettimeofday(&(w->start_time), NULL); w->end_time = w->start_time; w->frame_count = 0; - calculate_map_scale(w); } diff --git a/versionmod/window/ft_window.o b/versionmod/window/ft_window.o index 8ac64b7bbe5fb9614d10431cee6a89e73f67a53a..650f81519ba64c67d47c74bc06439bf3f5753ce6 100644 GIT binary patch delta 455 zcmaE%y+Lb&2Ga(?jao~YCtI<&ns>Xt@HpO(z{CIs9uRH@Dz^ZYTLI)wu438BIAQVz zX0grTthy{hfs8=?u6zP*OwPP)%pQz9?2{cu#5bSi^k(D)%K@cVPB!EcXWR-RCkJp# zFy5Km$h~>82T#D}DLhA*Jr6TO+`s~)_<{J(e+W2_Brbp?E(cNw1R#nHh+*orCNC5a zXEd8!C?G%ihJb)%6p}g~Bz5JJ83o0ST5!nDL=qQ5(shw#a*|-#^+J1s22+O6My;jHiJi4CJi1+9bUV0sbcep^p0tLEfuWaYDgzMA{Qk4k^#?@O z0V2BrBx@ox^ZUO}*FW8^KdfE<)bfK>g#PH9umvdlnisDuz<|pEY7OSVw??Py7CFMF*)A|Q7)(n*20K`HJj0_){feau3YXZ`HCtu_gpZtMKg7Geh#rOftSKyu_ zoSc}GT$+0-z8GfNTQckCP1r@AC?=g2bR;a-p#BWCI}y&KW!qkq46lh0K|P zSb-rdHhF=N28{VYNP{tAGN-UT}drk&Uhygn$3yPR? nRtQ3P6_W#jyd6-v2a_iPc{8{na(^dZ1oA#WRhCSiC?pR6sob=}