adding async chunk generation

This commit is contained in:
2025-05-17 23:10:31 +02:00
parent e6982f99e5
commit be29d9a3be
19 changed files with 167 additions and 75 deletions

View File

@@ -1,6 +1,7 @@
#ifndef WORLD_H
#define WORLD_H
#include <atomic>
#include <unordered_map>
#include <ScopGraphics.h>
@@ -8,7 +9,16 @@
#include <Chunk.h>
#include <Utils.h>
constexpr std::uint8_t RENDER_DISTANCE = 1;
constexpr std::uint8_t RENDER_DISTANCE = 10;
constexpr std::uint8_t RENDER_DISTANCE_HALF = RENDER_DISTANCE / 2;
constexpr std::uint8_t CHUNKS_UPLOAD_PER_FRAME = 1;
enum class GenerationState: std::uint8_t
{
Ready,
Working,
Finished,
};
class World
{
@@ -22,15 +32,18 @@ class World
~World() = default;
private:
void GenerateWorld();
void UnloadChunks(Scop::Vec2i current_chunk_position);
void GenerateWorld(Scop::Vec2i current_chunk_position);
void Upload();
private:
std::unordered_map<Scop::Vec2i, Chunk> m_chunks;
ThreadSafeQueue<std::reference_wrapper<Chunk>> m_chunks_to_upload;
std::shared_ptr<Scop::Material> p_block_material;
Scop::Narrator& m_narrator;
Scop::Scene& m_scene;
Scop::Vec2i m_previous_chunk_position;
std::atomic<GenerationState> m_generation_status = GenerationState::Ready;
};
#endif