From 5d80d12382467d04bb65ae279db1cbe9ab38006b Mon Sep 17 00:00:00 2001 From: Alexandre Date: Sat, 24 Aug 2024 15:19:33 +0200 Subject: [PATCH] fixed collisions --- bin/back | Bin 100568 -> 101400 bytes src/display.c | 2 +- src/main.c | 2 +- src/move.c | 83 ++++++++++++++++++++++++++++++++++++++---------- src/move.h | 6 ++++ src/structure.h | 4 +-- templates.txt | 9 ------ 7 files changed, 77 insertions(+), 29 deletions(-) diff --git a/bin/back b/bin/back index cd86c652cc04ad987a4578ebfbf282203d60bd55..39a460ab98b3116b07eaba0941318bc86011ca27 100755 GIT binary patch delta 30829 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 J{vAF_`9DX;7`6Za delta 28970 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

!pmdu@Q|2g-ZQdxm>Mu|znZIb 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.lines, player_x, player_y)); } +bool checkCollision2(int cx, int cy, int x, int y) { + return (unpack_coord(gridGet(map, cx, cy)->chdata.lines, x, y)); +} + +void normalize(int* ch_coord, int* coord, double* ε) { + if(*ε >= 1.0) { + *ε -= 1.0 ; + *coord += 1 ; + if(*coord >= 8) { + *coord -= 8 ; + *ch_coord += 1; + } + } else if(*ε < 0.0) { + *ε += 1.0 ; + *coord -= 1 ; + if(*coord < 0) { + *coord += 8 ; + *ch_coord -= 1; + } + } +} + +bool checkCollisionSquare(double square_size) { + double εxmin = εx - square_size; + double εxmax = εx + square_size; + double εymin = εy - square_size; + double εymax = εy + square_size; + + int xmin = player_x ; + int xmax = player_x ; + int ymin = player_y ; + int ymax = player_y ; + + int cxmin = player_cx ; + int cxmax = player_cx ; + int cymin = player_cy ; + int cymax = player_cy ; + + normalize(&cxmin, &xmin, &εxmin); + normalize(&cxmax, &xmax, &εxmax); + normalize(&cymin, &ymin, &εymin); + normalize(&cymax, &ymax, &εymax); + + return ( + checkCollision2(cxmin, cymin, xmin, ymin) || + checkCollision2(cxmin, cymax, xmin, ymax) || + checkCollision2(cxmax, cymin, xmax, ymin) || + checkCollision2(cxmax, cymax, xmax, ymax) + ); +} + void increment_x(double dx) { - epsilon_x = epsilon_x + dx ; - if(epsilon_x >= 1.0) { - epsilon_x -= 1.0 ; + εx = εx + dx ; + if(εx >= 1.0) { + εx -= 1.0 ; player_x += 1 ; if(player_x >= 8) { player_x -= 8 ; player_cx += 1; } - } else if(epsilon_x < 0.0) { - epsilon_x += 1.0 ; + } else if(εx < 0.0) { + εx += 1.0 ; player_x -= 1 ; if(player_x < 0) { player_x += 8 ; @@ -48,16 +99,16 @@ void increment_x(double dx) { } void increment_y(double dy) { - epsilon_y += dy ; - if(epsilon_y >= 1.0) { - epsilon_y -= 1.0 ; + εy += dy ; + if(εy >= 1.0) { + εy -= 1.0 ; player_y += 1 ; if(player_y >= 8) { player_y -= 8 ; player_cy += 1; } - } else if(epsilon_y < 0.0) { - epsilon_y += 1.0 ; + } else if(εy < 0.0) { + εy += 1.0 ; player_y -= 1 ; if(player_y < 0) { player_y += 8 ; @@ -69,7 +120,7 @@ void increment_y(double dy) { bool moveRequest(double dx, double dy) { increment_x(dx); increment_y(dy); - if(false && checkCollision()) { + if(checkCollisionSquare(0.15)) { increment_x(-dx); increment_y(-dy); return false; @@ -125,13 +176,13 @@ void moveFunctionMaster(SDL_Renderer* renderer) { while(!halt) { moveControl(&halt); resetRenderer(renderer); - drawMapToRenderer(renderer, -300 * 250/zoom + to_int(50 * (8*player_cx + player_x + epsilon_x)), 300 * 250/zoom + to_int(50 * (8*player_cx + player_x + epsilon_x)), -300 * 250/zoom + to_int(50 * (8*player_cy + player_y + epsilon_y)), 300 * 250/zoom + to_int(50 * (8*player_cy + player_y + epsilon_y))); + drawMapToRenderer(renderer, -300 * 250/zoom + to_int(50 * (8*player_cx + player_x + εx)), 300 * 250/zoom + to_int(50 * (8*player_cx + player_x + εx)), -300 * 250/zoom + to_int(50 * (8*player_cy + player_y + εy)), 300 * 250/zoom + to_int(50 * (8*player_cy + player_y + εy))); drawNumberToRenderer(renderer, digits, player_cx, 10, 10, 50, 70, 0); drawNumberToRenderer(renderer, digits, player_cy, 10, 80, 50, 70, 0); drawNumberToRenderer(renderer, digits, player_x, __width__ / 3, 10, 50, 70, 0); drawNumberToRenderer(renderer, digits, player_y, __width__ / 3, 80, 50, 70, 0); - drawNumberToRenderer(renderer, digits, to_int(epsilon_x*100), 2 * __width__ / 3, 10, 50, 70, 0); - drawNumberToRenderer(renderer, digits, to_int(epsilon_y*100), 2 * __width__ / 3, 80, 50, 70, 0); + drawNumberToRenderer(renderer, digits, to_int(εx*100), 2 * __width__ / 3, 10, 50, 70, 0); + drawNumberToRenderer(renderer, digits, to_int(εy*100), 2 * __width__ / 3, 80, 50, 70, 0); updateRenderer(renderer); draw_par += 1 ; usleep(20000); diff --git a/src/move.h b/src/move.h index f854453..0887dcd 100644 --- a/src/move.h +++ b/src/move.h @@ -3,6 +3,12 @@ bool checkCollision(); +bool checkCollision2(int cx, int cy, int x, int y); + +void normalize(int* ch_coord, int* coord, double* ε); + +bool checkCollisionSquare(double square_size); + void increment_x(double dx); void increment_y(double dy); diff --git a/src/structure.h b/src/structure.h index efa4e0b..b33afd8 100644 --- a/src/structure.h +++ b/src/structure.h @@ -22,8 +22,8 @@ extern int render_distance ; extern double speed ; extern int precision ; -extern double epsilon_x ; -extern double epsilon_y ; +extern double εx ; +extern double εy ; // are in [0.0, 1.0[ extern int player_x ; diff --git a/templates.txt b/templates.txt index c25b563..503453b 100644 --- a/templates.txt +++ b/templates.txt @@ -223,15 +223,6 @@ 0 0 1 0 0 1 0 0 1 1 1 0 0 1 1 1 -1 1 1 0 0 1 1 1 -0 0 1 0 0 1 1 1 -1 0 0 0 0 0 0 1 -1 0 0 1 1 0 0 0 -1 0 0 1 1 0 0 0 -1 0 0 0 0 0 0 1 -0 0 1 0 0 1 1 1 -1 1 1 0 0 1 1 1 - 1 1 1 1 1 1 1 1 0 0 1 0 0 1 1 1 1 0 0 0 0 0 0 1