Change order of collision detection for better movement
This commit is contained in:
parent
ad127dcf4f
commit
bd276afa18
78
switcher.c
78
switcher.c
|
@ -155,25 +155,25 @@ static char *stages[] = {
|
||||||
" ! "
|
" ! "
|
||||||
" ggg ",
|
" 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 };
|
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
|
// Collision against tiles
|
||||||
size_t px = player_x;
|
size_t px = player_x;
|
||||||
size_t py = player_y;
|
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_left_cx = px + 1;
|
||||||
size_t topbottom_right_cx = px + TILE_SIDE - 1 - 1;
|
size_t topbottom_right_cx = px + TILE_SIDE - 1 - 1;
|
||||||
size_t top_cy = py - 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;
|
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
|
// Touching tiles
|
||||||
size_t midpoint_x = player_x + TILE_SIDE / 2;
|
size_t midpoint_x = player_x + TILE_SIDE / 2;
|
||||||
size_t midpoint_y = player_y + TILE_SIDE / 2;
|
size_t midpoint_y = player_y + TILE_SIDE / 2;
|
||||||
|
|
Loading…
Reference in New Issue