Correct AABB tests

Changelog:
- Figure out why the previous AABB behaviour was correct: continuum
    [0, 5) does not collide with [5, 10)
    For tile check however, need to subtract one to avoid extra tile
    check. Exception is the tile collision
scene_man
En Yi 2023-06-21 22:11:32 +08:00
parent c8d2ee5408
commit 451b241460
2 changed files with 6 additions and 8 deletions

View File

@ -3,7 +3,7 @@
uint8_t find_1D_overlap(Vector2 l1, Vector2 l2, float* overlap) uint8_t find_1D_overlap(Vector2 l1, Vector2 l2, float* overlap)
{ {
// No Overlap // No Overlap
if (l1.y < l2.x || l2.y < l1.x) return 0; if (l1.y <= l2.x || l2.y <= l1.x) return 0;
if (l1.x >= l2.x && l1.y <= l2.y) if (l1.x >= l2.x && l1.y <= l2.y)
{ {
@ -14,7 +14,7 @@ uint8_t find_1D_overlap(Vector2 l1, Vector2 l2, float* overlap)
} }
//Partial overlap //Partial overlap
// x is p1, y is p2 // x is p1, y is p2
*overlap = (l2.y >= l1.y)? l2.x - l1.y : l2.y - l1.x; *overlap = (l2.y > l1.y)? l2.x - l1.y : l2.y - l1.x;
return 1; return 1;
} }

View File

@ -102,17 +102,15 @@ static void test_1D_overlap(void **state)
assert_int_equal(find_1D_overlap(a, b, &overlap), 0); assert_int_equal(find_1D_overlap(a, b, &overlap), 0);
a.y = 6; a.y = 6;
assert_int_equal(find_1D_overlap(a, b, &overlap), 0);
assert_int_equal(find_1D_overlap(b, a, &overlap), 0);
a.y = 7;
assert_int_equal(find_1D_overlap(a, b, &overlap), 1); assert_int_equal(find_1D_overlap(a, b, &overlap), 1);
assert_float_equal(overlap, -1, 1e-5); assert_float_equal(overlap, -1, 1e-5);
assert_int_equal(find_1D_overlap(b, a, &overlap), 1); assert_int_equal(find_1D_overlap(b, a, &overlap), 1);
assert_float_equal(overlap, 1, 1e-5); assert_float_equal(overlap, 1, 1e-5);
a.y = 7;
assert_int_equal(find_1D_overlap(a, b, &overlap), 1);
assert_float_equal(overlap, -2, 1e-5);
assert_int_equal(find_1D_overlap(b, a, &overlap), 1);
assert_float_equal(overlap, 2, 1e-5);
a.x = 7; a.x = 7;
a.y = 9; a.y = 9;
assert_int_equal(find_1D_overlap(a, b, &overlap), 2); assert_int_equal(find_1D_overlap(a, b, &overlap), 2);