Fix incorrect velocity reflection on collision

main
En Yi 2024-09-26 21:31:24 +08:00
parent 9854654d61
commit 8bf1957e1e
1 changed files with 17 additions and 12 deletions

View File

@ -822,26 +822,31 @@ void tile_collision_system(Scene_t* scene)
);
}
}
}
}
if (
((collide_side & (1<<3)) && (p_ctransform->velocity.x < 0))
|| ((collide_side & (1<<2)) && (p_ctransform->velocity.x > 0))
)
// Check X first
if ((collide_side & (1<<2)) || (collide_side & (1<<3)))
{
Vector2 check_pos = p_ent->position;
check_pos.x += p_ctransform->velocity.x * scene->delta_time;
if (check_collision_at(p_ent, check_pos, p_bbox->size, &tilemap))
{
p_ctransform->velocity.x *= -p_ctransform->bounce_coeff;
}
}
if (
((collide_side & (1<<1)) && (p_ctransform->velocity.y < 0))
|| ((collide_side & (1)) && (p_ctransform->velocity.y > 0))
)
// Check Y next
if ((collide_side & (1<<1)) || (collide_side & (1)))
{
Vector2 check_pos = p_ent->position;
check_pos.y += p_ctransform->velocity.y * scene->delta_time;
if (check_collision_at(p_ent, check_pos, p_bbox->size, &tilemap))
{
p_ctransform->velocity.y *= -p_ctransform->bounce_coeff;
}
}
float decimal;
float fractional = modff(p_ent->position.x, &decimal);