diff options
Diffstat (limited to 'source/Simulator/RedstoneSimulator.h')
-rw-r--r-- | source/Simulator/RedstoneSimulator.h | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/source/Simulator/RedstoneSimulator.h b/source/Simulator/RedstoneSimulator.h index d68c6daeb..25959ac0b 100644 --- a/source/Simulator/RedstoneSimulator.h +++ b/source/Simulator/RedstoneSimulator.h @@ -32,7 +32,6 @@ public: REDSTONE_Z_NEG = 0x8, }; eRedstoneDirection GetWireDirection(int a_BlockX, int a_BlockY, int a_BlockZ); - eRedstoneDirection GetWireDirection(const Vector3i & a_Pos) { return GetWireDirection(a_Pos.x, a_Pos.y, a_Pos.z); } private: @@ -97,26 +96,62 @@ private: /* ===================== */ /* ====== Helper functions ====== */ + ///<summary>Marks a block as powered</summary> void SetBlockPowered(int a_BlockX, int a_BlockY, int a_BlockZ, int a_SourceX, int a_SourceY, int a_SourceZ, BLOCKTYPE a_SourceBlock); + ///<summary>Marks a block as being powered through another block</summary> void SetBlockLinkedPowered(int a_BlockX, int a_BlockY, int a_BlockZ, int a_MiddleX, int a_MiddleY, int a_MiddleZ, int a_SourceX, int a_SourceY, int a_SourceZ, BLOCKTYPE a_SourceBlock, BLOCKTYPE a_MiddeBlock); - void SetDirectionLinkedPowered(int a_BlockX, int a_BlockY, int a_BlockZ, char a_Direction, BLOCKTYPE a_SourceType); + ///<summary>Marks the second block in a direction as linked powered</summary> + void SetDirectionLinkedPowered(int a_BlockX, int a_BlockY, int a_BlockZ, char a_Direction, BLOCKTYPE a_SourceBlock); + ///<summary>Marks all blocks immediately surrounding a coordinate as powered</summary> + void SetAllDirsAsPowered(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_SourceBlock); + ///<summary>Returns if a coordinate is powered or linked powered</summary> bool AreCoordsPowered(int a_BlockX, int a_BlockY, int a_BlockZ); + ///<summary>Returns if a repeater is powered</summary> bool IsRepeaterPowered(int a_BlockX, int a_BlockY, int a_BlockZ, NIBBLETYPE a_Meta); + ///<summary>Returns if lever metadata marks it as emitting power</summary> bool IsLeverOn(NIBBLETYPE a_BlockMeta); + ///<summary>Returns if button metadata marks it as emitting power</summary> bool IsButtonOn(NIBBLETYPE a_BlockMeta); /* ============================== */ + /* ====== Misc Functions ====== */ + ///<summary>Returns if a block is viable to be the MiddleBlock of a SetLinkedPowered operation</summary> + inline static bool IsViableMiddleBlock(BLOCKTYPE Block) + { + if (!g_BlockIsSolid[Block]) { return false; } + + switch (Block) + { + // Add SOLID but not viable middle blocks here + case E_BLOCK_REDSTONE_REPEATER_ON: + case E_BLOCK_REDSTONE_REPEATER_OFF: + { + return false; + } + default: + { + return true; + } + } + } + + ///<summary>Returns if a block is a mechanism (something that accepts power and does something)</summary> inline static bool IsMechanism(BLOCKTYPE Block) { switch (Block) { + case E_BLOCK_ACTIVATOR_RAIL: case E_BLOCK_PISTON: case E_BLOCK_STICKY_PISTON: case E_BLOCK_DISPENSER: case E_BLOCK_DROPPER: + case E_BLOCK_FENCE_GATE: + case E_BLOCK_HOPPER: + case E_BLOCK_NOTE_BLOCK: case E_BLOCK_TNT: + case E_BLOCK_TRAPDOOR: case E_BLOCK_REDSTONE_LAMP_OFF: case E_BLOCK_REDSTONE_LAMP_ON: case E_BLOCK_WOODEN_DOOR: @@ -131,6 +166,7 @@ private: } } + ///<summary>Returns if a block has the potential to output power</summary> inline static bool IsPotentialSource(BLOCKTYPE Block) { switch (Block) @@ -153,6 +189,7 @@ private: } } + ///<summary>Returns if a block is any sort of redstone device</summary> inline static bool IsRedstone(BLOCKTYPE Block) { switch (Block) |