summary refs log tree commit diff
path: root/src/World/World.cpp
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2024-02-15 12:32:03 +0100
committerMel <einebeere@gmail.com>2024-02-15 12:32:03 +0100
commit3e6eb265a018fd0422b59ca9ea1b8918abee5c16 (patch)
tree3ae93c50f7b75d7e03a1b5e69157e36a65d99175 /src/World/World.cpp
parent39d5b006063f27effd4bf96a0a40f02aded7c8f5 (diff)
downloadmeowcraft-3e6eb265a018fd0422b59ca9ea1b8918abee5c16.tar.zst
meowcraft-3e6eb265a018fd0422b59ca9ea1b8918abee5c16.zip
Not every valid block position is within a chunk, `ChunkRegistry::find` should reflect that
Diffstat (limited to 'src/World/World.cpp')
-rw-r--r--src/World/World.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/World/World.cpp b/src/World/World.cpp
index b5dae43..ff8d22e 100644
--- a/src/World/World.cpp
+++ b/src/World/World.cpp
@@ -42,18 +42,18 @@ std::vector<ChunkRegistry::Data*> World::get_visible_chunks(Time const& time, Po
 }
 
 Chunk::BlockData World::block_at(Position::BlockWorld pos) {
-    auto& data = m_registry.find(pos);
-    if (data.chunk.has_value()) return data.chunk->at(pos.to_local());
+    auto data = m_registry.find(pos);
+    if (data && data->chunk.has_value()) return data->chunk->at(pos.to_local());
     return {};
 }
 
 void World::set_block(Position::BlockWorld pos, BlockType type) {
-    auto& chunk_data = m_registry.find(pos);
-    if (!chunk_data.chunk.has_value()) return;
+    auto chunk_data = m_registry.find(pos);
+    if (!chunk_data || !chunk_data->chunk.has_value()) return;
 
-    auto& block_data = chunk_data.chunk->at(pos.to_local());
+    auto& block_data = chunk_data->chunk->at(pos.to_local());
     block_data.type = type;
-    chunk_data.damage();
+    chunk_data->damage();
 }
 
 void World::break_block(Position::BlockWorld pos) {