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 collisionscene_man
parent
c8d2ee5408
commit
451b241460
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue