#pragma once #include "BlockHandler.h" #include "../Doors.h" class cBlockFenceGateHandler : public cBlockHandler { public: cBlockFenceGateHandler(BLOCKTYPE a_BlockType) : cBlockHandler(a_BlockType) { } void OnPlaced(cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ, int a_Dir) { } void PlaceBlock(cWorld * a_World, cPlayer * a_Player, NIBBLETYPE a_BlockMeta, int a_BlockX, int a_BlockY, int a_BlockZ, char a_Dir) { a_BlockMeta = cDoors::RotationToMetaData(a_Player->GetRotation() + 270); a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, m_BlockType, a_BlockMeta); OnPlacedByPlayer(a_World, a_Player, a_BlockX, a_BlockY, a_BlockZ, a_Dir); } void OnUse(cWorld * a_World, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ) { char OldMetaData = a_World->GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ); char NewMetaData = cDoors::RotationToMetaData(a_Player->GetRotation() + 270); OldMetaData ^= 4; //Toggle the gate if((OldMetaData & 1) == (NewMetaData & 1)) { //Standing in front of the gate - apply new direction a_World->SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, (OldMetaData & 4) | (NewMetaData & 3)); } else { //Standing aside - use last direction a_World->SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, OldMetaData); } } virtual bool IsUseable() override { return true; } } ;