Added (Probably incorrectly) a cRedstone class. Also, palcing a redstone torch will recursively light any redstone wire it's connected to. Removing a torch from an active wire will unlight the entire length. Class needs to be updated to make use of non deprecated function. Current deprecated function warning drastically slows redstone performance.
git-svn-id: http://mc-server.googlecode.com/svn/trunk@51 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
79
source/cRedstone.cpp
Normal file
79
source/cRedstone.cpp
Normal file
@@ -0,0 +1,79 @@
|
||||
#include "cRedstone.h"
|
||||
#include "cWorld.h"
|
||||
|
||||
|
||||
cRedstone::cRedstone( cWorld* a_World )
|
||||
:m_World ( a_World )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void cRedstone::ChangeRedstoneTorch( int fillx, int filly, int fillz, bool added )
|
||||
{
|
||||
char metadata = 0;
|
||||
if (added) {
|
||||
metadata = 15;
|
||||
} else {
|
||||
metadata = 0;
|
||||
}
|
||||
if ( ( m_World->GetWorld()->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||
LightRedstone( fillx+1, filly, fillz, metadata );
|
||||
}
|
||||
if ( ((int)m_World->GetWorld()->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||
LightRedstone( fillx-1, filly, fillz, metadata );
|
||||
}
|
||||
if ( ((int)m_World->GetWorld()->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||
LightRedstone( fillx, filly, fillz+1, metadata );
|
||||
}
|
||||
if ( ((int)m_World->GetWorld()->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||
LightRedstone( fillx, filly, fillz-1, metadata );
|
||||
}
|
||||
|
||||
if ( ((int)m_World->GetWorld()->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||
LightRedstone( fillx+1, filly-1, fillz, metadata );
|
||||
}
|
||||
if ( ((int)m_World->GetWorld()->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||
LightRedstone( fillx-1, filly-1, fillz, metadata );
|
||||
}
|
||||
if ( ((int)m_World->GetWorld()->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||
LightRedstone( fillx, filly-1, fillz+1, metadata );
|
||||
}
|
||||
if ( ((int)m_World->GetWorld()->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||
LightRedstone( fillx, filly-1, fillz-1, metadata );
|
||||
}
|
||||
|
||||
if ( ((int)m_World->GetWorld()->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||
LightRedstone( fillx+1, filly+1, fillz, metadata );
|
||||
}
|
||||
if ( ((int)m_World->GetWorld()->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||
LightRedstone( fillx-1, filly+1, fillz, metadata );
|
||||
}
|
||||
if ( ((int)m_World->GetWorld()->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||
LightRedstone( fillx, filly+1, fillz+1, metadata );
|
||||
}
|
||||
if ( ((int)m_World->GetWorld()->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||
LightRedstone( fillx, filly+1, fillz-1, metadata );
|
||||
}
|
||||
}
|
||||
|
||||
void cRedstone::LightRedstone( int fillx, int filly, int fillz, char metadata)
|
||||
{
|
||||
if ( ( (int)m_World->GetWorld()->GetBlock( fillx, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetWorld()->GetBlockMeta( fillx, filly, fillz) != metadata ) ) {
|
||||
m_World->GetWorld()->SetBlock( fillx, filly, fillz, (char)E_BLOCK_REDSTONE_WIRE, metadata );
|
||||
LightRedstone(fillx-1,filly,fillz,metadata);
|
||||
LightRedstone(fillx+1,filly,fillz,metadata);
|
||||
LightRedstone(fillx,filly,fillz-1,metadata);
|
||||
LightRedstone(fillx,filly,fillz+1,metadata);
|
||||
|
||||
LightRedstone(fillx-1,filly-1,fillz,metadata);
|
||||
LightRedstone(fillx+1,filly-1,fillz,metadata);
|
||||
LightRedstone(fillx,filly-1,fillz-1,metadata);
|
||||
LightRedstone(fillx,filly-1,fillz+1,metadata);
|
||||
|
||||
LightRedstone(fillx-1,filly+1,fillz,metadata);
|
||||
LightRedstone(fillx+1,filly+1,fillz,metadata);
|
||||
LightRedstone(fillx,filly+1,fillz-1,metadata);
|
||||
LightRedstone(fillx,filly+1,fillz+1,metadata);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user