diff options
author | Tiger Wang <ziwei.tiger@outlook.com> | 2018-07-24 01:35:20 +0200 |
---|---|---|
committer | Tiger Wang <ziwei.tiger@outlook.com> | 2018-07-25 16:29:53 +0200 |
commit | b8ab03bc6b41dbe8262f87def3ff3513924315d4 (patch) | |
tree | 689ae898e310323b7574f23fff27ff4e00ec371e /src/Simulator/IncrementalRedstoneSimulator/PistonHandler.h | |
parent | Reimplemented fall particles (diff) | |
download | cuberite-b8ab03bc6b41dbe8262f87def3ff3513924315d4.tar cuberite-b8ab03bc6b41dbe8262f87def3ff3513924315d4.tar.gz cuberite-b8ab03bc6b41dbe8262f87def3ff3513924315d4.tar.bz2 cuberite-b8ab03bc6b41dbe8262f87def3ff3513924315d4.tar.lz cuberite-b8ab03bc6b41dbe8262f87def3ff3513924315d4.tar.xz cuberite-b8ab03bc6b41dbe8262f87def3ff3513924315d4.tar.zst cuberite-b8ab03bc6b41dbe8262f87def3ff3513924315d4.zip |
Diffstat (limited to 'src/Simulator/IncrementalRedstoneSimulator/PistonHandler.h')
-rw-r--r-- | src/Simulator/IncrementalRedstoneSimulator/PistonHandler.h | 38 |
1 files changed, 12 insertions, 26 deletions
diff --git a/src/Simulator/IncrementalRedstoneSimulator/PistonHandler.h b/src/Simulator/IncrementalRedstoneSimulator/PistonHandler.h index 01742b13c..de001a9e5 100644 --- a/src/Simulator/IncrementalRedstoneSimulator/PistonHandler.h +++ b/src/Simulator/IncrementalRedstoneSimulator/PistonHandler.h @@ -36,39 +36,25 @@ public: virtual cVector3iArray Update(cWorld & a_World, Vector3i a_Position, BLOCKTYPE a_BlockType, NIBBLETYPE a_Meta, PoweringData a_PoweringData) const override { // LOGD("Evaluating pisty the piston (%d %d %d)", a_Position.x, a_Position.y, a_Position.z); - auto Data = static_cast<cIncrementalRedstoneSimulator *>(a_World.GetRedstoneSimulator())->GetChunkData(); - auto DelayInfo = Data->GetMechanismDelayInfo(a_Position); - // Delay is used here to prevent an infinite loop (#3168) - if (DelayInfo == nullptr) + bool ShouldBeExtended = (a_PoweringData.PowerLevel != 0); + if (ShouldBeExtended == cBlockPistonHandler::IsExtended(a_Meta)) { - bool ShouldBeExtended = (a_PoweringData.PowerLevel != 0); - if (ShouldBeExtended != cBlockPistonHandler::IsExtended(a_Meta)) - { - Data->m_MechanismDelays[a_Position] = std::make_pair(1, ShouldBeExtended); - } + return {}; + } + + if (ShouldBeExtended) + { + cBlockPistonHandler::ExtendPiston(a_Position, a_World); } else { - int DelayTicks; - bool ShouldBeExtended; - std::tie(DelayTicks, ShouldBeExtended) = *DelayInfo; - - if (DelayTicks == 0) - { - if (ShouldBeExtended) - { - cBlockPistonHandler::ExtendPiston(a_Position, a_World); - } - else - { - cBlockPistonHandler::RetractPiston(a_Position, a_World); - } - - Data->m_MechanismDelays.erase(a_Position); - } + cBlockPistonHandler::RetractPiston(a_Position, a_World); } + // It is necessary to delay after a signal to prevent an infinite loop (#3168) + // However, that is present as a side effect of the implementation of piston animation in Blocks\BlockPiston.cpp + return {}; } |