summaryrefslogtreecommitdiffhomepage
path: root/test/bbox.cpp
blob: 87921271b0ba9eee3643a67b602f8931aba7b7eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "app.hpp"
#include "src/chunk.hpp"
#include "src/collision.hpp"
#include <Magnum/Math/Vector2.h>

namespace floormat {

static void test_simple(chunk c)
{
    auto& qt = c.ensure_passability();
    fm_assert(qt.GetSize() >= 2);

    using namespace loose_quadtree;
    using bbox = BoundingBox<std::int16_t>;
    constexpr auto pos1 = sTILE_SIZE2 * (TILE_MAX_DIM/2) - Vector2s(0, sTILE_SIZE2[1]/2);
    constexpr auto b1 = bbox{pos1[0], pos1[1], usTILE_SIZE2[0], usTILE_SIZE2[1]};
    auto q1 = qt.QueryIntersectsRegion(b1);
    fm_assert(!q1.EndOfQuery());
    auto x1 = *q1.GetCurrent();
    fm_assert(x1.pass_mode == pass_mode::blocked);
    do q1.Next(); while (!q1.EndOfQuery());
    constexpr auto pos2 = Vector2s(iTILE_SIZE2 * (Vector2i(TILE_MAX_DIM/2) - Vector2i(-1, -1)) - Vector2i(0, iTILE_SIZE[1]/2));
    constexpr auto b2 = bbox{pos2[0], pos2[1], usTILE_SIZE2[0], usTILE_SIZE2[1]};
    auto q2 = qt.QueryIntersectsRegion(b2);
    fm_assert(q2.EndOfQuery());
}

static void test_wrapper(chunk c)
{
    {
        int i = 0;
        for (auto b : c.query_collisions(local_coords{TILE_MAX_DIM/2, TILE_MAX_DIM/2},
                                         usTILE_SIZE2,
                                         Vector2s(sTILE_SIZE2[0]/2, 0)))
        {
            fm_assert(b.pass_mode == pass_mode::blocked);
            i++;
        }
        fm_assert(i > 0);
    }
}

void test_app::test_bbox()
{
    test_simple(make_test_chunk());
    test_wrapper(make_test_chunk());
}

} // namespace floormat