diff options
Diffstat (limited to 'src/Simulator/IncrementalRedstoneSimulator/RedstoneHandler.h')
-rw-r--r-- | src/Simulator/IncrementalRedstoneSimulator/RedstoneHandler.h | 87 |
1 files changed, 8 insertions, 79 deletions
diff --git a/src/Simulator/IncrementalRedstoneSimulator/RedstoneHandler.h b/src/Simulator/IncrementalRedstoneSimulator/RedstoneHandler.h index 9b131ece2..5b3dcdeac 100644 --- a/src/Simulator/IncrementalRedstoneSimulator/RedstoneHandler.h +++ b/src/Simulator/IncrementalRedstoneSimulator/RedstoneHandler.h @@ -1,89 +1,18 @@ #pragma once -#include "../../Chunk.h" -#include "ForEachSourceCallback.h" #include "RedstoneSimulatorChunkData.h" +class cChunk; +class ForEachSourceCallback; - - - -class cRedstoneHandler +namespace RedstoneHandler { -public: - - cRedstoneHandler() = default; - DISALLOW_COPY_AND_ASSIGN(cRedstoneHandler); - - using SourceCallback = ForEachSourceCallback &; - - virtual unsigned char GetPowerDeliveredToPosition(const cChunk & a_Chunk, Vector3i a_Position, BLOCKTYPE a_BlockType, Vector3i a_QueryPosition, BLOCKTYPE a_QueryBlockType, bool IsLinked) const = 0; - virtual void Update(cChunk & a_Chunk, cChunk & CurrentlyTicking, Vector3i a_Position, BLOCKTYPE a_BlockType, NIBBLETYPE a_Meta, PoweringData a_PoweringData) const = 0; - virtual void ForValidSourcePositions(const cChunk & a_Chunk, Vector3i a_Position, BLOCKTYPE a_BlockType, NIBBLETYPE a_Meta, SourceCallback Callback) const = 0; - - // Force a virtual destructor - virtual ~cRedstoneHandler() {} - -protected: - - inline static auto & DataForChunk(const cChunk & a_Chunk) - { - return *static_cast<cIncrementalRedstoneSimulatorChunkData *>(a_Chunk.GetRedstoneSimulatorData()); - } - - template <typename... ArrayTypes> - static void UpdateAdjustedRelative(const cChunk & From, const cChunk & To, const Vector3i Position, const Vector3i Offset) - { - DataForChunk(To).WakeUp(cIncrementalRedstoneSimulatorChunkData::RebaseRelativePosition(From, To, Position + Offset)); - - for (const auto LinkedOffset : cSimulator::GetLinkedOffsets(Offset)) - { - DataForChunk(To).WakeUp(cIncrementalRedstoneSimulatorChunkData::RebaseRelativePosition(From, To, Position + LinkedOffset)); - } - } - - template <typename ArrayType> - static void UpdateAdjustedRelatives(const cChunk & From, const cChunk & To, const Vector3i Position, const ArrayType & Relative) - { - for (const auto Offset : Relative) - { - UpdateAdjustedRelative(From, To, Position, Offset); - } - } - - template <typename ArrayType> - static void InvokeForAdjustedRelatives(SourceCallback Callback, const Vector3i Position, const ArrayType & Relative) - { - for (const auto Offset : Relative) - { - Callback(Position + Offset); - } - } - - inline static Vector3i OffsetYP{ 0, 1, 0 }; + unsigned char GetPowerDeliveredToPosition(const cChunk & Chunk, Vector3i Position, BLOCKTYPE BlockType, Vector3i QueryPosition, BLOCKTYPE QueryBlockType, bool IsLinked); - inline static Vector3i OffsetYM{ 0, -1, 0 }; + void Update(cChunk & Chunk, cChunk & CurrentlyTicking, Vector3i Position, BLOCKTYPE BlockType, NIBBLETYPE Meta, PoweringData PoweringData); - inline static std::array<Vector3i, 6> RelativeAdjacents - { - { - { 1, 0, 0 }, - { -1, 0, 0 }, - { 0, 1, 0 }, - { 0, -1, 0 }, - { 0, 0, 1 }, - { 0, 0, -1 }, - } - }; + void ForValidSourcePositions(const cChunk & Chunk, Vector3i Position, BLOCKTYPE BlockType, NIBBLETYPE Meta, ForEachSourceCallback & Callback); - inline static std::array<Vector3i, 4> RelativeLaterals - { - { - { 1, 0, 0 }, - { -1, 0, 0 }, - { 0, 0, 1 }, - { 0, 0, -1 }, - } - }; -}; + void SetWireState(const cChunk & Chunk, Vector3i Position); +} |