diff options
Diffstat (limited to 'src/Simulator/IncrementalRedstoneSimulator/PistonHandler.h')
-rw-r--r-- | src/Simulator/IncrementalRedstoneSimulator/PistonHandler.h | 111 |
1 files changed, 66 insertions, 45 deletions
diff --git a/src/Simulator/IncrementalRedstoneSimulator/PistonHandler.h b/src/Simulator/IncrementalRedstoneSimulator/PistonHandler.h index 9713bc0a6..16334808d 100644 --- a/src/Simulator/IncrementalRedstoneSimulator/PistonHandler.h +++ b/src/Simulator/IncrementalRedstoneSimulator/PistonHandler.h @@ -9,59 +9,80 @@ namespace PistonHandler { - static PowerLevel GetPowerDeliveredToPosition(const cChunk & a_Chunk, Vector3i a_Position, BLOCKTYPE a_BlockType, Vector3i a_QueryPosition, BLOCKTYPE a_QueryBlockType, bool IsLinked) - { - UNUSED(a_Chunk); - UNUSED(a_Position); - UNUSED(a_BlockType); - UNUSED(a_QueryPosition); - UNUSED(a_QueryBlockType); - UNUSED(IsLinked); - return 0; - } +static PowerLevel GetPowerDeliveredToPosition( + const cChunk & a_Chunk, + Vector3i a_Position, + BLOCKTYPE a_BlockType, + Vector3i a_QueryPosition, + BLOCKTYPE a_QueryBlockType, + bool IsLinked +) +{ + UNUSED(a_Chunk); + UNUSED(a_Position); + UNUSED(a_BlockType); + UNUSED(a_QueryPosition); + UNUSED(a_QueryBlockType); + UNUSED(IsLinked); + return 0; +} + +static void Update( + cChunk & a_Chunk, + cChunk &, + Vector3i a_Position, + BLOCKTYPE a_BlockType, + NIBBLETYPE a_Meta, + const PowerLevel Power +) +{ + // LOGD("Evaluating pisty the piston (%d %d %d)", a_Position.x, a_Position.y, a_Position.z); - static void Update(cChunk & a_Chunk, cChunk &, Vector3i a_Position, BLOCKTYPE a_BlockType, NIBBLETYPE a_Meta, const PowerLevel Power) + const bool ShouldBeExtended = Power != 0; + if (ShouldBeExtended == cBlockPistonHandler::IsExtended(a_Meta)) { - // LOGD("Evaluating pisty the piston (%d %d %d)", a_Position.x, a_Position.y, a_Position.z); - - const bool ShouldBeExtended = Power != 0; - if (ShouldBeExtended == cBlockPistonHandler::IsExtended(a_Meta)) - { - return; - } + return; + } - a_Position = cChunkDef::RelativeToAbsolute(a_Position, a_Chunk.GetPos()); + a_Position = cChunkDef::RelativeToAbsolute(a_Position, a_Chunk.GetPos()); - if (ShouldBeExtended) - { - cBlockPistonHandler::ExtendPiston(a_Position, *a_Chunk.GetWorld()); - } - else - { - cBlockPistonHandler::RetractPiston(a_Position, *a_Chunk.GetWorld()); - } - - // It is necessary to delay after a signal to prevent an infinite loop (#3168) - // However, this delay is already present: as a side effect of the implementation of piston animation in Blocks\BlockPiston.cpp + if (ShouldBeExtended) + { + cBlockPistonHandler::ExtendPiston(a_Position, *a_Chunk.GetWorld()); } - - static void ForValidSourcePositions(const cChunk & a_Chunk, Vector3i a_Position, BLOCKTYPE a_BlockType, NIBBLETYPE a_Meta, ForEachSourceCallback & Callback) + else { - UNUSED(a_Chunk); - UNUSED(a_BlockType); + cBlockPistonHandler::RetractPiston(a_Position, *a_Chunk.GetWorld()); + } - const auto Face = cBlockPistonHandler::MetaDataToDirection(a_Meta); - const auto FrontOffset = AddFaceDirection(Vector3i(), Face); + // It is necessary to delay after a signal to prevent an infinite loop (#3168) + // However, this delay is already present: as a side effect of the implementation of piston animation in + // Blocks\BlockPiston.cpp +} + +static void ForValidSourcePositions( + const cChunk & a_Chunk, + Vector3i a_Position, + BLOCKTYPE a_BlockType, + NIBBLETYPE a_Meta, + ForEachSourceCallback & Callback +) +{ + UNUSED(a_Chunk); + UNUSED(a_BlockType); + + const auto Face = cBlockPistonHandler::MetaDataToDirection(a_Meta); + const auto FrontOffset = AddFaceDirection(Vector3i(), Face); - for (const auto & Offset : RelativeAdjacents) + for (const auto & Offset : RelativeAdjacents) + { + if (Offset != FrontOffset) { - if (Offset != FrontOffset) - { - Callback(a_Position + Offset); - } + Callback(a_Position + Offset); } - - // Consider indirect power: - Callback.CheckIndirectPower(); } -}; + + // Consider indirect power: + Callback.CheckIndirectPower(); +} +}; // namespace PistonHandler |