summaryrefslogtreecommitdiffstats
path: root/src/Simulator/IncrementalRedstoneSimulator
diff options
context:
space:
mode:
authorTiger Wang <ziwei.tiger@outlook.com>2016-02-09 23:02:50 +0100
committerTiger Wang <ziwei.tiger@outlook.com>2016-02-09 23:02:50 +0100
commit3c272b55ea1239238ad9726bba9f7dc8b130e545 (patch)
tree1132b156ca24e691a1c3306b8eb81ba296c6f2f6 /src/Simulator/IncrementalRedstoneSimulator
parentMerge pull request #2996 from LogicParrot/message2 (diff)
parentUpdate RedstoneSimulator to delete unused cached PowerData (diff)
downloadcuberite-3c272b55ea1239238ad9726bba9f7dc8b130e545.tar
cuberite-3c272b55ea1239238ad9726bba9f7dc8b130e545.tar.gz
cuberite-3c272b55ea1239238ad9726bba9f7dc8b130e545.tar.bz2
cuberite-3c272b55ea1239238ad9726bba9f7dc8b130e545.tar.lz
cuberite-3c272b55ea1239238ad9726bba9f7dc8b130e545.tar.xz
cuberite-3c272b55ea1239238ad9726bba9f7dc8b130e545.tar.zst
cuberite-3c272b55ea1239238ad9726bba9f7dc8b130e545.zip
Diffstat (limited to 'src/Simulator/IncrementalRedstoneSimulator')
-rw-r--r--src/Simulator/IncrementalRedstoneSimulator/IncrementalRedstoneSimulator.cpp5
-rw-r--r--src/Simulator/IncrementalRedstoneSimulator/RedstoneSimulatorChunkData.h6
2 files changed, 10 insertions, 1 deletions
diff --git a/src/Simulator/IncrementalRedstoneSimulator/IncrementalRedstoneSimulator.cpp b/src/Simulator/IncrementalRedstoneSimulator/IncrementalRedstoneSimulator.cpp
index 3c79d152b..0e9621910 100644
--- a/src/Simulator/IncrementalRedstoneSimulator/IncrementalRedstoneSimulator.cpp
+++ b/src/Simulator/IncrementalRedstoneSimulator/IncrementalRedstoneSimulator.cpp
@@ -125,8 +125,11 @@ void cIncrementalRedstoneSimulator::Simulate(float a_dt)
}
auto CurrentHandler = cIncrementalRedstoneSimulator::CreateComponent(m_World, CurrentBlock, &m_Data);
- if (CurrentHandler == nullptr)
+ if (CurrentHandler == nullptr) // Block at CurrentPosition doesn't have a corresponding redstone handler
{
+ // Clean up cached PowerData for CurrentPosition
+ static_cast<cIncrementalRedstoneSimulator *>(m_World.GetRedstoneSimulator())->GetChunkData()->ErasePowerData(CurrentLocation);
+
continue;
}
diff --git a/src/Simulator/IncrementalRedstoneSimulator/RedstoneSimulatorChunkData.h b/src/Simulator/IncrementalRedstoneSimulator/RedstoneSimulatorChunkData.h
index 8e025d154..b461512f0 100644
--- a/src/Simulator/IncrementalRedstoneSimulator/RedstoneSimulatorChunkData.h
+++ b/src/Simulator/IncrementalRedstoneSimulator/RedstoneSimulatorChunkData.h
@@ -41,6 +41,12 @@ public:
return (Result == m_MechanismDelays.end()) ? nullptr : &Result->second;
}
+ /** Erase cached PowerData for position */
+ void ErasePowerData(const Vector3i & a_Position)
+ {
+ m_CachedPowerLevels.erase(a_Position);
+ }
+
cRedstoneHandler::PoweringData ExchangeUpdateOncePowerData(const Vector3i & a_Position, cRedstoneHandler::PoweringData a_PoweringData)
{
auto Result = m_CachedPowerLevels.find(a_Position);