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 ac6ae73c79707739665d2a4f3023a9c64d188ced..4a1974e3dca673a71ceffd19f9da2de4c65ed050 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/player.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/player.c @@ -30,6 +30,30 @@ void initPlayer(){ player.viewAngle = 0; } +void hitBall(){ + //printf("map edges: %d %d\n", BLOCK_SIZE * MAP_WIDTH/2, BLOCK_SIZE *MAP_HEIGHT/2); + //printf("ray1: %d %d\n", ray1[0], ray1[1]); + int angleMin = RD * atan2((MAP_WIDTH/2)*BLOCK_SIZE - player.x, player.y); + int angleMax = 90 + RD * atan2((MAP_WIDTH/2)*BLOCK_SIZE - player.x, MAP_HEIGHT * BLOCK_SIZE - player.y); + int currAngle = (int) ((player.angle) * RD +90) %360; + //printf("player angle: %d\n",(int) ((player.angle) * RD +90) %360 ); + printf("distance to ball: %f\n", sqrt(pow(ball.x - player.x, 2) + pow(ball.y - player.y, 2))/BLOCK_SIZE); + if (sqrt(pow(player.x - ball.x, 2) + pow(player.y - ball.y, 2))/BLOCK_SIZE < HIT_RANGE){ + if (currAngle < angleMax && currAngle > angleMin){ + printf("hit\n"); + if (player.isHitting){ + ball.x = player.x; + ball.y = player.y; + } + printf("valid hit\n"); + } + else { + printf("unvalid hit\n"); + } + } + //} +} + void manageMovement(){ float x_increment = (Keys[0] - Keys[2]) * player.deltax + (Keys[3] - Keys[1]) * sin(player.angle); float y_increment = (Keys[0] - Keys[2]) * player.deltay + (Keys[1] - Keys[3]) * cos(player.angle); @@ -45,4 +69,5 @@ void manageMovement(){ void managePlayer(){ manageMovement(); + hitBall(); } \ No newline at end of file diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/player.h b/travail_de_groupe/jeu_appren_par_renfo/src/player.h index 947f3bccced758a487bd020200baf68c3c884a8e..b95048ddaa059bf3406a29621773764fde293457 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/player.h +++ b/travail_de_groupe/jeu_appren_par_renfo/src/player.h @@ -9,6 +9,8 @@ #define ENTITIES_LEFT 2 #define ENTITIES_RIGHT 3 +#define HIT_RANGE 2 + #define MOVEMENT_SPEED 2 typedef struct player{ float x; @@ -17,6 +19,7 @@ typedef struct player{ int w; int speed; int isMoving; + int isHitting; int direction; int HPMax; int currentHP; 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 af7310fc1b5fbd5a6f330984103aeee4bcf8c3a7..69ef960536fac797274864b98bb56b7a5ba62d21 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/render.c +++ b/travail_de_groupe/jeu_appren_par_renfo/src/render.c @@ -18,6 +18,8 @@ SDL_Texture * playerTexture; int ** rays; int raysListLength = 0; +int * ray1; +int * ray2; rayInfo_t raysListHead; @@ -69,6 +71,10 @@ void initRays(){ } } +int isRaysListEmpty(){ + return raysListLength == 0; +} + void addRayToList(int x, int y){ if (raysListLength < 2 * NB_RAYS){ *rays[raysListLength] = x; @@ -391,6 +397,21 @@ void castRays(int map[][MAP_WIDTH]){ } } // draw the ray in the minimap + if (r == 0){ + //printf("%d %d\n", (int)rx, (int)ry); + ray1[0] = (int)rx; + ray1[1] = (int)ry; + //printf("ray1 %d %d\n", ray1[0], ray1[1]); + //printf("ray2 %d %d\n", ray2[0], ray2[1]); + } + if (r == NB_RAYS - 1){ + //printf("%d %d\n", (int)rx, (int)ry); + ray2[0] = (int)rx; + ray2[1] = (int)ry; + printf("ray1 %d %d\n", ray1[0]/BLOCK_SIZE, ray1[1]/BLOCK_SIZE); + printf("ray2 %d %d\n", ray2[0]/BLOCK_SIZE, ray2[1]/BLOCK_SIZE); + } + //printf("raylistlength %d\n", raysListLength); addRayToList(rx, ry); addRayToList(rx2, ry2); @@ -410,7 +431,7 @@ void drawEnnemy(){ int ennemyHeight = 200; //printf("%f %f\n", ennemyAngle, player.angle - (FOV_ANGLE)/2 * DR); - + //printf("%f\n", player.angle * RD); if (ennemyAngle >= player.angle - (FOV_ANGLE)/2 * DR && ennemyAngle <= player.angle + (FOV_ANGLE)/2 * DR){ rect.x = screenDimension.w/2 + (screenDimension.w * tan(ennemyAngle - player.angle)) * sqrt(3) * 0.5; @@ -422,7 +443,7 @@ void drawEnnemy(){ destRect.y = 0; destRect.w = 64; destRect.h = 64; - 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); SDL_RenderCopy(renderer, playerTexture, &destRect, &rect); } } @@ -449,7 +470,7 @@ void drawBall(){ destRect.y = 0; destRect.w = 64; destRect.h = 64; - 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); SDL_RenderCopy(renderer, playerTexture, &destRect, &rect); } } @@ -546,6 +567,9 @@ void mainLoop(){ crowdTexture = loadTexture("Res/crowd.png"); playerTexture = loadTexture("Res/player_sprite.png"); + ray1 = malloc(sizeof(int) * 2); + ray2 = malloc(sizeof(int) * 2); + unsigned int a = SDL_GetTicks(); unsigned int b = SDL_GetTicks(); double delta = 0; 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 0bc2bb8a397f0732a4be0dec094aedc7abb9c3b2..82d11b5c907bf920d0d29cc656744a611b67c355 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/src/render.h +++ b/travail_de_groupe/jeu_appren_par_renfo/src/render.h @@ -12,6 +12,7 @@ #define DOF 100 #define BLOCK_SIZE 64 #define DR 0.0174533 +#define RD 57.2958 #define FOV_ANGLE 120 #define pi 3.14159265358979323846 #define NB_RAYS (screenDimension.w) @@ -31,6 +32,8 @@ extern SDL_Window *window; extern SDL_Renderer *renderer; extern SDL_DisplayMode screenDimension; +extern int * ray1; +extern int * ray2; void mainLoop();