diff --git a/bin/back b/bin/back index cd86c65..39a460a 100755 Binary files a/bin/back and b/bin/back differ diff --git a/src/display.c b/src/display.c index a265f5a..9153fe5 100644 --- a/src/display.c +++ b/src/display.c @@ -196,5 +196,5 @@ void drawHashToRenderer(SDL_Renderer* renderer, int chx, int chy, int xmin, int void drawMapToRenderer(SDL_Renderer* renderer, int xmin, int xmax, int ymin, int ymax) { drawHashToRenderer(renderer, player_cx, player_cy, xmin, xmax, ymin, ymax, 0, 0); - placeRectToRenderer(renderer, __width__ /2 - 5, __height__ /2 + 5, 10, 10, 255, 255, 32, SDL_ALPHA_OPAQUE); + placeRectToRenderer(renderer, __width__ /2 - 5*zoom/100, __height__ /2 - 5*zoom/100, 10*zoom/100, 10*zoom/100, 255, 255, 32, SDL_ALPHA_OPAQUE); } \ No newline at end of file diff --git a/src/main.c b/src/main.c index f688285..4aab574 100644 --- a/src/main.c +++ b/src/main.c @@ -43,7 +43,7 @@ int main(int argc, char** argv) { /* -------------------------------------------------------- */ //one_debug(); - parse_configs("templates.txt", 48); + parse_configs("templates.txt", 47); initialize(rend); diff --git a/src/move.c b/src/move.c index 09c4d09..4133680 100644 --- a/src/move.c +++ b/src/move.c @@ -21,24 +21,75 @@ double speed = 0.5 ; int precision = 12 ; -double epsilon_x = 0.0; -double epsilon_y = 0.0; +double εx = 0.0; +double εy = 0.0; bool checkCollision() { return (unpack_coord(gridGet(map, player_cx, player_cy)->chdata.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