Fix incorrect line test
By this project convention, the line extend will start from p1 and end at p2, but not including p2 [p1, p2). Thus, existing tests are testing a zero-length line, which should assert no collision. Add test to properly test AABB edge collision with a line Also update existing collision function to account for thisscene_man
parent
7929178411
commit
494c9e9e46
|
@ -111,7 +111,7 @@ target_link_libraries(assets_test
|
|||
${GAME_LIBS}
|
||||
)
|
||||
|
||||
if (UNIT_TESTING)
|
||||
if (BUILD_TESTING)
|
||||
find_package(cmocka 1.1.0 REQUIRED)
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
|
|
|
@ -93,7 +93,7 @@ uint8_t check_collision_line(const CollideEntity_t* ent, TileGrid_t* grid, bool
|
|||
unsigned int tile_y2 = (ent->area.tile_y2 >= grid->height) ? grid->height - 1 : ent->area.tile_y2;
|
||||
|
||||
Vector2 p1 = {ent->bbox.x, ent->bbox.y};
|
||||
Vector2 p2 = {ent->bbox.x + ent->bbox.width - 1, ent->bbox.y + ent->bbox.height - 1};
|
||||
Vector2 p2 = {ent->bbox.x + ent->bbox.width, ent->bbox.y + ent->bbox.height};
|
||||
for(unsigned int tile_y = tile_y1; tile_y <= tile_y2; tile_y++)
|
||||
{
|
||||
if (tile_y >= grid->height) return 0;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "AABB.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
|
@ -25,10 +26,14 @@ static void test_line_AABB(void **state)
|
|||
|
||||
p1.y = 0;
|
||||
p2.y = 0;
|
||||
assert_false(line_in_AABB(p1, p2, box));
|
||||
p2.y = 1;
|
||||
assert_true(line_in_AABB(p1, p2, box));
|
||||
|
||||
p1 = (Vector2){5, 0};
|
||||
p2 = (Vector2){5, 10};
|
||||
assert_false(line_in_AABB(p1, p2, box));
|
||||
p2 = (Vector2){6, 10};
|
||||
assert_true(line_in_AABB(p1, p2, box));
|
||||
|
||||
p1 = (Vector2){14, 0};
|
||||
|
|
Loading…
Reference in New Issue