From 6183b28f93f7315b7afb1f17ab46a684002e173f Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Mon, 21 Sep 2020 20:39:58 +0100 Subject: Implement redstone quasi-connectivity (#4889) --- .../IncrementalRedstoneSimulator/ForEachSourceCallback.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/Simulator/IncrementalRedstoneSimulator/ForEachSourceCallback.h') diff --git a/src/Simulator/IncrementalRedstoneSimulator/ForEachSourceCallback.h b/src/Simulator/IncrementalRedstoneSimulator/ForEachSourceCallback.h index 6d49291cb..66b56aa5a 100644 --- a/src/Simulator/IncrementalRedstoneSimulator/ForEachSourceCallback.h +++ b/src/Simulator/IncrementalRedstoneSimulator/ForEachSourceCallback.h @@ -13,20 +13,24 @@ public: ForEachSourceCallback(const cChunk & Chunk, Vector3i Position, BLOCKTYPE CurrentBlock); - /** Returns whether a potential source position should be treated as linked. */ - bool ShouldQueryLinkedPosition(Vector3i Location, BLOCKTYPE Block); - /** Callback invoked for each potential source position of the redstone component. */ void operator()(Vector3i Location); - /** Asks redstone handlers adjacent to a solid block how much power they will deliver to the querying position, via the solid block. - Both QueryPosition and SolidBlockPosition are relative to Chunk. */ - static PowerLevel QueryLinkedPower(const cChunk & Chunk, Vector3i QueryPosition, BLOCKTYPE QueryBlock, Vector3i SolidBlockPosition); + /** Callback invoked for blocks supporting quasiconnectivity. */ + void CheckIndirectPower(); + // The maximum power level of all source locations. PowerLevel Power; private: + /** Returns whether a potential source position that's occupied by Block should be treated as linked. */ + static bool ShouldQueryLinkedPosition(BLOCKTYPE Block); + + /** Asks redstone handlers adjacent to a solid block how much power they will deliver to the querying position, via the solid block. + Both QueryPosition and SolidBlockPosition are relative to Chunk. */ + static PowerLevel QueryLinkedPower(const cChunk & Chunk, Vector3i QueryPosition, BLOCKTYPE QueryBlock, Vector3i SolidBlockPosition); + const cChunk & m_Chunk; const Vector3i m_Position; const BLOCKTYPE m_CurrentBlock; -- cgit v1.2.3