diff --git a/switcher.c b/switcher.c index f84ff38..f568a52 100644 --- a/switcher.c +++ b/switcher.c @@ -155,25 +155,25 @@ static char *stages[] = { " ! " " ggg ", " " + " C N" " " - " " - " " - " " - " " - " " - " " - " " - " ", - " " - " " - " " - " " - " " - " " - " " - " " - " " - " ", + " B 3 " + " 2 3 " + "1 3 1" + " 12" + "@ 1 123" + "A1 123!" + "1 123g", + "@d B12 C" + "A 12 " + "11gggggggg" + " D" + "gg44444444" + " 22 " + " 2 " + " 2 2" + " 2!" + " 333333", }; enum switches_state { ALL_OFF, SWITCH1, SWITCH2, SWITCH3, SWITCH4 }; @@ -395,27 +395,6 @@ static void update_stage(struct timespec now, struct timespec dt_timespec) { // Collision against tiles size_t px = player_x; size_t py = player_y; - size_t left_cx = px - 1; - size_t right_cx = px + TILE_SIDE; - size_t leftright_top_cy = py; - size_t leftright_bottom_cy = py + TILE_SIDE - 3; //XXX: proper handling of snapping - if ((solid_tile(left_cx, leftright_top_cy) || - solid_tile(left_cx, leftright_bottom_cy)) && - player_dx < 0) { - size_t snapped_px = (px + TILE_SIDE - 1) / TILE_SIDE * TILE_SIDE; - player_x = snapped_px; - player_dx = 0; - } - if ((solid_tile(right_cx, leftright_top_cy) || - solid_tile(right_cx, leftright_bottom_cy)) && - player_dx > 0) { - size_t snapped_px = px / TILE_SIDE * TILE_SIDE; - player_x = snapped_px; - player_dx = 0; - } - - px = player_x; - py = player_y; size_t topbottom_left_cx = px + 1; size_t topbottom_right_cx = px + TILE_SIDE - 1 - 1; size_t top_cy = py - 1; @@ -440,6 +419,27 @@ static void update_stage(struct timespec now, struct timespec dt_timespec) { jump_start_y = player_y + jump_maxheight; } + px = player_x; + py = player_y; + size_t left_cx = px - 1; + size_t right_cx = px + TILE_SIDE; + size_t leftright_top_cy = py; + size_t leftright_bottom_cy = py + TILE_SIDE - 3; //XXX: proper handling of snapping + if ((solid_tile(left_cx, leftright_top_cy) || + solid_tile(left_cx, leftright_bottom_cy)) && + player_dx < 0) { + size_t snapped_px = (px + TILE_SIDE - 1) / TILE_SIDE * TILE_SIDE; + player_x = snapped_px; + player_dx = 0; + } + if ((solid_tile(right_cx, leftright_top_cy) || + solid_tile(right_cx, leftright_bottom_cy)) && + player_dx > 0) { + size_t snapped_px = px / TILE_SIDE * TILE_SIDE; + player_x = snapped_px; + player_dx = 0; + } + // Touching tiles size_t midpoint_x = player_x + TILE_SIDE / 2; size_t midpoint_y = player_y + TILE_SIDE / 2;