diff options
Diffstat (limited to 'src/World/World.cpp')
| -rw-r--r-- | src/World/World.cpp | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/src/World/World.cpp b/src/World/World.cpp index 449ba2d..21dcc36 100644 --- a/src/World/World.cpp +++ b/src/World/World.cpp @@ -34,16 +34,13 @@ std::unordered_set<ChunkIndex> World::get_visible_chunk_indices(Vector<3> positi int32_t center_x = std::round(position.x() / CHUNK_WIDTH); int32_t center_y = std::round(position.z() / CHUNK_HEIGHT); - auto upper_x_bound = center_x + m_view_distance_radius; - auto lower_x_bound = center_x - m_view_distance_radius; - auto upper_y_bound = center_y + m_view_distance_radius; - auto lower_y_bound = center_y - m_view_distance_radius; - std::unordered_set<ChunkIndex> indices{}; indices.reserve(m_view_distance_radius * m_view_distance_radius * 4); - for (int32_t x = lower_x_bound; x < upper_x_bound; x++) { - for (int32_t y = lower_y_bound; y < upper_y_bound; y++) { - indices.emplace(x, y); + auto radius = m_view_distance_radius; + for (int32_t x = -radius; x <= radius; x++) { + int32_t height = std::round(std::sqrt(radius * radius - x * x) + 0.5); + for (int32_t y = -height; y <= height; y++) { + indices.emplace(x + center_x, y + center_y); } } |
