summary refs log tree commit diff
path: root/src/World/World.cpp
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-10-22 00:25:08 +0200
committerMel <einebeere@gmail.com>2022-10-22 00:25:08 +0200
commit403ba87eaf2f6554bc0a83efed7ff78d66dd59a8 (patch)
treebb3d1deca8c73b0b9c5fa4ff5c7db120e304e6c3 /src/World/World.cpp
parent7b20942c765334687fd5f58df4c0190601b97b58 (diff)
downloadmeowcraft-403ba87eaf2f6554bc0a83efed7ff78d66dd59a8.tar.zst
meowcraft-403ba87eaf2f6554bc0a83efed7ff78d66dd59a8.zip
Round view distance
Diffstat (limited to 'src/World/World.cpp')
-rw-r--r--src/World/World.cpp13
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);
         }
     }