14dce23845
It was really a lot of work :D Took me the complete weekend :D Would really like to here your opinion on this =) The aim of this is to put all the actions for one block in one place so it is not spread around the source. (ToPickup, Action in cWorld, Action in cChunk, Action here, action there :D) git-svn-id: http://mc-server.googlecode.com/svn/trunk@671 0a769ca7-a7f5-676a-18bf-c427514a06d6
60 lines
1.5 KiB
C++
60 lines
1.5 KiB
C++
#include "Globals.h"
|
|
#include "BlockDoor.h"
|
|
#include "../cItem.h"
|
|
#include "../cWorld.h"
|
|
#include "../cDoors.h"
|
|
#include "../cPlayer.h"
|
|
|
|
|
|
cBlockDoorHandler::cBlockDoorHandler(BLOCKTYPE a_BlockID)
|
|
: cBlockHandler(a_BlockID)
|
|
{
|
|
}
|
|
|
|
void cBlockDoorHandler::OnPlaced(cWorld *a_World, int a_X, int a_Y, int a_Z, int a_Dir)
|
|
{
|
|
|
|
}
|
|
|
|
void cBlockDoorHandler::OnDestroyed(cWorld *a_World, int a_X, int a_Y, int a_Z)
|
|
{
|
|
char OldMeta = a_World->GetBlockMeta(a_X, a_Y, a_Z);
|
|
|
|
if (OldMeta & 8)
|
|
{
|
|
// Was upper part of door
|
|
if (cDoors::IsDoor(a_World->GetBlock(a_X, a_Y - 1, a_Z)))
|
|
{
|
|
a_World->FastSetBlock(a_X, a_Y - 1, a_Z, E_BLOCK_AIR, 0);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Was lower part
|
|
if (cDoors::IsDoor(a_World->GetBlock(a_X, a_Y + 1, a_Z)))
|
|
{
|
|
a_World->FastSetBlock(a_X, a_Y + 1, a_Z, E_BLOCK_AIR, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
void cBlockDoorHandler::OnClick(cWorld *a_World, cPlayer *a_Player, int a_X, int a_Y, int a_Z)
|
|
{
|
|
cDoors::ChangeDoor(a_World, a_X, a_Y, a_Z);
|
|
}
|
|
|
|
char cBlockDoorHandler::GetDropCount()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
void cBlockDoorHandler::PlaceBlock(cWorld *a_World, cPlayer *a_Player, char a_BlockMeta, int a_X, int a_Y, int a_Z, char a_Dir)
|
|
{
|
|
if (a_World->GetBlock(a_X, a_Y + 1, a_Z) == E_BLOCK_AIR)
|
|
{
|
|
a_BlockMeta = cDoors::RotationToMetaData(a_Player->GetRotation());
|
|
a_World->SetBlock(a_X, a_Y + 1, a_Z, m_BlockID, a_BlockMeta + 8);
|
|
a_World->SetBlock(a_X, a_Y, a_Z, m_BlockID, a_BlockMeta);
|
|
OnPlacedByPlayer(a_World, a_Player, a_X, a_Y, a_Z, a_Dir);
|
|
}
|
|
} |