From a10c4774f541028817c2a08dc6860fef252d0200 Mon Sep 17 00:00:00 2001 From: "luksor111@gmail.com" Date: Wed, 19 Dec 2012 09:29:53 +0000 Subject: Implemented double doors Implemented fence gate Updated g_BlockTransparent[] Doors can now only be opened by right clicking Doors will now drop when not supported by block git-svn-id: http://mc-server.googlecode.com/svn/trunk@1080 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/Blocks/BlockFenceGate.h | 56 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 source/Blocks/BlockFenceGate.h (limited to 'source/Blocks/BlockFenceGate.h') diff --git a/source/Blocks/BlockFenceGate.h b/source/Blocks/BlockFenceGate.h new file mode 100644 index 000000000..072eb9c3a --- /dev/null +++ b/source/Blocks/BlockFenceGate.h @@ -0,0 +1,56 @@ + +#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; + } +} ; + + + + -- cgit v1.2.3