summaryrefslogtreecommitdiffstats
path: root/src/Simulator/IncrementalRedstoneSimulator/RedstoneHandler.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Simulator/IncrementalRedstoneSimulator/RedstoneHandler.h')
-rw-r--r--src/Simulator/IncrementalRedstoneSimulator/RedstoneHandler.h87
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);
+}