From 0a95cf402ad613bb285143d2f197b9bcadb2cec0 Mon Sep 17 00:00:00 2001 From: CaptainGobelin Date: Fri, 2 Jan 2015 15:39:55 +0100 Subject: [PATCH] Fix zigzagon pattern --- src/col.c | 2 +- src/game.h | 1 + src/obs.c | 5 +++-- src/patterns.c | 18 +++++++++--------- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/col.c b/src/col.c index c6bda2b..c6ff90f 100644 --- a/src/col.c +++ b/src/col.c @@ -17,7 +17,7 @@ has_collision(struct s_game *g, struct s_obstacle o) { if(face != o.face) return 0; - if(o.distance <= CURSOR_DIST && + if((MAX(0, o.distance)) <= CURSOR_DIST && o.distance + o.thick >= CURSOR_DIST) { return 1; } diff --git a/src/game.h b/src/game.h index 96db1e7..058412c 100644 --- a/src/game.h +++ b/src/game.h @@ -38,6 +38,7 @@ #define OFFSET_POINT(p) {p.x += SCREEN_WIDTH/2; p.y += SCREEN_HEIGHT/2;} #define MAX(a, b) (a < b) ? (b) : (a) +#define MIN(a, b) (a < b) ? (a) : (b) #define TO_DEG(x) (x*ANGLE_MAX/360) #define TO_RAD(x) (x * 2 * M_PI / ANGLE_MAX) diff --git a/src/obs.c b/src/obs.c index e35bf83..aa024ec 100644 --- a/src/obs.c +++ b/src/obs.c @@ -67,7 +67,8 @@ draw_obstacles(struct s_game *g) { //{{{ for(i = 0; i < g->num_obs; i++) { if(g->obs[i].used) { struct s_obstacle o = g->obs[i]; - draw_polygon_side(g, o.face, o.distance, o.thick, g->color); + int effective_dist = MAX(0, o.distance); + draw_polygon_side(g, o.face, effective_dist, o.thick + (MIN(0, o.distance)), g->color); } } } //}}} @@ -80,7 +81,7 @@ update_obstacles(struct s_game *g) { //{{{ g->obs[i].distance -= DFT_OBS_SPEED*g->obs[i].speed; g->obs[i].thick = 1 * g->sexual_pulsation + g->obs[i].original_thick; - if(g->obs[i].distance <= 0) + if(g->obs[i].distance+g->obs[i].thick <= 0) g->obs[i].used = 0; } } diff --git a/src/patterns.c b/src/patterns.c index 2182332..ad6ca03 100644 --- a/src/patterns.c +++ b/src/patterns.c @@ -112,32 +112,32 @@ pattern_zigzagone(struct s_game *g) { int perim; - for(perim = 0; perim < g->polygon_type/2; perim++) { + for(perim = 1; perim < 1+g->polygon_type/2; perim++) { int face = (cleared_face + perim)%g->polygon_type; struct s_obstacle o; o = create_obstacle(SHAPE_THICK, - (perim + cleared_face)%g->polygon_type, + face, 1, max_dist + K_CLEARANCE); add_obstacle(g, o); o = create_obstacle(SHAPE_THICK, - (perim + cleared_face)%g->polygon_type, - 1, max_dist + 3*K_CLEARANCE + 2*SHAPE_THICK); + face, + 1, max_dist + K_CLEARANCE + 2*(K_CLEARANCE/2 + SHAPE_THICK)); add_obstacle(g, o); - face -= 3; - CLEVER_MODULO(face, g->polygon_type/2); + face = (cleared_face - perim); + CLEVER_MODULO(face, g->polygon_type); o = create_obstacle(SHAPE_THICK, - (perim + cleared_face)%g->polygon_type, - 1, max_dist + 2*K_CLEARANCE + 1*SHAPE_THICK); + face, + 1, max_dist + K_CLEARANCE + 1*(K_CLEARANCE/2 + SHAPE_THICK)); add_obstacle(g, o); } struct s_obstacle o; - o = create_obstacle((SHAPE_THICK+K_CLEARANCE)*3, + o = create_obstacle((SHAPE_THICK+K_CLEARANCE/2)*2 + SHAPE_THICK, cleared_face, 1, max_dist + K_CLEARANCE); add_obstacle(g, o);