summaryrefslogtreecommitdiffstats
path: root/src/Simulator/IncrementalRedstoneSimulator/RedstoneSimulatorChunkData.h
diff options
context:
space:
mode:
authorTiger Wang <ziwei.tiger@hotmail.co.uk>2015-06-27 00:24:51 +0200
committerTiger Wang <ziwei.tiger@hotmail.co.uk>2015-12-18 14:17:38 +0100
commit5b62c4c3145c08b093521e42c565922fa85de4ad (patch)
treedca8cbfe86aa27af174da21f6835a8fbbe83d248 /src/Simulator/IncrementalRedstoneSimulator/RedstoneSimulatorChunkData.h
parentMerge pull request #2770 from cuberite/RemoveChunkDataCollector (diff)
downloadcuberite-5b62c4c3145c08b093521e42c565922fa85de4ad.tar
cuberite-5b62c4c3145c08b093521e42c565922fa85de4ad.tar.gz
cuberite-5b62c4c3145c08b093521e42c565922fa85de4ad.tar.bz2
cuberite-5b62c4c3145c08b093521e42c565922fa85de4ad.tar.lz
cuberite-5b62c4c3145c08b093521e42c565922fa85de4ad.tar.xz
cuberite-5b62c4c3145c08b093521e42c565922fa85de4ad.tar.zst
cuberite-5b62c4c3145c08b093521e42c565922fa85de4ad.zip
Diffstat (limited to 'src/Simulator/IncrementalRedstoneSimulator/RedstoneSimulatorChunkData.h')
-rw-r--r--src/Simulator/IncrementalRedstoneSimulator/RedstoneSimulatorChunkData.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/Simulator/IncrementalRedstoneSimulator/RedstoneSimulatorChunkData.h b/src/Simulator/IncrementalRedstoneSimulator/RedstoneSimulatorChunkData.h
new file mode 100644
index 000000000..8e025d154
--- /dev/null
+++ b/src/Simulator/IncrementalRedstoneSimulator/RedstoneSimulatorChunkData.h
@@ -0,0 +1,70 @@
+
+#pragma once
+
+#include "Vector3.h"
+#include "RedstoneHandler.h"
+#include "../RedstoneSimulator.h"
+#include <unordered_map>
+
+
+
+
+
+class cIncrementalRedstoneSimulatorChunkData : public cRedstoneSimulatorChunkData
+{
+
+public:
+ void WakeUp(const Vector3i & a_Position)
+ {
+ m_ActiveBlocks.push_back(a_Position);
+ }
+
+ cVector3iArray & GetActiveBlocks()
+ {
+ return m_ActiveBlocks;
+ }
+
+ const cRedstoneHandler::PoweringData GetCachedPowerData(const Vector3i & a_Position) const
+ {
+ auto Result = m_CachedPowerLevels.find(a_Position);
+ return (Result == m_CachedPowerLevels.end()) ? cRedstoneHandler::PoweringData() : Result->second;
+ }
+
+ void SetCachedPowerData(const Vector3i & a_Position, cRedstoneHandler::PoweringData a_PoweringData)
+ {
+ m_CachedPowerLevels[a_Position] = a_PoweringData;
+ }
+
+ std::pair<int, bool> * GetMechanismDelayInfo(const Vector3i & a_Position)
+ {
+ auto Result = m_MechanismDelays.find(a_Position);
+ return (Result == m_MechanismDelays.end()) ? nullptr : &Result->second;
+ }
+
+ cRedstoneHandler::PoweringData ExchangeUpdateOncePowerData(const Vector3i & a_Position, cRedstoneHandler::PoweringData a_PoweringData)
+ {
+ auto Result = m_CachedPowerLevels.find(a_Position);
+ if (Result == m_CachedPowerLevels.end())
+ {
+ m_CachedPowerLevels[a_Position] = a_PoweringData;
+ return cRedstoneHandler::PoweringData();
+ }
+ std::swap(Result->second, a_PoweringData);
+ return a_PoweringData;
+ }
+
+ /** Structure storing position of mechanism + it's delay ticks (countdown) & if to power on */
+ std::unordered_map<Vector3i, std::pair<int, bool>, VectorHasher<int>> m_MechanismDelays;
+ std::unordered_map<Vector3i, bool, VectorHasher<int>> m_UpdateOncePositions;
+
+private:
+
+ cVector3iArray m_ActiveBlocks;
+
+ // TODO: map<Vector3i, int> -> Position of torch + it's heat level
+
+ std::unordered_map<Vector3i, cRedstoneHandler::PoweringData, VectorHasher<int>> m_CachedPowerLevels;
+
+ friend class cRedstoneHandlerFactory;
+
+};