From 1aa7513ab80ce54c4cdc963352866945f0916232 Mon Sep 17 00:00:00 2001
From: Taha Belkhiri <belkhiri.taha53@gmail.com>
Date: Wed, 29 Jun 2022 12:53:23 +0200
Subject: [PATCH] ajout information sur le Net et Wall dans la fonction
 castSingleRay

---
 .../jeu_appren_par_renfo/Res/ball_sprite.png  | Bin 747 -> 626 bytes
 .../jeu_appren_par_renfo/src/player.c         |  16 +-
 .../jeu_appren_par_renfo/src/render.c         | 164 ++++++++++++++----
 .../jeu_appren_par_renfo/src/render.h         |   2 +-
 4 files changed, 143 insertions(+), 39 deletions(-)

diff --git a/travail_de_groupe/jeu_appren_par_renfo/Res/ball_sprite.png b/travail_de_groupe/jeu_appren_par_renfo/Res/ball_sprite.png
index 22613161084aa65022284319b6cffa41d0870606..372e96135fbfc573e5e7cbcb8cee97ae3cab8fc0 100644
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq004jh001Be0{{R3?fifj00001b5ch_0Itp)
z=>Px#1ZP1_K>z@;j|==^1poj57*I@9MTD&YjI99w|3m+xDF6RL+t2`vwEzGB0AbsR
zZ2$lO2y{|TQ~&?}|NsC00N#VWSpWb432;bRa{vGi!vFvd!vV){sAK>D0nbT9K~z{r
z&6inHBS8!W8ye&L-xw{gRFX<6jOoB+#CWh$%WLD0ndAOq{#Ag(Kp_E1ppbwhP)I-$
zC@}Nqx8t2T`K4L`FI?!yPsh*_U|nGzT;}oj)CfQ=YLqm7Qdjg`iR|W?aamtcB<3Qw
zA<mzAE&6SO;{NdR>b=`z8^ZJ9JTX1L+axIO!{-2gjaxuh4cO(t^8uRswxO9{e3xK5
zj{qN1@Q=sL1?n@&Zvyo5^v41=zeV#a(LXis0<815Zx&>q7d$d=0rJPsTpK{X!J$P1
zz^~`2K|1iJAp86b&X3z61N#x6cz*Kx0IQEnrVmeUZ^R=&b^po$S{UG32q2ZjWdWAQ
z(}D|7egGE+Kw%;W5uolMbiPke_^`)(^>|c6z6S!7_9p>Q2%M)2u=@@0g776a9u9!_
z2~MB^nuudwHWU$p2fnHD9$G2K+lI7YN$}eMw;7=9nDcdl#WSv@^p4@X0Oa$6kf89y
z?5O?3yf!TzVZKOEdKaMa#`NeqK4Apbet!7zRqVa!)(^ZNZSLRgs>8f_zR-IgubyY3
zpMBaQb{S{%#Ln{vu=C}9---XY5hx@e2^12L1PTdA0tKe&{VVSGFG_JcGBHXMX8-^I
M07*qoM6N<$g8AYb8UO$Q

literal 747
zcmeAS@N?(olHy`uVBq!ia0vp^=|Jqu!3HFEmsPD~U|?*`baoE#baqxKD9TUE%t>Wn
z(3n^|$=2hrgGAf?Wm&FTd}RVJCoHsz6c8=Eq9wA>X@zK1slm=K{Ig6{H1+zLvJW1d
ze{@xI_vUqc>zWjPFh6?nWXTI9)w<~-QAa8Y?i{ZEzOUx{T}G$HhfG#y%UmeA?V~Q7
zWVT(aE$(8oh7to?YMNy6q$y4Bf9!H^SYKW^?`i$J^B31Y(`93Ec@&v8!|Ws5$1lrr
z3+}1+ZJ4x1Xufd&%n*f-%GX8v?^}q+idCc?IkV(>XXW3djm=Z}(o}<$=PC8AoaOh^
z>00vC&tmCogOb-;{p3AdS(`fZwaH?SBth>93Qmr^sUZo<eyjbuT20=n*ZeuWE?#N6
z(>fywOR<1fwwqs@_aA(JFRJw<r@rPKhF$S8&y!g=-ZGut^|(gf+V3+9haGcx)$RCP
z2IKiluHTM&!y$2lO>f=pS)15n-Z41)x8<B#C$dCSgzLa>N!#GQeTQ@}Y=8E3?biOw
z><Z3%z3wuww;#xuxaoTBySuk<Zm&PT<=1y+)n7#&JFYP;2gVCqlDE4H!+#)jPRfcf
z0g7-IctjR6Fz_7)VaDV6D^h@h>?NMQuI$g)WJDzOH|@9(3KV+o>EaktaqI1!Xuc)`
z0f)e>8#8rwuUlIqdErQl!|e+n=hQ0}%<b5-j8kEXNa13y%4x5xwf63Mzq<YX@{=!Z
zESDa9qB8k#THnq{?~b(wmX8$rEIOJkU{pb$H=BF;6mPaSJ5wH*volCMtM}`l{c&6A
z6K?mg`Sbto?c2Eh@WolqnMVZK3kBR|Fe!$Hd3#oVc+vN1nbW_7qJ8q#dx}=SsV=f9
zJK^`?IA8J6R7>XuxOEWA7jslSGB%G0GqP-%Kj*31X#-1!o<!D*ak>Go-1KUJUS{xg
L^>bP0l+XkKh}T4O

diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/player.c b/travail_de_groupe/jeu_appren_par_renfo/src/player.c
index c980c88..700361f 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/player.c
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/player.c
@@ -86,11 +86,17 @@ void hitBall()
             {
                 freeIntList(landingPoint);
                 freeIntList(lastHitPoint);
-                int rx, ry;
-                float distance;
-                castSingleRay(&distance, &rx, &ry);
-                printf("ray: %d %d\n", rx/BLOCK_SIZE, ry/BLOCK_SIZE);
-                printf("distance: %f\n", distance/BLOCK_SIZE);
+                int rxWall, ryWall;
+                float distanceWall;
+
+                int rxNet, ryNet;
+                float distanceNet;
+                castSingleRay(player.angle, &distanceWall, &distanceNet, &rxWall, &ryWall, &rxNet, &ryNet);
+                printf("rayWall: %d %d\n", rxWall/BLOCK_SIZE, ryWall/BLOCK_SIZE);
+                printf("distance: %f\n", distanceWall);
+
+                printf("rayNet: %d %d\n", rxNet/BLOCK_SIZE, ryNet/BLOCK_SIZE);
+                printf("distance: %f\n", distanceNet);
                 lastHitPoint = allocLastHitPoint();
                 landingPoint = generateLandingPoint();
                 lastHitPoint[0] = ball.x;
diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/render.c b/travail_de_groupe/jeu_appren_par_renfo/src/render.c
index 01f6e3c..c7a89a7 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/render.c
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/render.c
@@ -563,7 +563,7 @@ void drawEnnemy()
     }
 }
 
-void castSingleRay(float *distance, int *returnX, int *returnY)
+void castSingleRay(float angle, float *distanceWall, float *distanceNet, int *returnXWall, int *returnYWall, int *returnXNet, int *returnYNet)
 {
     // ray casting variables
     float htexture, htexture2;
@@ -573,7 +573,7 @@ void castSingleRay(float *distance, int *returnX, int *returnY)
     mx = 0;
     my = 0;
     raysListHead.next = NULL;
-    ra = player.angle;
+    ra = angle;
     if (ra < 0)
         ra -= 2 * pi;
     if (ra > 2 * pi)
@@ -608,13 +608,26 @@ void castSingleRay(float *distance, int *returnX, int *returnY)
     {
         mx = (int)rx >> 6;
         my = (int)ry >> 6;
-        if (mx >= 0 && mx < MAP_WIDTH && my >= 0 && my < MAP_HEIGHT && map[my][mx] == 1)
+        if (mx >= 0 && mx < MAP_WIDTH && my >= 0 && my < MAP_HEIGHT)
         {
-            hx = rx;
-            hy = ry;
-            disH = sqrt((rx - player.x) * (rx - player.x) + (ry - player.y) * (ry - player.y));
-            dof = DOF;
-            foundSolidWallH = 1;
+            if (map[my][mx] == 1)
+            {
+                hx = rx;
+                hy = ry;
+                disH = sqrt((rx - player.x) * (rx - player.x) + (ry - player.y) * (ry - player.y));
+                dof = DOF;
+                foundSolidWallH = 1;
+            }
+            else
+            {
+                hx2 = rx;
+                hy2 = ry;
+                disH2 = sqrt((rx - player.x) * (rx - player.x) + (ry - player.y) * (ry - player.y));
+                // foundTransparentWallH = 1;
+                dof++;
+                rx += xo;
+                ry += yo;
+            }
         }
         else
         {
@@ -650,16 +663,32 @@ void castSingleRay(float *distance, int *returnX, int *returnY)
         rx = player.x;
         dof = DOF;
     }
+    int foundSolidWallV = 0;
+    int foundTransparentWallV = 0;
     while (dof < DOF)
     {
         mx = (int)rx >> 6;
         my = (int)ry >> 6;
-        if (mx >= 0 && mx < MAP_WIDTH && my >= 0 && my < MAP_HEIGHT && map[my][mx] == 1)
+        if (mx >= 0 && mx < MAP_WIDTH && my >= 0 && my < MAP_HEIGHT && map[my][mx])
         {
-            vx = rx;
-            vy = ry;
-            disV = sqrt((rx - player.x) * (rx - player.x) + (ry - player.y) * (ry - player.y));
-            dof = DOF;
+            if (map[my][mx] == 1)
+            {
+                vx = rx;
+                vy = ry;
+                disV = sqrt((rx - player.x) * (rx - player.x) + (ry - player.y) * (ry - player.y));
+                foundSolidWallV = 1;
+                dof = DOF;
+            }
+            else
+            {
+                vx2 = rx;
+                vy2 = ry;
+                disV2 = sqrt((rx - player.x) * (rx - player.x) + (ry - player.y) * (ry - player.y));
+                foundTransparentWallV = 1;
+                dof++;
+                rx += xo;
+                ry += yo;
+            }
         }
         else
         {
@@ -669,27 +698,95 @@ void castSingleRay(float *distance, int *returnX, int *returnY)
         }
     }
 
-    int direction;
+    int direction, direction2;
 
-    if (disH < disV)
+    if (foundTransparentWallV)
     {
-        rx = hx;
-        ry = hy;
-        distT = disH;
-        direction = 0;
-        htexture = (int)(rx) % BLOCK_SIZE;
+        if (disH < disV2)
+        {
+            rx = hx2;
+            ry = hy2;
+            distT = disH2;
+            distT2 = disV2;
+            direction = 0;
+            htexture = (int)(rx) % BLOCK_SIZE;
+        }
+        else
+        {
+            rx = vx2;
+            ry = vy2;
+            distT = disV2;
+            direction = 1;
+            htexture = (int)(ry) % BLOCK_SIZE;
+        }
+        if (foundSolidWallV)
+        {
+            if (disH < disV)
+            {
+                rx2 = hx;
+                ry2 = hy;
+                distT2 = disH;
+                direction2 = 0;
+                htexture2 = (int)(rx2) % BLOCK_SIZE;
+            }
+            else
+            {
+                rx2 = vx;
+                ry2 = vy;
+                distT2 = disV;
+                direction2 = 1;
+                htexture2 = (int)(ry2) % BLOCK_SIZE;
+            }
+        }
+        if (foundSolidWallH)
+        {
+            if (disH < disV)
+            {
+                rx2 = hx;
+                ry2 = hy;
+                distT2 = disH;
+                direction2 = 0;
+                htexture2 = (int)(rx2) % BLOCK_SIZE;
+            }
+            else
+            {
+                rx2 = vx;
+                ry2 = vy;
+                distT2 = disV;
+                direction2 = 1;
+                htexture2 = (int)(ry2) % BLOCK_SIZE;
+            }
+        }
     }
+
     else
     {
-        rx = vx;
-        ry = vy;
-        distT = disV;
-        direction = 1;
-        htexture = (int)(ry) % BLOCK_SIZE;
+        if (disH < disV)
+        {
+            rx = hx;
+            ry = hy;
+            distT = disH;
+            direction = 0;
+            htexture = (int)(rx) % BLOCK_SIZE;
+        }
+        else
+        {
+            rx = vx;
+            ry = vy;
+            distT = disV;
+            direction = 1;
+            htexture = (int)(ry) % BLOCK_SIZE;
+        }
     }
-    *distance = distT;
-    *returnX = (int)rx;
-    *returnY = (int)ry;
+
+    *returnXWall = (int)rx2;
+    *returnYWall = (int)ry2;
+    *distanceWall = distT2;
+    
+    *returnXNet = (int)rx;
+    *returnYNet = (int)ry2;
+    *distanceNet = (int)distT2;
+
 }
 
 int isAngleInRange(float angle, float min, float max)
@@ -747,14 +844,14 @@ void drawBall()
         rect.w = (ballWidth * screenDimension.w) / (ballDistance / BLOCK_SIZE);
         rect.h = (ballHeight * screenDimension.h) / (ballDistance / BLOCK_SIZE);
         rect.y = (3 * screenDimension.h / 4 + player.viewAngle) - sqrt(3) * tan(ballViewAngle) * ballDistance;
-        //printf("%d %d %d %d\n", rect.x, rect.y, rect.w, rect.h);
+        // printf("%d %d %d %d\n", rect.x, rect.y, rect.w, rect.h);
 
-        destRect.x = 0;
+        destRect.x = 32 * (SDL_GetTicks() / 150 % 4);
         destRect.y = 0;
-        destRect.w = 64;
-        destRect.h = 64;
+        destRect.w = 32;
+        destRect.h = 32;
         // printf("%d %d %d %d\n", rect.x, rect.y, rect.w, rect.h);
-        SDL_RenderCopy(renderer, playerTexture, &destRect, &rect);
+        SDL_RenderCopy(renderer, ballTexture, &destRect, &rect);
     }
 }
 
@@ -901,6 +998,7 @@ void mainLoop()
     netTexture = loadTexture("Res/net.png");
     crowdTexture = loadTexture("Res/crowd.png");
     playerTexture = loadTexture("Res/player_sprite.png");
+    ballTexture = loadTexture("Res/ball_sprite.png");
 
     ray1 = malloc(sizeof(int) * 2);
     ray2 = malloc(sizeof(int) * 2);
diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/render.h b/travail_de_groupe/jeu_appren_par_renfo/src/render.h
index 74e24b1..dddaada 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/render.h
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/render.h
@@ -35,7 +35,7 @@ extern SDL_DisplayMode screenDimension;
 extern int * ray1;
 extern int * ray2;
 
-void castSingleRay(float *distance, int *returnX, int *returnY);
+void castSingleRay(float angle, float *distanceWall, float *distanceNet, int *returnXWall, int *returnYWall, int *returnXNet, int *returnYNet);
 void mainLoop();
 
 #endif 
\ No newline at end of file
-- 
GitLab