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.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/chunk-collision.cpp b/src/chunk-collision.cpp
index b7948501..b78f43a4 100644
--- a/src/chunk-collision.cpp
+++ b/src/chunk-collision.cpp
@@ -19,11 +19,11 @@ constexpr Vector2 tile_start(std::size_t k)
return TILE_SIZE2 * Vector2(coord) - half_tile;
}
-Pair<Vector2i, Vector2i> scenery_tile(const entity& sc)
+Pair<Vector2i, Vector2i> scenery_tile(local_coords local, Vector2b offset, Vector2b bbox_offset, Vector2ub bbox_size)
{
- auto center = iTILE_SIZE2 * Vector2i(sc.coord.local()) + Vector2i(sc.offset) + Vector2i(sc.bbox_offset);
- auto min = center - Vector2i(sc.bbox_size/2);
- auto size = Vector2i(sc.bbox_size);
+ auto center = iTILE_SIZE2 * Vector2i(local) + Vector2i(offset) + Vector2i(bbox_offset);
+ auto min = center - Vector2i(bbox_size/2);
+ auto size = Vector2i(bbox_size);
return { min, min + size, };
}
@@ -97,14 +97,19 @@ void chunk::ensure_passability() noexcept
}
}
-bool chunk::_bbox_for_scenery(const entity& s, bbox& value) noexcept
+bool chunk::_bbox_for_scenery(const entity& s, local_coords local, Vector2b offset, bbox& value) noexcept
{
- auto [start, end] = scenery_tile(s);
+ auto [start, end] = scenery_tile(local, offset, s.bbox_offset, s.bbox_size);
auto id = make_id(collision_type::scenery, s.pass, s.id);
value = { .id = id, .start = start, .end = end };
return s.atlas && s.pass != pass_mode::pass;
}
+bool chunk::_bbox_for_scenery(const entity& s, bbox& value) noexcept
+{
+ return _bbox_for_scenery(s, s.coord.local(), s.offset, value);
+}
+
void chunk::_remove_bbox(const bbox& x)
{
if (_scenery_modified)