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
This commit is contained in:
parent
756f20433a
commit
a10c4774f5
@ -1806,6 +1806,10 @@
|
||||
RelativePath="..\source\Blocks\BlockFarmland.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\source\Blocks\BlockFenceGate.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\source\blocks\BlockFire.h"
|
||||
>
|
||||
|
@ -395,9 +395,12 @@ public:
|
||||
g_BlockTransparent[E_BLOCK_CHEST] = true;
|
||||
g_BlockTransparent[E_BLOCK_COBWEB] = true;
|
||||
g_BlockTransparent[E_BLOCK_CROPS] = true;
|
||||
g_BlockTransparent[E_BLOCK_FENCE] = true;
|
||||
g_BlockTransparent[E_BLOCK_FENCE_GATE] = true;
|
||||
g_BlockTransparent[E_BLOCK_FIRE] = true;
|
||||
g_BlockTransparent[E_BLOCK_GLASS] = true;
|
||||
g_BlockTransparent[E_BLOCK_ICE] = true;
|
||||
g_BlockTransparent[E_BLOCK_IRON_DOOR] = true;
|
||||
g_BlockTransparent[E_BLOCK_LEAVES] = true;
|
||||
g_BlockTransparent[E_BLOCK_RED_MUSHROOM] = true;
|
||||
g_BlockTransparent[E_BLOCK_RED_ROSE] = true;
|
||||
@ -407,6 +410,7 @@ public:
|
||||
g_BlockTransparent[E_BLOCK_TORCH] = true;
|
||||
g_BlockTransparent[E_BLOCK_VINES] = true;
|
||||
g_BlockTransparent[E_BLOCK_WALLSIGN] = true;
|
||||
g_BlockTransparent[E_BLOCK_WOODEN_DOOR] = true;
|
||||
g_BlockTransparent[E_BLOCK_YELLOW_FLOWER] = true;
|
||||
g_BlockTransparent[E_BLOCK_RAIL] = true;
|
||||
g_BlockTransparent[E_BLOCK_DETECTOR_RAIL] = true;
|
||||
|
@ -54,15 +54,6 @@ void cBlockDoorHandler::OnDestroyed(cWorld * a_World, int a_BlockX, int a_BlockY
|
||||
|
||||
|
||||
|
||||
void cBlockDoorHandler::OnDigging(cWorld * a_World, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||
{
|
||||
cDoors::ChangeDoor(a_World, a_BlockX, a_BlockY, a_BlockZ);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cBlockDoorHandler::OnUse(cWorld * a_World, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||
{
|
||||
cDoors::ChangeDoor(a_World, a_BlockX, a_BlockY, a_BlockZ);
|
||||
@ -77,7 +68,24 @@ void cBlockDoorHandler::PlaceBlock(cWorld * a_World, cPlayer * a_Player, NIBBLET
|
||||
if (a_World->GetBlock(a_BlockX, a_BlockY + 1, a_BlockZ) == E_BLOCK_AIR)
|
||||
{
|
||||
a_BlockMeta = cDoors::RotationToMetaData(a_Player->GetRotation());
|
||||
a_World->SetBlock(a_BlockX, a_BlockY + 1, a_BlockZ, m_BlockType, a_BlockMeta + 8);
|
||||
char a_TopBlockMeta = 8;
|
||||
if((a_BlockMeta == 0) && (a_World->GetBlock(a_BlockX, a_BlockY, a_BlockZ - 1) == m_BlockType))
|
||||
{
|
||||
a_TopBlockMeta = 9;
|
||||
}
|
||||
else if((a_BlockMeta == 1) && (a_World->GetBlock(a_BlockX + 1, a_BlockY, a_BlockZ) == m_BlockType))
|
||||
{
|
||||
a_TopBlockMeta = 9;
|
||||
}
|
||||
else if((a_BlockMeta == 2) && (a_World->GetBlock(a_BlockX, a_BlockY, a_BlockZ + 1) == m_BlockType))
|
||||
{
|
||||
a_TopBlockMeta = 9;
|
||||
}
|
||||
else if((a_BlockMeta == 3) && (a_World->GetBlock(a_BlockX - 1, a_BlockY, a_BlockZ) == m_BlockType))
|
||||
{
|
||||
a_TopBlockMeta = 9;
|
||||
}
|
||||
a_World->SetBlock(a_BlockX, a_BlockY + 1, a_BlockZ, m_BlockType, a_TopBlockMeta);
|
||||
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);
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "BlockHandler.h"
|
||||
#include "../World.h"
|
||||
|
||||
|
||||
|
||||
@ -14,7 +15,6 @@ public:
|
||||
cBlockDoorHandler(BLOCKTYPE a_BlockType);
|
||||
virtual void OnPlaced(cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ, int a_Dir) override;
|
||||
virtual void OnDestroyed(cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ) override;
|
||||
virtual void OnDigging(cWorld * a_World, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ) override;
|
||||
virtual void OnUse(cWorld * a_World, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ) override;
|
||||
virtual const char * GetStepSound(void) override;
|
||||
|
||||
@ -34,6 +34,11 @@ public:
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool CanBeAt(cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ) override
|
||||
{
|
||||
return a_World->GetBlock(a_BlockX, a_BlockY - 1, a_BlockZ);
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
|
56
source/Blocks/BlockFenceGate.h
Normal file
56
source/Blocks/BlockFenceGate.h
Normal file
@ -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;
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
|
@ -49,6 +49,7 @@
|
||||
#include "BlockRail.h"
|
||||
#include "BlockGlass.h"
|
||||
#include "BlockEnderchest.h"
|
||||
#include "BlockFenceGate.h"
|
||||
|
||||
|
||||
|
||||
@ -104,6 +105,7 @@ cBlockHandler * cBlockHandler::CreateBlockHandler(BLOCKTYPE a_BlockType)
|
||||
case E_BLOCK_EMERALD_ORE: return new cBlockOreHandler (a_BlockType);
|
||||
case E_BLOCK_ENDER_CHEST: return new cBlockEnderchestHandler (a_BlockType);
|
||||
case E_BLOCK_FARMLAND: return new cBlockFarmlandHandler;
|
||||
case E_BLOCK_FENCE_GATE: return new cBlockFenceGateHandler (a_BlockType);
|
||||
case E_BLOCK_FIRE: return new cBlockFireHandler (a_BlockType);
|
||||
case E_BLOCK_FURNACE: return new cBlockFurnaceHandler (a_BlockType);
|
||||
case E_BLOCK_GLOWSTONE: return new cBlockGlowstoneHandler (a_BlockType);
|
||||
|
Loading…
Reference in New Issue
Block a user