From f9b74550252a9eaa19d779d8b4c9647a7c20d392 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 15 Mar 2023 19:10:52 +0100 Subject: a --- src/chunk-collision.cpp | 33 ++++++++++++++++----------------- src/entity.cpp | 4 ++-- src/entity.hpp | 2 +- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/chunk-collision.cpp b/src/chunk-collision.cpp index d05a3a71..b7948501 100644 --- a/src/chunk-collision.cpp +++ b/src/chunk-collision.cpp @@ -22,27 +22,27 @@ constexpr Vector2 tile_start(std::size_t k) Pair scenery_tile(const entity& sc) { auto center = iTILE_SIZE2 * Vector2i(sc.coord.local()) + Vector2i(sc.offset) + Vector2i(sc.bbox_offset); - auto start = center - Vector2i(sc.bbox_size); - auto size = Vector2i(sc.bbox_size)*2; - return { start, start + size, }; + auto min = center - Vector2i(sc.bbox_size/2); + auto size = Vector2i(sc.bbox_size); + return { min, min + size, }; } constexpr Pair whole_tile(std::size_t k) { - auto start = tile_start(k); - return { start, start + TILE_SIZE2, }; + auto min = tile_start(k); + return { min, min + TILE_SIZE2, }; } constexpr Pair wall_north(std::size_t k) { - auto start = tile_start(k) - Vector2(0, 1); - return { start, start + Vector2(TILE_SIZE2[0], 2), }; + auto min = tile_start(k) - Vector2(0, 1); + return { min, min + Vector2(TILE_SIZE2[0], 2), }; } constexpr Pair wall_west(std::size_t k) { - auto start = tile_start(k) - Vector2(1, 0); - return { start, start + Vector2(2, TILE_SIZE2[1]), }; + auto min = tile_start(k) - Vector2(1, 0); + return { min, min + Vector2(2, TILE_SIZE2[1]), }; } constexpr std::uint64_t make_id(collision_type type, pass_mode p, std::uint64_t id) @@ -72,9 +72,9 @@ void chunk::ensure_passability() noexcept if (const auto* atlas = ground_atlas_at(i)) if (auto p = atlas->pass_mode(pass_mode::pass); p != pass_mode::pass) { - auto [start, end] = whole_tile(i); + auto [min, max] = whole_tile(i); auto id = make_id(collision_type::geometry, p, i); - _rtree.Insert(start.data(), end.data(), id); + _rtree.Insert(min.data(), max.data(), id); } } for (auto i = 0_uz; i < TILE_COUNT; i++) @@ -83,16 +83,16 @@ void chunk::ensure_passability() noexcept if (const auto* atlas = tile.wall_north_atlas().get()) if (auto p = atlas->pass_mode(pass_mode::blocked); p != pass_mode::pass) { - auto [start, end] = wall_north(i); + auto [min, max] = wall_north(i); auto id = make_id(collision_type::geometry, p, i); - _rtree.Insert(start.data(), end.data(), id); + _rtree.Insert(min.data(), max.data(), id); } if (const auto* atlas = tile.wall_west_atlas().get()) if (auto p = atlas->pass_mode(pass_mode::blocked); p != pass_mode::pass) { - auto [start, end] = wall_west(i); + auto [min, max] = wall_west(i); auto id = make_id(collision_type::geometry, p, i); - _rtree.Insert(start.data(), end.data(), id); + _rtree.Insert(min.data(), max.data(), id); } } } @@ -150,8 +150,7 @@ bool chunk::can_place_entity(const entity_proto& proto, local_coords pos) (void)ensure_scenery_mesh(); const auto center = Vector2(pos)*TILE_SIZE2 + Vector2(proto.offset) + Vector2(proto.bbox_offset), - half_bbox = Vector2(proto.bbox_size)*.5f, - min = center - half_bbox, max = center + half_bbox; + min = center - Vector2(proto.bbox_size/2), max = min + Vector2(proto.bbox_size); bool ret = true; _rtree.Search(min.data(), max.data(), [&](auto, const auto&) { return ret = false; }); return ret; diff --git a/src/entity.cpp b/src/entity.cpp index 23e9887d..3dc80fbc 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -123,8 +123,8 @@ bool entity::can_move_to(Vector2i delta) auto& c_ = coord.chunk() == coord_.chunk() ? c : w[coord_.chunk()]; const auto center = Vector2(coord_.local())*TILE_SIZE2 + Vector2(offset_) + Vector2(bbox_offset), - half_bbox = Vector2(bbox_size)*.5f, - min = center - half_bbox, max = center + half_bbox; + half_bbox = Vector2(bbox_size/2), + min = center - half_bbox, max = min + Vector2(bbox_size); bool ret = true; c_.rtree()->Search(min.data(), max.data(), [&](std::uint64_t data, const auto&) { diff --git a/src/entity.hpp b/src/entity.hpp index 39816a2d..6bfad752 100644 --- a/src/entity.hpp +++ b/src/entity.hpp @@ -18,7 +18,7 @@ struct entity_proto { std::shared_ptr atlas; Vector2b offset, bbox_offset; - Vector2ub bbox_size = Vector2ub(iTILE_SIZE2/2); + Vector2ub bbox_size = Vector2ub(iTILE_SIZE2); std::uint16_t delta = 0, frame = 0; entity_type type = entity_type::none; rotation r : rotation_BITS = rotation::N; -- cgit v1.2.3