diff options
| author | Mel <einebeere@gmail.com> | 2023-07-21 02:17:03 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2023-07-21 02:17:03 +0200 |
| commit | 23d88e5f1c8f0c8652a07050fcfa8ff126e85d4a (patch) | |
| tree | d2979c12a9675885b7ed969d5f51dbd69d969286 /src/World/World.cpp | |
| parent | c0556f76fc5c8271c2eaa7ca91ad1c92c691d8bc (diff) | |
| download | meowcraft-23d88e5f1c8f0c8652a07050fcfa8ff126e85d4a.tar.zst meowcraft-23d88e5f1c8f0c8652a07050fcfa8ff126e85d4a.zip | |
Extremely simple chunk-limited lighting
Diffstat (limited to 'src/World/World.cpp')
| -rw-r--r-- | src/World/World.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
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::ChunkData*> 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<ChunkIndex> 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()); |
