From 23d88e5f1c8f0c8652a07050fcfa8ff126e85d4a Mon Sep 17 00:00:00 2001 From: Mel Date: Fri, 21 Jul 2023 02:17:03 +0200 Subject: Extremely simple chunk-limited lighting --- src/World/World.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src/World/World.cpp') diff --git a/src/World/World.cpp b/src/World/World.cpp index 8685e8a..912a5cf 100644 --- a/src/World/World.cpp +++ b/src/World/World.cpp @@ -1,5 +1,6 @@ #include "World.hpp" #include "Generation/ChunkMeshing.hpp" +#include "Generation/Lighting.hpp" #include "../Time.hpp" namespace MC::World { @@ -19,8 +20,8 @@ std::vector World::get_visible_chunks(Vector<3> position) { continue; } - if (data.status == ChunkStatus::NeedsMesh) { - try_to_create_mesh_for_chunk(data); + if (data.status == ChunkStatus::WaitingForReification) { + try_to_reify_chunk(data); } if (data.status == ChunkStatus::Done) { chunks.push_back(&data); @@ -65,7 +66,7 @@ std::vector World::get_visible_chunk_indices(const Vector<3> positio void World::load_finished_chunks_from_queue() { auto results = m_queue.done(); for (auto& [id, res] : results) { - get(id) = {id, ChunkStatus::NeedsMesh, {res.chunk}}; + get(id) = {id, ChunkStatus::WaitingForReification, {res.chunk}}; log_chunk_time(res.generation_duration); } } @@ -90,7 +91,7 @@ World::ChunkData& World::get(ChunkIndex index) { return entry->second; } -void World::try_to_create_mesh_for_chunk(ChunkData& data) { +void World::try_to_reify_chunk(ChunkData& data) { auto index = data.index; UInt neighbor_index = 0; @@ -109,12 +110,16 @@ void World::try_to_create_mesh_for_chunk(ChunkData& data) { // Layout of neighboring chunks in `neighbors` array: // (-1; -1) > (-1; 0) > (-1; 1) > (0; -1) // ( 0; 1) > ( 1; -1) > ( 1; 0) > (1; 1) - Generation::ChunkMeshing::ChunkNeighbors chunk_neighbors { + Generation::ChunkNeighbors chunk_neighbors { neighbors[3], neighbors[6], neighbors[4], neighbors[1], neighbors[5], neighbors[7], neighbors[2], neighbors[0], }; - auto meshes = mesh_chunk(data.chunk.value(), chunk_neighbors); + // Lighting + Generation::Lighting::light_chunk(data.chunk.value(), chunk_neighbors); + + // Meshing + auto meshes = Generation::ChunkMeshing::mesh_chunk(data.chunk.value(), chunk_neighbors); data.land_mesh_data = meshes.land_mesh; data.land_mesh = GFX::Binder::load(data.land_mesh_data.value()); -- cgit 1.4.1