4 #include "../../Blocks/BlockObserver.h"
14 return (a_Meta & 0x8) == 0x8;
27 const auto FindResult = ObserverCache.find(a_Position);
28 const auto Observed = std::make_pair(
BlockType, BlockMeta);
30 if (FindResult == ObserverCache.end())
33 ObserverCache.emplace(a_Position, Observed);
40 const auto Previous = FindResult->second;
43 FindResult->second = Observed;
46 return Previous != Observed;
51 const auto Meta = a_Chunk.
GetMeta(a_Position);
60 auto DelayInfo = Data.GetMechanismDelayInfo(a_Position);
62 if (DelayInfo ==
nullptr)
71 Data.m_MechanismDelays[a_Position] = std::make_pair(1,
true);
88 *DelayInfo = std::make_pair(1,
false);
89 a_Chunk.
SetMeta(a_Position, a_Meta | 0x8);
94 Data.m_MechanismDelays.erase(a_Position);
95 a_Chunk.
SetMeta(a_Position, a_Meta & ~0x8);
unsigned char NIBBLETYPE
The datatype used by nibbledata (meta, light, skylight)
unsigned char BLOCKTYPE
The datatype used by blockdata.
auto & DataForChunk(const cChunk &a_Chunk)
void UpdateAdjustedRelative(const cChunk &a_Chunk, const cChunk &a_TickingChunk, const Vector3i a_Position, const Vector3i a_Offset)
unsigned char Power(const BlockState Block)
static void Update(cChunk &a_Chunk, cChunk &CurrentlyTicking, Vector3i a_Position, BLOCKTYPE a_BlockType, NIBBLETYPE a_Meta, const PowerLevel Power)
static void ForValidSourcePositions(const cChunk &a_Chunk, Vector3i a_Position, BLOCKTYPE a_BlockType, NIBBLETYPE a_Meta, ForEachSourceCallback &Callback)
static PowerLevel GetPowerDeliveredToPosition(const cChunk &a_Chunk, Vector3i a_Position, BLOCKTYPE a_BlockType, Vector3i a_QueryPosition, BLOCKTYPE a_QueryBlockType, bool IsLinked)
static bool IsOn(NIBBLETYPE a_Meta)
static bool ShouldPowerOn(cChunk &Chunk, const Vector3i a_Position, NIBBLETYPE a_Meta, cIncrementalRedstoneSimulatorChunkData &a_Data)
static Vector3i GetObservingFaceOffset(NIBBLETYPE a_Meta)
static Vector3i GetSignalOutputOffset(NIBBLETYPE a_Meta)
NIBBLETYPE GetMeta(int a_RelX, int a_RelY, int a_RelZ) const
bool UnboundedRelGetBlock(Vector3i a_RelCoords, BLOCKTYPE &a_BlockType, NIBBLETYPE &a_BlockMeta) const
Same as GetBlock(), but relative coords needn't be in this chunk (uses m_Neighbor-s or m_ChunkMap in ...
void SetMeta(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE a_Meta)
std::unordered_map< Vector3i, std::pair< BLOCKTYPE, NIBBLETYPE >, VectorHasher< int > > ObserverCache
Structure storing an observer's last seen block.