From 6d650d5f3c59663c94da8b269d9e5cc3979c3da4 Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Sat, 25 Jul 2020 20:59:12 +0100 Subject: [PATCH] Reduce unnecessary wakeups - cSimulator no longer wakes up positions already woken by cChunk::SetBlock --- src/Chunk.cpp | 29 ++++++++++++++++++++++------- src/Simulator/Simulator.cpp | 12 ------------ 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/Chunk.cpp b/src/Chunk.cpp index d354448ce..fb37ce3b3 100644 --- a/src/Chunk.cpp +++ b/src/Chunk.cpp @@ -1374,19 +1374,34 @@ void cChunk::QueueTickBlock(Vector3i a_RelPos) void cChunk::QueueTickBlockNeighbors(Vector3i a_RelPos) { - static const Vector3i neighborOfs[] = + // Contains our direct adjacents + // and one block above and below the laterals (for redstone components) + static const Vector3i Offsets[] = { + { 1, 1, 0}, { 1, 0, 0}, + { 1, -1, 0}, + + {-1, 1, 0}, {-1, 0, 0}, + {-1, -1, 0}, + + { 0, 1, 1}, + { 0, 0, 1}, + { 0, -1, 1}, + + { 0, 1, -1}, + { 0, 0, -1}, + { 0, -1, -1}, + { 0, 1, 0}, { 0, -1, 0}, - { 0, 0, 1}, - { 0, 0, -1}, - } ; - for (const auto & ofs: neighborOfs) + }; + + for (const auto & Offset : Offsets) { - UnboundedQueueTickBlock(a_RelPos + ofs); - } // for i - Coords[] + UnboundedQueueTickBlock(a_RelPos + Offset); + } } diff --git a/src/Simulator/Simulator.cpp b/src/Simulator/Simulator.cpp index 9dbdd6a07..ac2e757e4 100644 --- a/src/Simulator/Simulator.cpp +++ b/src/Simulator/Simulator.cpp @@ -21,18 +21,6 @@ void cSimulator::WakeUp(Vector3i a_Block, cChunk * a_Chunk) { AddBlock(a_Block, a_Chunk); - AddBlock(a_Block + Vector3i(-1, 0, 0), a_Chunk->GetNeighborChunk(a_Block.x - 1, a_Block.z)); - AddBlock(a_Block + Vector3i( 1, 0, 0), a_Chunk->GetNeighborChunk(a_Block.x + 1, a_Block.z)); - AddBlock(a_Block + Vector3i(0, 0, -1), a_Chunk->GetNeighborChunk(a_Block.x, a_Block.z - 1)); - AddBlock(a_Block + Vector3i(0, 0, 1), a_Chunk->GetNeighborChunk(a_Block.x, a_Block.z + 1)); - if (a_Block.y > 0) - { - AddBlock(a_Block + Vector3i(0, -1, 0), a_Chunk); - } - if (a_Block.y < cChunkDef::Height - 1) - { - AddBlock(a_Block + Vector3i(0, 1, 0), a_Chunk); - } }