diff --git a/include/Cubed/gameplay/world.hpp b/include/Cubed/gameplay/world.hpp index 28ed085..67f36d4 100644 --- a/include/Cubed/gameplay/world.hpp +++ b/include/Cubed/gameplay/world.hpp @@ -31,6 +31,7 @@ private: std::mutex m_gen_signal_mutex; std::mutex m_new_chunk_queue_mutex; std::mutex m_delete_vbo_mutex; + std::mutex m_gen_player_pos_mutex; std::vector m_pending_delete_vbo; std::condition_variable m_gen_cv; std::atomic m_gen_running{false}; diff --git a/src/gameplay/world.cpp b/src/gameplay/world.cpp index 7c9181b..ea5237d 100644 --- a/src/gameplay/world.cpp +++ b/src/gameplay/world.cpp @@ -169,8 +169,12 @@ ChunkPos World::chunk_pos(int world_x, int world_z) { } void World::gen_chunks_internal() { - - const auto& player_pos = m_gen_player_pos; + glm::vec3 player_pos; + { + std::lock_guard lk(m_gen_player_pos_mutex); + player_pos = m_gen_player_pos; + } + int x = std::floor(player_pos.x); int z = std::floor(player_pos.z); @@ -293,7 +297,11 @@ void World::stop_gen_thread() { } void World::need_gen() { - m_gen_player_pos = get_player("TestPlayer").get_player_pos(); + { + std::lock_guard lk(m_gen_player_pos_mutex); + m_gen_player_pos = get_player("TestPlayer").get_player_pos(); + } + m_need_gen_chunk = true; m_gen_cv.notify_one(); }