From: Daniel Karbach Date: Sun, 22 Mar 2015 15:44:15 +0000 (+0100) Subject: fixed light propagation X-Git-Url: https://git.localhorst.tv/?a=commitdiff_plain;h=d2d3cb877984b97fafb97254f5005cbf4bcf47a6;p=blank.git fixed light propagation --- diff --git a/src/chunk.cpp b/src/chunk.cpp index 70a2563..cc53e91 100644 --- a/src/chunk.cpp +++ b/src/chunk.cpp @@ -194,7 +194,6 @@ void work_dark() { } } } - work_light(); } } @@ -207,17 +206,27 @@ void Chunk::SetBlock(int index, const Block &block) { if (&old_type == &new_type) return; - if (new_type.luminosity > 0) { - if (GetLight(index) < new_type.luminosity) { - SetLight(index, new_type.luminosity); - light_queue.emplace(this, ToPos(index)); - work_light(); - } - } else if (new_type.block_light && GetLight(index) != 0) { + if (new_type.luminosity > old_type.luminosity) { + // light added + SetLight(index, new_type.luminosity); + light_queue.emplace(this, ToPos(index)); + work_light(); + } else if (new_type.luminosity < old_type.luminosity) { + // light removed + dark_queue.emplace(this, ToPos(index)); SetLight(index, 0); + work_dark(); + SetLight(index, new_type.luminosity); + light_queue.emplace(this, ToPos(index)); + work_light(); + } else if (new_type.block_light && !old_type.block_light) { + // obstacle added dark_queue.emplace(this, ToPos(index)); + SetLight(index, 0); work_dark(); - } else if (old_type.block_light && !new_type.block_light) { + work_light(); + } else if (!new_type.block_light && old_type.block_light) { + // obstacle removed int level = 0; for (int face = 0; face < Block::FACE_COUNT; ++face) { Pos next_pos(ToPos(index) + Block::FaceNormal(Block::Face(face)));