summaryrefslogtreecommitdiffhomepage
path: root/src/chunk-collision.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/chunk-collision.cpp')
-rw-r--r--src/chunk-collision.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/chunk-collision.cpp b/src/chunk-collision.cpp
index a6fd379d..5ffbf0ec 100644
--- a/src/chunk-collision.cpp
+++ b/src/chunk-collision.cpp
@@ -11,7 +11,7 @@
namespace floormat {
-chunk::RTree* chunk::rtree() noexcept { ensure_passability(); return &_rtree; }
+chunk::RTree* chunk::rtree() noexcept { ensure_passability(); return &*_rtree; }
namespace {
@@ -30,7 +30,7 @@ void chunk::ensure_passability() noexcept
return;
_pass_modified = false;
- _rtree.RemoveAll();
+ _rtree->RemoveAll();
for (const std::shared_ptr<object>& s : objects())
{
@@ -45,7 +45,7 @@ void chunk::ensure_passability() noexcept
{
auto [min, max] = whole_tile(i);
auto id = make_id(collision_type::geometry, atlas->pass_mode(), i+1);
- _rtree.Insert(min.data(), max.data(), id);
+ _rtree->Insert(min.data(), max.data(), id);
}
}
for (auto i = 0uz; i < TILE_COUNT; i++)
@@ -55,13 +55,13 @@ void chunk::ensure_passability() noexcept
{
auto [min, max] = wall_north(i, atlas->info().depth);
auto id = make_id(collision_type::geometry, atlas->info().passability, TILE_COUNT+i+1);
- _rtree.Insert(min.data(), max.data(), id);
+ _rtree->Insert(min.data(), max.data(), id);
}
if (const auto* atlas = tile.wall_west_atlas().get())
{
auto [min, max] = wall_west(i, atlas->info().depth);
auto id = make_id(collision_type::geometry, atlas->info().passability, TILE_COUNT*2+i+1);
- _rtree.Insert(min.data(), max.data(), id);
+ _rtree->Insert(min.data(), max.data(), id);
}
}
}
@@ -82,13 +82,13 @@ bool chunk::_bbox_for_scenery(const object& s, bbox& value) noexcept
void chunk::_remove_bbox(const bbox& x)
{
auto start = Vector2(x.start), end = Vector2(x.end);
- _rtree.Remove(start.data(), end.data(), x.id);
+ _rtree->Remove(start.data(), end.data(), x.id);
}
void chunk::_add_bbox(const bbox& x)
{
auto start = Vector2(x.start), end = Vector2(x.end);
- _rtree.Insert(start.data(), end.data(), x.id);
+ _rtree->Insert(start.data(), end.data(), x.id);
}
void chunk::_replace_bbox(const bbox& x0, const bbox& x1, bool b0, bool b1)
@@ -144,7 +144,7 @@ bool chunk::can_place_object(const object_proto& proto, local_coords pos)
const auto center = Vector2(pos)*TILE_SIZE2 + Vector2(proto.offset) + Vector2(proto.bbox_offset),
min = center - Vector2(bbox_size)*.5f, max = min + Vector2(bbox_size);
bool ret = true;
- _rtree.Search(min.data(), max.data(), [&](uint64_t data, const auto&) {
+ _rtree->Search(min.data(), max.data(), [&](uint64_t data, const auto&) {
[[maybe_unused]] auto x = std::bit_cast<collision_data>(data);
if (x.pass == (uint64_t)pass_mode::pass || x.pass == (uint64_t)pass_mode::shoot_through)
return true;