From 451b24146038260f93a43b52e0016bb274045752 Mon Sep 17 00:00:00 2001 From: En Yi Date: Wed, 21 Jun 2023 22:11:32 +0800 Subject: [PATCH] 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 --- scenes/engine/AABB.c | 4 ++-- tests/test_AABB.c | 10 ++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/scenes/engine/AABB.c b/scenes/engine/AABB.c index 1837598..56bd34f 100644 --- a/scenes/engine/AABB.c +++ b/scenes/engine/AABB.c @@ -3,7 +3,7 @@ uint8_t find_1D_overlap(Vector2 l1, Vector2 l2, float* 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) { @@ -14,7 +14,7 @@ uint8_t find_1D_overlap(Vector2 l1, Vector2 l2, float* overlap) } //Partial overlap // 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; } diff --git a/tests/test_AABB.c b/tests/test_AABB.c index 4b99f15..3c0e391 100644 --- a/tests/test_AABB.c +++ b/tests/test_AABB.c @@ -102,16 +102,14 @@ static void test_1D_overlap(void **state) assert_int_equal(find_1D_overlap(a, b, &overlap), 0); 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_float_equal(overlap, -1, 1e-5); assert_int_equal(find_1D_overlap(b, a, &overlap), 1); 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.y = 9;