commit
e474f40ac9
@ -4,7 +4,7 @@
|
||||
#include "BlockHandler.h"
|
||||
#include "ChunkInterface.h"
|
||||
#include "WorldInterface.h"
|
||||
#include "MetaRotater.h"
|
||||
#include "MetaRotator.h"
|
||||
#include "../Entities/Player.h"
|
||||
|
||||
|
||||
@ -12,11 +12,11 @@
|
||||
|
||||
|
||||
class cBlockBedHandler :
|
||||
public cMetaRotater<cBlockHandler, 0x3, 0x02, 0x03, 0x00, 0x01, true>
|
||||
public cMetaRotator<cBlockHandler, 0x3, 0x02, 0x03, 0x00, 0x01, true>
|
||||
{
|
||||
public:
|
||||
cBlockBedHandler(BLOCKTYPE a_BlockType)
|
||||
: cMetaRotater<cBlockHandler, 0x3, 0x02, 0x03, 0x00, 0x01,true>(a_BlockType)
|
||||
: cMetaRotator<cBlockHandler, 0x3, 0x02, 0x03, 0x00, 0x01,true>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -2,17 +2,17 @@
|
||||
|
||||
#include "BlockHandler.h"
|
||||
#include "Chunk.h"
|
||||
#include "MetaRotater.h"
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
|
||||
class cBlockButtonHandler :
|
||||
public cMetaRotater<cBlockHandler, 0x07, 0x04, 0x01, 0x03, 0x02, true>
|
||||
public cMetaRotator<cBlockHandler, 0x07, 0x04, 0x01, 0x03, 0x02, true>
|
||||
{
|
||||
public:
|
||||
cBlockButtonHandler(BLOCKTYPE a_BlockType)
|
||||
: cMetaRotater<cBlockHandler, 0x07, 0x04, 0x01, 0x03, 0x02, true>(a_BlockType)
|
||||
: cMetaRotator<cBlockHandler, 0x07, 0x04, 0x01, 0x03, 0x02, true>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -4,18 +4,18 @@
|
||||
#include "BlockEntity.h"
|
||||
#include "../BlockArea.h"
|
||||
#include "../Entities/Player.h"
|
||||
#include "MetaRotater.h"
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class cBlockChestHandler :
|
||||
public cMetaRotater<cBlockEntityHandler, 0x07, 0x04, 0x01, 0x03, 0x02, true>
|
||||
public cMetaRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>
|
||||
{
|
||||
public:
|
||||
cBlockChestHandler(BLOCKTYPE a_BlockType)
|
||||
: cMetaRotater<cBlockEntityHandler, 0x07, 0x04, 0x01, 0x03, 0x02, true>(a_BlockType)
|
||||
: cMetaRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -3,18 +3,18 @@
|
||||
|
||||
#include "BlockHandler.h"
|
||||
#include "BlockRedstoneRepeater.h"
|
||||
#include "MetaRotater.h"
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class cBlockComparatorHandler :
|
||||
public cMetaRotater<cBlockHandler, 0x03, 0x00, 0x01, 0x02, 0x03, true>
|
||||
public cMetaRotator<cBlockHandler, 0x03, 0x00, 0x01, 0x02, 0x03, true>
|
||||
{
|
||||
public:
|
||||
cBlockComparatorHandler(BLOCKTYPE a_BlockType)
|
||||
: cMetaRotater<cBlockHandler, 0x03, 0x00, 0x01, 0x02, 0x03, true>(a_BlockType)
|
||||
: cMetaRotator<cBlockHandler, 0x03, 0x00, 0x01, 0x02, 0x03, true>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -110,3 +110,87 @@ const char * cBlockDoorHandler::GetStepSound(void)
|
||||
|
||||
|
||||
|
||||
|
||||
NIBBLETYPE cBlockDoorHandler::MetaRotateCCW(NIBBLETYPE a_Meta)
|
||||
{
|
||||
if (a_Meta & 0x08)
|
||||
{
|
||||
return a_Meta;
|
||||
}
|
||||
else
|
||||
{
|
||||
return super::MetaRotateCCW(a_Meta);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
NIBBLETYPE cBlockDoorHandler::MetaRotateCW(NIBBLETYPE a_Meta)
|
||||
{
|
||||
if (a_Meta & 0x08)
|
||||
{
|
||||
return a_Meta;
|
||||
}
|
||||
else
|
||||
{
|
||||
return super::MetaRotateCW(a_Meta);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
NIBBLETYPE cBlockDoorHandler::MetaMirrorXY(NIBBLETYPE a_Meta)
|
||||
{
|
||||
// Top bit (0x08) contains door panel type (Top/Bottom panel) Only Bottom panels contain position data
|
||||
// Return a_Meta if panel is a top panel (0x08 bit is set to 1)
|
||||
|
||||
// Note: Currently, you can not properly mirror the hinges on a double door. The orientation of the door is stored
|
||||
// in only the bottom tile while the hinge position is in the top tile. This function only operates on one tile at a time,
|
||||
// so the function can only see either the hinge position or orientation, but not both, at any given time. The class itself
|
||||
// needs extra datamembers.
|
||||
if (a_Meta & 0x08) return a_Meta;
|
||||
|
||||
// Holds open/closed meta data. 0x0C == 1100.
|
||||
NIBBLETYPE OtherMeta = a_Meta & 0x0C;
|
||||
|
||||
// Mirrors according to a table. 0x03 == 0011.
|
||||
switch (a_Meta & 0x03)
|
||||
{
|
||||
case 0x03: return 0x01 + OtherMeta; // South -> North
|
||||
case 0x01: return 0x03 + OtherMeta; // North -> South
|
||||
}
|
||||
|
||||
// Not Facing North or South; No change.
|
||||
return a_Meta;
|
||||
}
|
||||
|
||||
|
||||
|
||||
NIBBLETYPE cBlockDoorHandler::MetaMirrorYZ(NIBBLETYPE a_Meta)
|
||||
{
|
||||
// Top bit (0x08) contains door panel type (Top/Bottom panel) Only Bottom panels contain position data
|
||||
// Return a_Meta if panel is a top panel (0x08 bit is set to 1)
|
||||
|
||||
// Note: Currently, you can not properly mirror the hinges on a double door. The orientation of the door is stored
|
||||
// in only the bottom tile while the hinge position is in the top tile. This function only operates on one tile at a time,
|
||||
// so the function can only see either the hinge position or orientation, but not both, at any given time.The class itself
|
||||
// needs extra datamembers.
|
||||
|
||||
if (a_Meta & 0x08) return a_Meta;
|
||||
|
||||
// Holds open/closed meta data. 0x0C == 1100.
|
||||
NIBBLETYPE OtherMeta = a_Meta & 0x0C;
|
||||
|
||||
// Mirrors according to a table. 0x03 == 0011.
|
||||
switch (a_Meta & 0x03)
|
||||
{
|
||||
case 0x00: return 0x02 + OtherMeta; // West -> East
|
||||
case 0x02: return 0x00 + OtherMeta; // East -> West
|
||||
}
|
||||
|
||||
// Not Facing North or South; No change.
|
||||
return a_Meta;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -4,15 +4,15 @@
|
||||
#include "BlockHandler.h"
|
||||
#include "../Entities/Player.h"
|
||||
#include "Chunk.h"
|
||||
#include "MetaRotater.h"
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
|
||||
class cBlockDoorHandler :
|
||||
public cMetaRotater<cBlockHandler, 0x03, 0x01, 0x02, 0x03, 0x00, true>
|
||||
public cMetaRotator<cBlockHandler, 0x03, 0x01, 0x02, 0x03, 0x00, true>
|
||||
{
|
||||
typedef cMetaRotater<cBlockHandler, 0x03, 0x01, 0x02, 0x03, 0x00, true> super;
|
||||
typedef cMetaRotator<cBlockHandler, 0x03, 0x01, 0x02, 0x03, 0x00, true> super;
|
||||
public:
|
||||
cBlockDoorHandler(BLOCKTYPE a_BlockType);
|
||||
|
||||
@ -21,6 +21,10 @@ public:
|
||||
virtual void OnCancelRightClick(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace) override;
|
||||
virtual const char * GetStepSound(void) override;
|
||||
|
||||
virtual NIBBLETYPE MetaRotateCCW(NIBBLETYPE a_Meta) override;
|
||||
virtual NIBBLETYPE MetaRotateCW(NIBBLETYPE a_Meta) override;
|
||||
virtual NIBBLETYPE MetaMirrorXY(NIBBLETYPE a_Meta) override;
|
||||
virtual NIBBLETYPE MetaMirrorYZ(NIBBLETYPE a_Meta) override;
|
||||
|
||||
virtual bool GetPlacementBlockTypeMeta(
|
||||
cChunkInterface & a_ChunkInterface, cPlayer * a_Player,
|
||||
@ -168,62 +172,6 @@ public:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaRotateCCW(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
if (a_Meta & 0x08)
|
||||
{
|
||||
return a_Meta;
|
||||
}
|
||||
else
|
||||
{
|
||||
return super::MetaRotateCCW(a_Meta);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaRotateCW(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
if (a_Meta & 0x08)
|
||||
{
|
||||
return a_Meta;
|
||||
}
|
||||
else
|
||||
{
|
||||
return super::MetaRotateCW(a_Meta);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaMirrorXY(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
if (a_Meta & 0x08)
|
||||
{
|
||||
return a_Meta;
|
||||
}
|
||||
else
|
||||
{
|
||||
return super::MetaMirrorXY(a_Meta);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaMirrorYZ(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
if (a_Meta & 0x08)
|
||||
{
|
||||
return a_Meta;
|
||||
}
|
||||
else
|
||||
{
|
||||
return super::MetaMirrorYZ(a_Meta);
|
||||
}
|
||||
}
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
|
@ -6,18 +6,18 @@
|
||||
#pragma once
|
||||
|
||||
#include "../Piston.h"
|
||||
#include "MetaRotater.h"
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class cBlockDropSpenserHandler :
|
||||
public cMetaRotater<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>
|
||||
public cMetaRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>
|
||||
{
|
||||
public:
|
||||
cBlockDropSpenserHandler(BLOCKTYPE a_BlockType) :
|
||||
cMetaRotater<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>(a_BlockType)
|
||||
cMetaRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -2,17 +2,17 @@
|
||||
#pragma once
|
||||
|
||||
#include "BlockEntity.h"
|
||||
#include "MetaRotater.h"
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
|
||||
class cBlockEnderchestHandler :
|
||||
public cMetaRotater<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>
|
||||
public cMetaRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>
|
||||
{
|
||||
public:
|
||||
cBlockEnderchestHandler(BLOCKTYPE a_BlockType)
|
||||
: cMetaRotater<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>(a_BlockType)
|
||||
: cMetaRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -2,17 +2,17 @@
|
||||
#pragma once
|
||||
|
||||
#include "BlockHandler.h"
|
||||
#include "MetaRotater.h"
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
|
||||
class cBlockFenceGateHandler :
|
||||
public cMetaRotater<cBlockHandler, 0x03, 0x02, 0x03, 0x00, 0x01, true>
|
||||
public cMetaRotator<cBlockHandler, 0x03, 0x02, 0x03, 0x00, 0x01, true>
|
||||
{
|
||||
public:
|
||||
cBlockFenceGateHandler(BLOCKTYPE a_BlockType) :
|
||||
cMetaRotater<cBlockHandler, 0x03, 0x02, 0x03, 0x00, 0x01, true>(a_BlockType)
|
||||
cMetaRotator<cBlockHandler, 0x03, 0x02, 0x03, 0x00, 0x01, true>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -4,17 +4,17 @@
|
||||
#include "BlockEntity.h"
|
||||
#include "../World.h"
|
||||
#include "../Piston.h"
|
||||
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
|
||||
class cBlockFurnaceHandler :
|
||||
public cBlockEntityHandler
|
||||
public cMetaRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>
|
||||
{
|
||||
public:
|
||||
cBlockFurnaceHandler(BLOCKTYPE a_BlockType) :
|
||||
cBlockEntityHandler(a_BlockType)
|
||||
cBlockFurnaceHandler(BLOCKTYPE a_BlockType)
|
||||
: cMetaRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -3,16 +3,16 @@
|
||||
|
||||
// Declares the cBlockHopperHandler class representing the handler for the Hopper block
|
||||
|
||||
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
class cBlockHopperHandler :
|
||||
public cBlockEntityHandler
|
||||
public cMetaRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>
|
||||
{
|
||||
public:
|
||||
cBlockHopperHandler(BLOCKTYPE a_BlockType)
|
||||
: cBlockEntityHandler(a_BlockType)
|
||||
: cMetaRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
@ -39,6 +39,21 @@ public:
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaMirrorXZ(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
// Bit 0x08 is a flag. Lowest three bits are position. 0x08 == 1000
|
||||
NIBBLETYPE OtherMeta = a_Meta & 0x08;
|
||||
// Mirrors defined by by a table. (Source, mincraft.gamepedia.com) 0x07 == 0111
|
||||
switch (a_Meta & 0x07)
|
||||
{
|
||||
case 0x00: return 0x01 + OtherMeta; // Down -> Up
|
||||
case 0x01: return 0x00 + OtherMeta; // Up -> Down
|
||||
}
|
||||
// Not Facing Up or Down; No change.
|
||||
return a_Meta;
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
|
@ -9,11 +9,11 @@
|
||||
|
||||
|
||||
class cBlockLadderHandler :
|
||||
public cBlockHandler
|
||||
public cMetaRotator<cBlockHandler, 0x07, 0x02, 0x05, 0x03, 0x04>
|
||||
{
|
||||
public:
|
||||
cBlockLadderHandler(BLOCKTYPE a_BlockType)
|
||||
: cBlockHandler(a_BlockType)
|
||||
: cMetaRotator<cBlockHandler, 0x07, 0x02, 0x05, 0x03, 0x04>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -1,17 +1,18 @@
|
||||
#pragma once
|
||||
|
||||
#include "BlockHandler.h"
|
||||
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
|
||||
class cBlockLeverHandler :
|
||||
public cBlockHandler
|
||||
public cMetaRotator<cBlockHandler, 0x07, 0x04, 0x02, 0x03, 0x01, false>
|
||||
{
|
||||
typedef cMetaRotator<cBlockHandler, 0x07, 0x04, 0x02, 0x03, 0x01, false> super;
|
||||
public:
|
||||
cBlockLeverHandler(BLOCKTYPE a_BlockType)
|
||||
: cBlockHandler(a_BlockType)
|
||||
: cMetaRotator<cBlockHandler, 0x07, 0x04, 0x02, 0x03, 0x01, false>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
@ -104,6 +105,36 @@ public:
|
||||
|
||||
return (a_RelY > 0) && cBlockInfo::IsSolid(BlockIsOn);
|
||||
}
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaRotateCCW(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
switch (a_Meta)
|
||||
{
|
||||
case 0x00: return 0x07; // Ceiling rotation
|
||||
case 0x07: return 0x00;
|
||||
|
||||
case 0x05: return 0x06; // Ground rotation
|
||||
case 0x06: return 0x05;
|
||||
|
||||
default: return super::MetaRotateCCW(a_Meta); // Wall Rotation
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaRotateCW(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
switch (a_Meta)
|
||||
{
|
||||
case 0x00: return 0x07; // Ceiling rotation
|
||||
case 0x07: return 0x00;
|
||||
|
||||
case 0x05: return 0x06; // Ground rotation
|
||||
case 0x06: return 0x05;
|
||||
|
||||
default: return super::MetaRotateCCW(a_Meta); // Wall Rotation
|
||||
}
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
|
@ -1,16 +1,16 @@
|
||||
#pragma once
|
||||
|
||||
#include "BlockHandler.h"
|
||||
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
class cBlockPumpkinHandler :
|
||||
public cBlockHandler
|
||||
public cMetaRotator<cBlockHandler, 0x07, 0x02, 0x03, 0x00, 0x01, false>
|
||||
{
|
||||
public:
|
||||
cBlockPumpkinHandler(BLOCKTYPE a_BlockType)
|
||||
: cBlockHandler(a_BlockType)
|
||||
: cMetaRotator<cBlockHandler, 0x07, 0x02, 0x03, 0x00, 0x01, false>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -434,6 +434,141 @@ public:
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaRotateCCW(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
// Bit 0x08 is a flag when a_Meta is in the range 0x00--0x05 and 0x0A--0x0F.
|
||||
// Bit 0x08 specifies direction when a_Meta is in the range 0x06-0x09.
|
||||
if ((a_Meta < 0x06) || (a_Meta > 0x09))
|
||||
{
|
||||
// Save powered rail flag.
|
||||
NIBBLETYPE OtherMeta = a_Meta & 0x08;
|
||||
// Rotates according to table; 0x07 == 0111.
|
||||
// Rails can either be flat (North/South) or Ascending (Asc. East)
|
||||
switch (a_Meta & 0x07)
|
||||
{
|
||||
case 0x00: return 0x01 + OtherMeta; // North/South -> East/West
|
||||
case 0x01: return 0x00 + OtherMeta; // East/West -> North/South
|
||||
|
||||
case 0x02: return 0x04 + OtherMeta; // Asc. East -> Asc. North
|
||||
case 0x04: return 0x03 + OtherMeta; // Asc. North -> Asc. West
|
||||
case 0x03: return 0x05 + OtherMeta; // Asc. West -> Asc. South
|
||||
case 0x05: return 0x02 + OtherMeta; // Asc. South -> Asc. East
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (a_Meta)
|
||||
{
|
||||
// Corner Directions
|
||||
case 0x06: return 0x09; // Northwest Cnr. -> Southwest Cnr.
|
||||
case 0x07: return 0x06; // Northeast Cnr. -> Northwest Cnr.
|
||||
case 0x08: return 0x07; // Southeast Cnr. -> Northeast Cnr.
|
||||
case 0x09: return 0x08; // Southwest Cnr. -> Southeast Cnr.
|
||||
}
|
||||
}
|
||||
// To avoid a compiler warning;
|
||||
return a_Meta;
|
||||
}
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaRotateCW(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
// Bit 0x08 is a flag for value in the range 0x00--0x05 and specifies direction for values withint 0x006--0x09.
|
||||
if ((a_Meta < 0x06) || (a_Meta > 0x09))
|
||||
{
|
||||
// Save powered rail flag.
|
||||
NIBBLETYPE OtherMeta = a_Meta & 0x08;
|
||||
// Rotates according to table; 0x07 == 0111.
|
||||
// Rails can either be flat (North/South) or Ascending (Asc. East)
|
||||
switch (a_Meta & 0x07)
|
||||
{
|
||||
case 0x00: return 0x01 + OtherMeta; // North/South -> East/West
|
||||
case 0x01: return 0x00 + OtherMeta; // East/West -> North/South
|
||||
|
||||
case 0x02: return 0x05 + OtherMeta; // Asc. East -> Asc. South
|
||||
case 0x05: return 0x03 + OtherMeta; // Asc. South -> Asc. West
|
||||
case 0x03: return 0x04 + OtherMeta; // Asc. West -> Asc. North
|
||||
case 0x04: return 0x02 + OtherMeta; // Asc. North -> Asc. East
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (a_Meta)
|
||||
{
|
||||
// Corner Directions
|
||||
case 0x06: return 0x07; // Northwest Cnr. -> Northeast Cnr.
|
||||
case 0x07: return 0x08; // Northeast Cnr. -> Southeast Cnr.
|
||||
case 0x08: return 0x09; // Southeast Cnr. -> Southwest Cnr.
|
||||
case 0x09: return 0x06; // Southwest Cnr. -> Northwest Cnr.
|
||||
}
|
||||
}
|
||||
// To avoid a compiler warning;
|
||||
return a_Meta;
|
||||
}
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaMirrorXY(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
// Bit 0x08 is a flag for value in the range 0x00--0x05 and specifies direction for values withint 0x006--0x09.
|
||||
if ((a_Meta < 0x06) || (a_Meta > 0x09))
|
||||
{
|
||||
// Save powered rail flag.
|
||||
NIBBLETYPE OtherMeta = a_Meta & 0x08;
|
||||
// Mirrors according to table; 0x07 == 0111.
|
||||
// Rails can either be flat (North/South) or Ascending (Asc. East)
|
||||
switch (a_Meta & 0x07)
|
||||
{
|
||||
case 0x05: return 0x04 + OtherMeta; // Asc. South -> Asc. North
|
||||
case 0x04: return 0x05 + OtherMeta; // Asc. North -> Asc. South
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (a_Meta)
|
||||
{
|
||||
// Corner Directions
|
||||
case 0x06: return 0x09; // Northwest Cnr. -> Southwest Cnr.
|
||||
case 0x07: return 0x08; // Northeast Cnr. -> Southeast Cnr.
|
||||
case 0x08: return 0x07; // Southeast Cnr. -> Northeast Cnr.
|
||||
case 0x09: return 0x06; // Southwest Cnr. -> Northwest Cnr.
|
||||
}
|
||||
}
|
||||
// To avoid a compiler warning;
|
||||
return a_Meta;
|
||||
}
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaMirrorYZ(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
// Bit 0x08 is a flag for value in the range 0x00--0x05 and specifies direction for values withint 0x006--0x09.
|
||||
if ((a_Meta < 0x06) || (a_Meta > 0x09))
|
||||
{
|
||||
// Save powered rail flag.
|
||||
NIBBLETYPE OtherMeta = a_Meta & 0x08;
|
||||
// Mirrors according to table; 0x07 == 0111.
|
||||
// Rails can either be flat (North/South) or Ascending (Asc. East)
|
||||
switch (a_Meta & 0x07)
|
||||
{
|
||||
case 0x02: return 0x03 + OtherMeta; // Asc. East -> Asc. West
|
||||
case 0x03: return 0x02 + OtherMeta; // Asc. West -> Asc. East
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (a_Meta)
|
||||
{
|
||||
// Corner Directions
|
||||
case 0x06: return 0x07; // Northwest Cnr. -> Northeast Cnr.
|
||||
case 0x07: return 0x06; // Northeast Cnr. -> Northwest Cnr.
|
||||
case 0x08: return 0x09; // Southeast Cnr. -> Southwest Cnr.
|
||||
case 0x09: return 0x08; // Southwest Cnr. -> Southeast Cnr.
|
||||
}
|
||||
}
|
||||
// To avoid a compiler warning;
|
||||
return a_Meta;
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
|
@ -3,17 +3,17 @@
|
||||
|
||||
#include "BlockHandler.h"
|
||||
#include "Chunk.h"
|
||||
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
|
||||
class cBlockRedstoneRepeaterHandler :
|
||||
public cBlockHandler
|
||||
public cMetaRotator<cBlockHandler, 0x03, 0x00, 0x01, 0x02, 0x03, true>
|
||||
{
|
||||
public:
|
||||
cBlockRedstoneRepeaterHandler(BLOCKTYPE a_BlockType)
|
||||
: cBlockHandler(a_BlockType)
|
||||
: cMetaRotator<cBlockHandler, 0x03, 0x00, 0x01, 0x02, 0x03, true>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -71,6 +71,37 @@ public:
|
||||
{
|
||||
a_Player->GetClientHandle()->SendEditSign(a_BlockX, a_BlockY, a_BlockZ);
|
||||
}
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaRotateCW(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
return (++a_Meta) & 0x0F;
|
||||
}
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaRotateCCW(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
return (--a_Meta) & 0x0F;
|
||||
}
|
||||
|
||||
virtual NIBBLETYPE MetaMirrorXY(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
// Mirrors signs over the XY plane (North-South Mirroring)
|
||||
|
||||
// There are 16 meta values which correspond to different directions.
|
||||
// These values are equated to angles on a circle; 0x08 = 180 degrees.
|
||||
return (a_Meta < 0x08) ? 0x08 + a_Meta : 0x08 - a_Meta;
|
||||
}
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaMirrorYZ(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
// Mirrors signs over the YZ plane (East-West Mirroring)
|
||||
|
||||
// There are 16 meta values which correspond to different directions.
|
||||
// These values are equated to angles on a circle; 0x10 = 360 degrees.
|
||||
return 0x10 - a_Meta;
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
|
@ -14,8 +14,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class cBlockSlabHandler :
|
||||
public cBlockHandler
|
||||
{
|
||||
@ -184,6 +182,15 @@ public:
|
||||
ASSERT(!"Unhandled double slab type!");
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
virtual NIBBLETYPE MetaMirrorXZ(NIBBLETYPE a_Meta) override
|
||||
{
|
||||
NIBBLETYPE OtherMeta = a_Meta & 0x07; // Contains unrelated meta data.
|
||||
|
||||
// 8th bit is up/down. 1 right-side-up, 0 is up-side-down.
|
||||
return (a_Meta & 0x08) ? 0x00 + OtherMeta : 0x01 + OtherMeta;
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
|
@ -2,17 +2,17 @@
|
||||
#pragma once
|
||||
|
||||
#include "BlockHandler.h"
|
||||
#include "MetaRotater.h"
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
|
||||
class cBlockStairsHandler :
|
||||
public cMetaRotater<cBlockHandler, 0x03, 0x03, 0x00, 0x02, 0x01, true>
|
||||
public cMetaRotator<cBlockHandler, 0x03, 0x03, 0x00, 0x02, 0x01, true>
|
||||
{
|
||||
public:
|
||||
cBlockStairsHandler(BLOCKTYPE a_BlockType) :
|
||||
cMetaRotater<cBlockHandler, 0x03, 0x03, 0x00, 0x02, 0x01, true>(a_BlockType)
|
||||
cMetaRotator<cBlockHandler, 0x03, 0x03, 0x00, 0x02, 0x01, true>(a_BlockType)
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -2,17 +2,17 @@
|
||||
|
||||
#include "BlockHandler.h"
|
||||
#include "../Chunk.h"
|
||||
#include "MetaRotater.h"
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
|
||||
class cBlockTorchHandler :
|
||||
public cMetaRotater<cBlockHandler, 0x7, 0x4, 0x1, 0x3, 0x2>
|
||||
public cMetaRotator<cBlockHandler, 0x7, 0x4, 0x1, 0x3, 0x2>
|
||||
{
|
||||
public:
|
||||
cBlockTorchHandler(BLOCKTYPE a_BlockType)
|
||||
: cMetaRotater<cBlockHandler, 0x7, 0x4, 0x1, 0x3, 0x2>(a_BlockType)
|
||||
: cMetaRotator<cBlockHandler, 0x7, 0x4, 0x1, 0x3, 0x2>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -2,17 +2,17 @@
|
||||
#pragma once
|
||||
|
||||
#include "BlockHandler.h"
|
||||
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
|
||||
class cBlockTrapdoorHandler :
|
||||
public cBlockHandler
|
||||
public cMetaRotator<cBlockHandler, 0x03, 0x01, 0x02, 0x00, 0x03, false>
|
||||
{
|
||||
public:
|
||||
cBlockTrapdoorHandler(BLOCKTYPE a_BlockType)
|
||||
: cBlockHandler(a_BlockType)
|
||||
: cMetaRotator<cBlockHandler, 0x03, 0x01, 0x02, 0x00, 0x03, false>(a_BlockType)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "BlockHandler.h"
|
||||
#include "MetaRotater.h"
|
||||
#include "MetaRotator.h"
|
||||
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
// MetaRotater.h
|
||||
// MetaRotator.h
|
||||
|
||||
// Provides a mixin for rotations and reflections
|
||||
|
||||
@ -21,15 +21,15 @@ Inherit from this class providing your base class as Base, the BitMask for the d
|
||||
*/
|
||||
|
||||
template<class Base, NIBBLETYPE BitMask, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West, bool AssertIfNotMatched = false>
|
||||
class cMetaRotater : public Base
|
||||
class cMetaRotator : public Base
|
||||
{
|
||||
public:
|
||||
|
||||
cMetaRotater(BLOCKTYPE a_BlockType) :
|
||||
cMetaRotator(BLOCKTYPE a_BlockType) :
|
||||
Base(a_BlockType)
|
||||
{}
|
||||
|
||||
virtual ~cMetaRotater() {}
|
||||
virtual ~cMetaRotator() {}
|
||||
|
||||
virtual NIBBLETYPE MetaRotateCCW(NIBBLETYPE a_Meta) override;
|
||||
virtual NIBBLETYPE MetaRotateCW(NIBBLETYPE a_Meta) override;
|
||||
@ -42,7 +42,7 @@ public:
|
||||
|
||||
|
||||
template<class Base, NIBBLETYPE BitMask, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West, bool AssertIfNotMatched>
|
||||
NIBBLETYPE cMetaRotater<Base, BitMask, North, East, South, West, AssertIfNotMatched>::MetaRotateCW(NIBBLETYPE a_Meta)
|
||||
NIBBLETYPE cMetaRotator<Base, BitMask, North, East, South, West, AssertIfNotMatched>::MetaRotateCW(NIBBLETYPE a_Meta)
|
||||
{
|
||||
NIBBLETYPE OtherMeta = a_Meta & (~BitMask);
|
||||
switch (a_Meta & BitMask)
|
||||
@ -64,7 +64,7 @@ NIBBLETYPE cMetaRotater<Base, BitMask, North, East, South, West, AssertIfNotMatc
|
||||
|
||||
|
||||
template<class Base, NIBBLETYPE BitMask, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West, bool AssertIfNotMatched>
|
||||
NIBBLETYPE cMetaRotater<Base, BitMask, North, East, South, West, AssertIfNotMatched>::MetaRotateCCW(NIBBLETYPE a_Meta)
|
||||
NIBBLETYPE cMetaRotator<Base, BitMask, North, East, South, West, AssertIfNotMatched>::MetaRotateCCW(NIBBLETYPE a_Meta)
|
||||
{
|
||||
NIBBLETYPE OtherMeta = a_Meta & (~BitMask);
|
||||
switch (a_Meta & BitMask)
|
||||
@ -86,7 +86,7 @@ NIBBLETYPE cMetaRotater<Base, BitMask, North, East, South, West, AssertIfNotMatc
|
||||
|
||||
|
||||
template<class Base, NIBBLETYPE BitMask, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West, bool AssertIfNotMatched>
|
||||
NIBBLETYPE cMetaRotater<Base, BitMask, North, East, South, West, AssertIfNotMatched>::MetaMirrorXY(NIBBLETYPE a_Meta)
|
||||
NIBBLETYPE cMetaRotator<Base, BitMask, North, East, South, West, AssertIfNotMatched>::MetaMirrorXY(NIBBLETYPE a_Meta)
|
||||
{
|
||||
NIBBLETYPE OtherMeta = a_Meta & (~BitMask);
|
||||
switch (a_Meta & BitMask)
|
||||
@ -103,7 +103,7 @@ NIBBLETYPE cMetaRotater<Base, BitMask, North, East, South, West, AssertIfNotMatc
|
||||
|
||||
|
||||
template<class Base, NIBBLETYPE BitMask, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West, bool AssertIfNotMatched>
|
||||
NIBBLETYPE cMetaRotater<Base, BitMask, North, East, South, West, AssertIfNotMatched>::MetaMirrorYZ(NIBBLETYPE a_Meta)
|
||||
NIBBLETYPE cMetaRotator<Base, BitMask, North, East, South, West, AssertIfNotMatched>::MetaMirrorYZ(NIBBLETYPE a_Meta)
|
||||
{
|
||||
NIBBLETYPE OtherMeta = a_Meta & (~BitMask);
|
||||
switch (a_Meta & BitMask)
|
Loading…
Reference in New Issue
Block a user