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 ",
|
||||
" "
|
||||
" 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;
|
||||
|
|
Loading…
Reference in New Issue