diff options
Diffstat (limited to 'test/collisions.cpp')
-rw-r--r-- | test/collisions.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/test/collisions.cpp b/test/collisions.cpp new file mode 100644 index 00000000..c675546d --- /dev/null +++ b/test/collisions.cpp @@ -0,0 +1,54 @@ +#include "app.hpp" +#include "src/world.hpp" +#include "src/critter.hpp" +#include "src/RTree.hpp" +#include "loader/loader.hpp" + +namespace floormat { + +namespace { + +critter_proto make_critter_proto() +{ + critter_proto proto; + proto.atlas = loader.anim_atlas("npc-walk", loader.ANIM_PATH); + proto.name = "critter"_s; + proto.speed = 1; + proto.playable = true; + proto.offset = {}; + proto.bbox_offset = {}; + proto.bbox_size = Vector2ub(tile_size_xy/2); + return proto; +} + +void test1() +{ + auto w = world(); + constexpr auto ch = chunk_coords_{0, 0, 0}; + constexpr auto pos = global_coords{ch, {0, 0}}; + auto& c = w[ch]; + + fm_assert(c.rtree()->Count() == 0); + auto C = w.make_object<critter>(w.make_id(), pos, make_critter_proto()); + fm_assert(C->offset == Vector2b{}); + fm_assert(c.objects().size() == 1); + fm_assert(c.rtree()->Count() == 1); + auto index = C->index(); + C->teleport_to(index, pos, {1, 2}, rotation::N); + fm_assert(C->offset == Vector2b{1, 2}); + fm_assert(c.rtree()->Count() == 1); + C->teleport_to(index, point{{2, 2, 0}, {}, {0, 0}}, rotation::N); + fm_assert(c.objects().size() == 0); + fm_assert(c.rtree()->Count() == 0); + (void)index; +} + +} // namespace + + +void Test::test_collisions() +{ + test1(); +} + +} // namespace floormat |